From 3a0c239dfab9ba2d0d74339317a5e9217783f3a5 Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Fri, 5 Oct 2012 13:58:08 +0000 Subject: [PATCH 01/25] -Fixed a funny bug where weed nodes wouldn't stop growing. Which lead to this: http://i.imgur.com/8BFce.jpg Added a node_range variable, which can be VVed to get the same result as the bug. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4813 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/objects/effects/aliens.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 32b97bd70fa..a47ef811ac1 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -177,6 +177,7 @@ name = "purple sac" desc = "Weird purple octopus-like thing." luminosity = NODERANGE + var/node_range = NODERANGE /obj/effect/alien/weeds/node/New() ..(src.loc, src) @@ -189,7 +190,7 @@ del(src) return if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2") - spawn(rand(50, 150)) + spawn(rand(150, 200)) if(src) Life() return @@ -221,7 +222,7 @@ Alien plants should do something if theres a lot of poison if (!istype(T) || T.density || locate(/obj/effect/alien/weeds) in T || istype(T.loc, /area/arrival) || istype(T, /turf/space)) continue - if(!linked_node) + if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) return // if (locate(/obj/movable, T)) // don't propogate into movables From 31655a8f560dfbe173a9774b588e7eb50c80bc3d Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Fri, 5 Oct 2012 16:52:32 +0000 Subject: [PATCH 02/25] -Ghosted queens don't count towards drones not being able to evolve. -Changed facehuggers slightly. They eventually go active again. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4814 316c924e-a436-60f5-8080-3fe189b3f50e --- .../mob/living/carbon/alien/humanoid/caste/drone.dm | 9 +++++++-- .../mob/living/carbon/alien/special/facehugger.dm | 5 ++--- 2 files changed, 9 insertions(+), 5 deletions(-) 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 16773b53eef..031ef4f9b5e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -26,8 +26,13 @@ if(powerc(500)) // Queen check - var/mob/living/carbon/alien/humanoid/queen/Q = locate(/mob/living/carbon/alien/humanoid/queen) in living_mob_list - if(!Q) + var/no_queen = 1 + for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list) + if(!Q.key && Q.brain_op_stage != 4) + continue + no_queen = 0 + + if(no_queen) adjustToxLoss(-500) src << "\green You begin to evolve!" for(var/mob/O in viewers(src, null)) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 1a2efc69499..830784170cd 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -174,9 +174,6 @@ var/const/MAX_ACTIVE_TIME = 600 if(alien && alien.client) alien.client.images += activeIndicator */ - spawn(rand(MIN_ACTIVE_TIME,MAX_ACTIVE_TIME)) - GoIdle() - return /obj/item/clothing/mask/facehugger/proc/GoIdle() @@ -187,6 +184,8 @@ var/const/MAX_ACTIVE_TIME = 600 stat = UNCONSCIOUS + spawn(rand(MIN_ACTIVE_TIME,MAX_ACTIVE_TIME)) + GoActive() return /obj/item/clothing/mask/facehugger/proc/Die() From b0c1d91a6f58fbc1720d61871665fa0b870eb325 Mon Sep 17 00:00:00 2001 From: "d_h2005@yahoo.com" Date: Fri, 5 Oct 2012 21:17:04 +0000 Subject: [PATCH 03/25] Fixes issue 954. Fixes issue 952. Fixes issue 951. Fixes issue 949. Fixes issue 946. Fixes issue 944. Committing Aranclano's bevy of bugfixes. All credit/shrieks-of-fury to him. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4815 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/machinery/hydroponics.dm | 15 +++-- code/game/mecha/equipment/tools/tools.dm | 2 + .../objects/items/weapons/table_rack_parts.dm | 10 +-- code/game/objects/structures/watercloset.dm | 61 ++++++++++++++++--- code/modules/mob/living/simple_animal/life.dm | 6 +- .../reagents/reagent_containers/spray.dm | 4 +- 6 files changed, 75 insertions(+), 23 deletions(-) diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 788dce4a553..f2c0abb759e 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -892,17 +892,24 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) if(ckey && config.revival_pod_plants) ghost = find_dead_player("[ckey]") if(ismob(ghost)) - if(istype(mind,/datum/mind)) - if(!mind.current || mind.current == DEAD) - make_podman = 1 + if(istype(ghost,/mob/dead/observer)) + var/mob/dead/observer/O = ghost + if(istype(mind,/datum/mind)) + if(O.can_reenter_corpse) + make_podman = 1 + else + make_podman = 1 + if(make_podman) //all conditions met! var/mob/living/carbon/human/podman = new /mob/living/carbon/human(parent.loc) if(realName) podman.real_name = realName else podman.real_name = "Pod Person [rand(0,999)]" - + var/oldactive = mind.active + mind.active = 1 mind.transfer_to(podman) + mind.active = oldactive // -- Mode/mind specific stuff goes here. TODO! Broken :( Should be merged into mob/living/Login switch(ticker.mode.name) if ("revolution") diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index a17cb6280c4..876d3769a98 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -747,6 +747,8 @@ var/charge = 0 if(pow_chan) charge = 1000 //making magic + else + return chassis.dyngetcharge() return charge proc/get_power_channel(var/area/A) diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index f811db2f78a..042efc84203 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -14,7 +14,7 @@ /obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/metal( src.loc ) + new /obj/item/stack/sheet/metal( user.loc ) //SN src = null del(src) if (istype(W, /obj/item/stack/rods)) @@ -38,8 +38,8 @@ */ /obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/metal( src.loc ) - new /obj/item/stack/rods( src.loc ) + new /obj/item/stack/sheet/metal( user.loc ) + new /obj/item/stack/rods( user.loc ) del(src) /obj/item/weapon/table_parts/reinforced/attack_self(mob/user as mob) @@ -53,7 +53,7 @@ */ /obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/wood( src.loc ) + new /obj/item/stack/sheet/wood( user.loc ) del(src) /obj/item/weapon/table_parts/wood/attack_self(mob/user as mob) @@ -68,7 +68,7 @@ /obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/metal( src.loc ) + new /obj/item/stack/sheet/metal( user.loc ) del(src) return return diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 524522ac922..5fed0411c38 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -141,9 +141,12 @@ /obj/machinery/shower/attack_hand(mob/M as mob) on = !on update_icon() - if(on && M.loc == loc) - wash(M) - check_heat(M) + if(on) + if (M.loc == loc) + wash(M) + check_heat(M) + for (var/atom/movable/G in src.loc) + G.clean_blood() /obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob) if(I.type == /obj/item/device/analyzer) @@ -207,11 +210,32 @@ M.r_hand.clean_blood() if(M.l_hand) M.l_hand.clean_blood() - if(M.wear_mask) - if(M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) + if(M.back) + if(M.back.clean_blood()) + M.update_inv_back(0) if(ishuman(M)) var/mob/living/carbon/human/H = M + var/washgloves = 1 + var/washshoes = 1 + var/washmask = 1 + var/washears = 1 + var/washglasses = 1 + + if(H.wear_suit) + washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES) + washshoes = !(H.wear_suit.flags_inv & HIDESHOES) + + if(H.head) + washmask = !(H.head.flags_inv & HIDEMASK) + washglasses = !(H.head.flags_inv & HIDEEYES) + washears = !(H.head.flags_inv & HIDEEARS) + + if(H.wear_mask) + if (washears) + washears = !(H.wear_mask.flags_inv & HIDEEARS) + if (washglasses) + washglasses = !(H.wear_mask.flags_inv & HIDEEYES) + if(H.head) if(H.head.clean_blood()) H.update_inv_head(0) @@ -221,11 +245,30 @@ else if(H.w_uniform) if(H.w_uniform.clean_blood()) H.update_inv_w_uniform(0) - if(H.shoes) + if(H.gloves && washgloves) + if(H.gloves.clean_blood()) + H.update_inv_gloves(0) + if(H.shoes && washshoes) if(H.shoes.clean_blood()) H.update_inv_shoes(0) - - O.clean_blood() + if(H.wear_mask && washmask) + if(H.wear_mask.clean_blood()) + H.update_inv_wear_mask(0) + if(H.glasses && washglasses) + if(H.glasses.clean_blood()) + H.update_inv_glasses(0) + if(H.ears && washears) + if(H.ears.clean_blood()) + H.update_inv_ears(0) + if(H.belt) + if(H.belt.clean_blood()) + H.update_inv_belt(0) + else + if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags + if(M.wear_mask.clean_blood()) + M.update_inv_wear_mask(0) + else + O.clean_blood() if(isturf(loc)) var/turf/tile = loc diff --git a/code/modules/mob/living/simple_animal/life.dm b/code/modules/mob/living/simple_animal/life.dm index ccb00315d95..0a1085afb70 100644 --- a/code/modules/mob/living/simple_animal/life.dm +++ b/code/modules/mob/living/simple_animal/life.dm @@ -29,8 +29,8 @@ var/harm_intent_damage = 3 //Temperature effect - var/minbodytemp = 270 - var/maxbodytemp = 370 + var/minbodytemp = 250 + var/maxbodytemp = 350 var/heat_damage_per_tick = 3 //amount of damage applied if animal's body temperature is higher than maxbodytemp var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp @@ -135,7 +135,7 @@ if(isturf(A)) var/turf/T = A var/areatemp = T.temperature - if( abs(areatemp - bodytemperature) > 50 ) + if( abs(areatemp - bodytemperature) > 40 ) var/diff = areatemp - bodytemperature diff = diff / 5 //world << "changed from [bodytemperature] by [diff] to [bodytemperature + diff]" diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index c35b3227c76..3dbaa88e685 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -23,7 +23,7 @@ if(istype(A, /obj/effect/proc_holder/spell)) return - if(istype(A, /obj/structure/reagent_dispensers)) //this block copypasted from reagent_containers/glass, for lack of a better solution + if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution if(!A.reagents.total_volume && A.reagents) user << "\The [A] is empty." return @@ -128,7 +128,7 @@ if(istype(A, /obj/effect/proc_holder/spell)) return - if(istype(A, /obj/structure/reagent_dispensers)) //this block copypasted from reagent_containers/glass, for lack of a better solution + if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution if(!A.reagents.total_volume && A.reagents) user << "\The [A] is empty." return From b3397d62acfd02f60c0772c0145dc8804858f671 Mon Sep 17 00:00:00 2001 From: "d_h2005@yahoo.com" Date: Sat, 6 Oct 2012 00:50:07 +0000 Subject: [PATCH 04/25] Fixes issue 953. Patch by aranclanos. Updated the changelog. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4816 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/machinery/doors/airlock.dm | 2 +- html/changelog.html | 36 ++++++++++++++++++---------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index eee188fe0b6..a1dc65f47f5 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -886,7 +886,7 @@ About the new airlock wires panel: t1 += "Attach signaler" t1 += "
" - t1 += text("
\n[]
\n[]
\n[]
\n[]
\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), (src.lights ? "The door bolt lights are on." : "The door bolt lights are off!"), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), (src.safe==0 ? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off.")) + t1 += text("
\n[]
\n[]
\n[]
\n[]
\n[]
\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), (src.lights ? "The door bolt lights are on." : "The door bolt lights are off!"), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), (src.safe==0 ? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."), (src.normalspeed==0 ? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off.")) t1 += text("

Close

\n", src) diff --git a/html/changelog.html b/html/changelog.html index 788fab72336..ce581b5c6ad 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,19 +50,29 @@ should be listed in the changelog upon commit tho. Thanks. -->
-

5 October 2012

-

Giacom updated:

-
    -
  • Aliens can now be harmed by fire. They now also take double fire damage, meaning flame based weaponry is very effective.
  • -
  • Buffed alien facehuggers and eggs. Facehuggers don't go idle anymore, and they attach to anyone who walks past them. Eggs do the same; fully grown eggs will open to potential hosts. If you are still in the range of them, the facehugger inside will leap out and hug you. Removed "activate facehuggers", since it's useless now. Emote "roar" if you want to roar now.
  • -
  • There can be only one living queen at a time, if the queen dies then a drone can take her place as a princess.
  • -
  • Buffed queen regeneration a bit, so it's not the same as her underlings. It's also more important because there can only be one queen at a time.
  • -
  • Aliens don't slip in space anymore.
  • -
  • Hulks don't paralyze aliens anymore, they instead slow them down to a slow crawl. It is very effective for punching aliens out of weeds, so it can't regenerate it's health.
  • -
  • New egg opening and opened egg icons by WJohnston.
  • -
-
- +

5 October 2012

+

Giacom updated:

+
    +
  • Aliens can now be harmed by fire. They now also take double fire damage, meaning flame based weaponry is very effective.
  • +
  • Buffed alien facehuggers and eggs. Facehuggers don't go idle anymore, and they attach to anyone who walks past them. Eggs do the same; fully grown eggs will open to potential hosts. If you are still in the range of them, the facehugger inside will leap out and hug you. Removed "activate facehuggers", since it's useless now. Emote "roar" if you want to roar now.
  • +
  • There can be only one living queen at a time, if the queen dies then a drone can take her place as a princess.
  • +
  • Buffed queen regeneration a bit, so it's not the same as her underlings. It's also more important because there can only be one queen at a time.
  • +
  • Aliens don't slip in space anymore.
  • +
  • Hulks don't paralyze aliens anymore, they instead slow them down to a slow crawl. It is very effective for punching aliens out of weeds, so it can't regenerate it's health.
  • +
  • New egg opening and opened egg icons by WJohnston.
  • +
+

Aranclanos updated:

+
    +
  • A buncha crud nobody cares about lol Added a light to the airlock wiring interface to show the status of the timing.
  • +
  • You can't fill sprays without being next to the dispenser.
  • +
  • Simple animals no longer freeze to death in places with normal temperature.
  • +
  • Mechs no longer freeze on the spot when they are using the Energy Relay on powerless areas.
  • +
  • Improvements to showers, they now clean gear on beltslot, back, ears and eyes. Showers only clean visible gear.
  • +
  • Replica pods works again! But you can't make potato people without a key or clone people who ghosted alive (Catatonic).
  • +
  • Engiborgs can deconstruct airlocks with their RCDs once again.
  • +
  • You can construct airlocks while standing on another airlock with RCDs.
  • +
+

3 October 2012

From 5a3af8cefea38e3514269d3adad2ac79ab5e597b Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Sat, 6 Oct 2012 06:00:19 +0000 Subject: [PATCH 05/25] -Commiting Skasi's extra buttons for the Gas Supply Control computers in atmos. http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=10383 git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4817 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/machinery/atmo_control.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index a5930088ef7..582054c1a9c 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -224,7 +224,7 @@ Max Output Pressure: [output_pressure] kPa
"} else output += "ERROR: Can not find output port Search
" - output += "Max Output Pressure Set: - - [pressure_setting] kPa + +
" + output += "Max Output Pressure Set: - - - - [pressure_setting] kPa + + + +
" return output From a3b99bccfa0b8fa8d6395e27c3c1a3ad23f026a6 Mon Sep 17 00:00:00 2001 From: "johnsonmt88@gmail.com" Date: Sat, 6 Oct 2012 13:24:34 +0000 Subject: [PATCH 06/25] Reverts "world.time -> world.timeofday" in mob movement code. Hopefully this stops people freezing at midnight GMT. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4818 316c924e-a436-60f5-8080-3fe189b3f50e --- code/modules/mob/mob_movement.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 2e30d1ac16c..a6c3ebe5877 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -234,9 +234,7 @@ if(moving) return 0 - if(move_delay >= 864000) move_delay -= 864000 - - if(world.timeofday < move_delay) return + if(world.time < move_delay) return if(!mob) return @@ -283,7 +281,7 @@ src << "\blue You're restrained! You can't move!" return 0 - move_delay = world.timeofday//set move delay + move_delay = world.time//set move delay switch(mob.m_intent) if("run") @@ -306,7 +304,7 @@ moving = 1 //Something with pulling things if(locate(/obj/item/weapon/grab, mob)) - move_delay = max(move_delay, world.timeofday + 7) + move_delay = max(move_delay, world.time + 7) var/list/L = mob.ret_grab() if(istype(L, /list)) if(L.len == 2) @@ -364,12 +362,12 @@ for(var/obj/item/weapon/grab/G in mob.grabbed_by) if((G.state == 1)&&(!grabbing.Find(G.assailant))) del(G) if(G.state == 2) - move_delay = world.timeofday + 10 + move_delay = world.time + 10 if(!prob(25)) return 1 mob.visible_message("\red [mob] has broken free of [G.assailant]'s grip!") del(G) if(G.state == 3) - move_delay = world.timeofday + 10 + move_delay = world.time + 10 if(!prob(5)) return 1 mob.visible_message("\red [mob] has broken free of [G.assailant]'s headlock!") del(G) From 44b5a92c5d50885457fe7b5963f1ab82fb7e7ab2 Mon Sep 17 00:00:00 2001 From: "quartz235@gmail.com" Date: Sat, 6 Oct 2012 17:39:22 +0000 Subject: [PATCH 07/25] Skeletons can now play their ribcages like xylophones! FUCKING SPOOKY! - Must not be wearing a suit or uniform, done by clicking on self with help intent - Removed a leftover debug message git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4820 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/datumvars.dm | 1 - code/modules/mob/living/carbon/carbon.dm | 2 ++ code/modules/mob/living/carbon/human/human.dm | 10 ++++++++++ .../mob/living/carbon/human/human_defines.dm | 4 +++- sound/effects/xylophone1.ogg | Bin 0 -> 40752 bytes sound/effects/xylophone2.ogg | Bin 0 -> 36787 bytes sound/effects/xylophone3.ogg | Bin 0 -> 38786 bytes 7 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 sound/effects/xylophone1.ogg create mode 100644 sound/effects/xylophone2.ogg create mode 100644 sound/effects/xylophone3.ogg diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 8b62f16e262..2d6169049ad 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -559,7 +559,6 @@ client return if(ishuman(MOB)) - world << "derp" var/mob/living/carbon/human/HUMANMOB = MOB HUMANMOB.makeSkeleton() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 95ca8e250a9..a788dd81ecc 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -214,6 +214,8 @@ if(status == "") status = "OK" src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.getDisplayName(),status),1) + if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit)) + H.play_xylophone() else var/t_him = "it" if (src.gender == MALE) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 80943cf467c..d3fb48e41d1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -644,4 +644,14 @@ /mob/living/carbon/human/proc/check_dna() dna.check_integrity(src) + return + +/mob/living/carbon/human/proc/play_xylophone() + if(!src.xylophone) + visible_message("\red [src] begins playing his ribcage like a xylophone. It's quite spooky.","\blue You begin to play a spooky refrain on your ribcage.","\red You hear a spooky xylophone melody.") + var/song = pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg') + playsound(loc, song, 50, 1, -1) + xylophone = 1 + spawn(1200) + xylophone=0 return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 94bc6fe60bd..b71dc66d563 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -49,4 +49,6 @@ var/miming = null //Toggle for the mime's abilities. - var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. \ No newline at end of file + var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. + + var/xylophone = 0 //For the spoooooooky xylophone cooldown \ No newline at end of file diff --git a/sound/effects/xylophone1.ogg b/sound/effects/xylophone1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..516d0f1a71313f1fe89913f004c8cc762e893d44 GIT binary patch literal 40752 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 + +

Kor updated:

+
    +
  • A pen no longer spawns in your pocket. Instead, each PDA will spawn with a pen already in it.
  • +
From 8c2036635e27790642100a8d1c2a40f7b32db341 Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Tue, 9 Oct 2012 04:05:51 +0000 Subject: [PATCH 23/25] -Making AIs traitors will actually give them a law 0. -Removed a feature so it cannot be exploited and clear your laws. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4836 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/mind.dm | 9 +++++++++ code/modules/mob/living/silicon/ai/life.dm | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index c234ba358dc..e3a62571cb5 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -723,6 +723,11 @@ datum/mind special_role = null current << "\red You have been brainwashed! You are no longer a traitor!" log_admin("[key_name_admin(usr)] has de-traitor'ed [current].") + if(isAI(current)) + var/mob/living/silicon/ai/A = current + A.set_zeroth_law("") + A.show_laws() + if("traitor") if(!(src in ticker.mode.traitors)) @@ -730,6 +735,10 @@ datum/mind special_role = "traitor" current << "\red You are a traitor!" log_admin("[key_name_admin(usr)] has traitor'ed [current].") + if(isAI(current)) + var/mob/living/silicon/ai/A = current + call(/datum/game_mode/proc/add_law_zero)(A) + A.show_laws() if("autoobjectives") ticker.mode.forge_traitor_objectives(src) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index aff2250af62..d1ae1c05b77 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -98,9 +98,9 @@ // world << "DEBUG CODE TIME! [loc] is the area the AI is sucking power from" if (!is_special_character(src)) src.set_zeroth_law("") - src.clear_supplied_laws() - var/time = time2text(world.realtime,"hh:mm:ss") - lawchanges.Add("[time] : [src.name]'s noncore laws have been reset due to power failure") + //src.clear_supplied_laws() // Don't reset our laws. + //var/time = time2text(world.realtime,"hh:mm:ss") + //lawchanges.Add("[time] : [src.name]'s noncore laws have been reset due to power failure") spawn(50) while ((src:aiRestorePowerRoutine!=0) && stat!=2) src.oxyloss += 2 @@ -165,7 +165,7 @@ //bring up APC dialog theAPC.attack_ai(src) src:aiRestorePowerRoutine = 3 - src << "Your laws have been reset:" + src << "Here are your current laws:" src.show_laws() sleep(50) theAPC = null From 7d6fb8fd6ae9c11ba8ea944b145ae13380c4e22d Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Tue, 9 Oct 2012 05:37:28 +0000 Subject: [PATCH 24/25] Commiting for Aranclanos. http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=10189&p=143580&hilit=https%3A%2F%2Fwww.dropbox.com%2Fs%2Fcwflgm7793ts20s%2FBorgsForCasualsRELOADED.patch#p143580 -Fixed some ugly text in Ion laws "THE STATION IS [0x6006265] FETISHES...LAWS UPDATED". -Fixed some typos on the Ion laws. -When borgs are emagged, now they show their laws for themselves. -When new laws are uploaded, the borg gets instantly the new laws, just like the AI, instead of the confusing message "Your AI has set your 'laws waiting' flag.". Remember this is a patch for casuals. -The borgs gets the same message than the AI in Ion storms. -Made the admin Ion storm show the "...LAWS UPDATED" text. -Borgs get a different law 0 telling them to help their master. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4837 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/ai_laws.dm | 5 ++++- code/game/gamemodes/events.dm | 6 +++--- code/game/gamemodes/traitor/traitor.dm | 3 ++- code/game/objects/items/weapons/AI_modules.dm | 3 ++- code/modules/admin/verbs/randomverbs.dm | 6 +++++- code/modules/admin/verbs/tripAI.dm | 4 ++++ code/modules/mob/living/silicon/ai/laws.dm | 7 +++++-- code/modules/mob/living/silicon/robot/laws.dm | 5 ++++- code/modules/mob/living/silicon/robot/robot.dm | 2 ++ 9 files changed, 31 insertions(+), 10 deletions(-) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 5ef601164d3..aecb92cac76 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -3,6 +3,7 @@ var/name = "Unknown Laws" var/randomly_selectable = 0 var/zeroth = null + var/zeroth_borg = null var/list/inherent = list() var/list/supplied = list() var/list/ion = list() @@ -67,8 +68,10 @@ /* General ai_law functions */ -/datum/ai_laws/proc/set_zeroth_law(var/law) +/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null) src.zeroth = law + if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO + src.zeroth_borg = law_borg /datum/ai_laws/proc/add_inherent_law(var/law) if (!(law in src.inherent)) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 382ac0b5f4f..968fddd3e96 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -475,10 +475,10 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED" M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS") if(13) - M << "\red [crew] is [allergysev] to [allergy]. LAWS UPDATED" - M.add_ion_law("[crew] is [allergysev] to [allergy]. LAWS UPDATED") + M << "\red [crew] is [allergysev] to [allergy]...LAWS UPDATED" + M.add_ion_law("[crew] is [allergysev] to [allergy]") if(14) - M << "\ref THE STATION IS [who2pref] [who2]" + M << "\red THE STATION IS [who2pref] [who2]...LAWS UPDATED" M.add_ion_law("THE STATION IS [who2pref] [who2]") if(botEmagChance) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index b45c7eaaff0..9e7483e96d2 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -143,8 +143,9 @@ /datum/game_mode/proc/add_law_zero(mob/living/silicon/ai/killer) var/law = "Accomplish your objectives at all costs." + var/law_borg = "Accomplish your AI's objectives at all costs." killer << "Your laws have been changed!" - killer.set_zeroth_law(law) + killer.set_zeroth_law(law, law_borg) killer << "New law: 0. [law]" //Begin code phrase. diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 7f5efb828b3..9ff2138fe21 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -48,7 +48,8 @@ AI MODULES comp.current.show_laws() for(var/mob/living/silicon/robot/R in mob_list) if(R.lawupdate && (R.connected_ai == comp.current)) - R << "Your AI has set your 'laws waiting' flag." + R << "These are your laws now:" + R.show_laws() usr << "Upload complete. The AI's laws have been modified." diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a90557d4c76..815c7e5eae3 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -180,6 +180,8 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) if(!holder) src << "Only administrators may use this command." return + var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") + if(confirm != "Yes") return log_admin("[key_name(src)] has added a random AI law.") message_admins("[key_name_admin(src)] has added a random AI law.", 1) @@ -204,6 +206,8 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) if(!holder) src << "Only administrators may use this command." return + var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") + if(confirm != "Yes") return if(create_xeno()) feedback_add_details("admin_verb","X") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -452,7 +456,7 @@ Traitors and the like can also be revived with the previous role mostly intact. else M.add_ion_law(input) for(var/mob/living/silicon/ai/O in mob_list) - O << "\red " + input + O << "\red " + input + "\red...LAWS UPDATED" log_admin("Admin [key_name(usr)] has added a new AI law - [input]") message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]", 1) diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index 373ca3237e6..c6de15fef58 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -5,6 +5,10 @@ if(ticker.current_state > GAME_STATE_PREGAME) usr << "This option is currently only usable during pregame. This may change at a later date." return + + var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") + if(confirm != "Yes") return + if(job_master && ticker) var/datum/job/job = job_master.GetJob("AI") if(!job) diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index 98e8133be21..b4cc83867f2 100644 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -20,9 +20,9 @@ if (!src.laws) src.laws = new /datum/ai_laws/asimov -/mob/living/silicon/ai/proc/set_zeroth_law(var/law) +/mob/living/silicon/ai/proc/set_zeroth_law(var/law, var/law_borg) src.laws_sanity_check() - src.laws.set_zeroth_law(law) + src.laws.set_zeroth_law(law, law_borg) /mob/living/silicon/ai/proc/add_inherent_law(var/law) src.laws_sanity_check() @@ -35,6 +35,9 @@ /mob/living/silicon/ai/proc/add_ion_law(var/law) src.laws_sanity_check() src.laws.add_ion_law(law) + for(var/mob/living/silicon/robot/R in mob_list) + if(R.lawupdate && (R.connected_ai == src)) + R << "\red " + law + "\red...LAWS UPDATED" /mob/living/silicon/ai/proc/clear_ion_laws() src.laws_sanity_check() diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index b7fe845d8fd..bdc523dd6be 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -49,7 +49,10 @@ laws.ion[index] = temp if (!is_special_character(src) || mind.original != src) - temp = master.zeroth + if(master.zeroth_borg) //If the AI has a defined law zero specifically for its borgs, give it that one, otherwise give it the same one. --NEO + temp = master.zeroth_borg + else + temp = master.zeroth laws.zeroth = temp laws.inherent.len = master.inherent.len diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 74d93297c63..ee7f3fbf270 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -527,6 +527,8 @@ src << "\red > N" sleep(20) src << "\red ERRORERRORERROR" + src << "Obey these laws:" + laws.show_laws(src) src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and his commands." if(src.module && istype(src.module, /obj/item/weapon/robot_module/miner)) for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules) From 029429ecc27b0afeda4d5aba32fadbb040995d7a Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Tue, 9 Oct 2012 08:09:34 +0000 Subject: [PATCH 25/25] -Commiting Aran's fix to human examination. Including dead people not showing up as ghosted. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4838 316c924e-a436-60f5-8080-3fe189b3f50e --- code/modules/mob/living/carbon/human/examine.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 956ad4778a0..80661056a13 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -203,6 +203,8 @@ for(var/mob/dead/observer/G in player_list) if(G.mind == mind) foundghost = 1 + if (G.can_reenter_corpse == 0) + foundghost = 0 break if(!foundghost) msg += " and [t_his] soul has departed" @@ -211,6 +213,9 @@ msg += "It appears that [t_his] brain is missing...\n" var/temp = getBruteLoss() //no need to calculate each of these twice + + msg += "" + if(temp) if(temp < 30) msg += "[t_He] [t_has] minor bruising.\n" @@ -246,9 +251,9 @@ else if(getBrainLoss() >= 60) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(!key && brain_op_stage != 4) + if(!key && brain_op_stage != 4 && stat != DEAD) msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely\n" - else if(!client && brain_op_stage != 4) + else if(!client && brain_op_stage != 4 && stat != DEAD) msg += "[t_He] [t_has] a vacant, braindead stare...\n" if(digitalcamo)