From e6078b100fb334997e8c90e560e624d54c4e0186 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Tue, 28 Aug 2012 20:22:22 +1000 Subject: [PATCH] Merge tgstation r4572 into bs12_with_tgport, fixed missing title screen (tgside problem?), some conflicts Signed-off-by: Cael_Aislinn --- code/game/gamemodes/events.dm | 7 +- code/game/machinery/hydroponics.dm | 22 +++--- .../machinery/telecomms/telecomunications.dm | 3 +- code/game/objects/items/devices/PDA/PDA.dm | 3 +- .../objects/structures/stool_chair_bed.dm | 2 +- code/game/turfs/turf.dm | 6 +- code/modules/mob/living/silicon/ai/ai.dm | 11 ++- .../mob/living/silicon/ai/freelook/eye.dm | 6 ++ .../silicon/ai/freelook/update_triggers.dm | 9 +-- .../modules/mob/living/silicon/robot/robot.dm | 8 ++- code/modules/mob/living/silicon/silicon.dm | 68 +++++++++++++++++++ code/modules/mob/mob_grab.dm | 12 ++-- .../modules/projectiles/projectile/special.dm | 5 +- code/modules/reagents/Chemistry-Recipes.dm | 4 +- maps/tgstation.2.0.9.dmm | 2 +- 15 files changed, 127 insertions(+), 41 deletions(-) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index b69081b0df..d5d67badc0 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -97,8 +97,11 @@ /proc/communications_blackout(var/silent = 1) - //Uncomment below if you want communication blackouts to have a warning. - if(!silent) command_alert("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") + if(!silent) + command_alert("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") + else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms + for(var/mob/living/silicon/ai/A in player_list) + A << "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT" for(var/obj/machinery/telecomms/T in telecomms_list) T.emp_act(1) diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 7109f932aa..830ffd47ab 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -20,15 +20,21 @@ var/planted = 0 // Is it occupied? var/harvest = 0 //Ready to harvest? var/obj/item/seeds/myseed = null // The currently planted seed - New() + +/obj/machinery/hydroponics/bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. + if(istype(Proj ,/obj/item/projectile/energy/floramut)) + if(src.planted) + src.mutate() + else if(istype(Proj ,/obj/item/projectile/energy/florayield)) + if(src.planted && src.myseed.yield == 0)//Oh god don't divide by zero you'll doom us all. + src.myseed.yield += 1 + //world << "Yield increased by 1, from 0, to a total of [src.myseed.yield]" + else if (src.planted && (prob(1/(src.myseed.yield * src.myseed.yield) *100)))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... + src.myseed.yield += 1 + //world << "Yield increased by 1, to a total of [src.myseed.yield]" + else ..() - bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. - if(istype(Proj ,/obj/item/projectile/energy/floramut)) - if(src.planted) - src.mutate() - else if(istype(Proj ,/obj/item/projectile/energy/florayield)) - if(src.planted && src.myseed.yield < 2) - src.myseed.yield += 1 + return /obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) ..() diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 521565eb22..8063c39ced 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -210,7 +210,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() if(prob(100/severity)) if(!(stat & EMPED)) stat |= EMPED - spawn(1600/severity) + var/duration = (300 * 10)/severity + spawn(rand(duration - 20, duration + 20)) // Takes a long time for the machines to reboot. stat &= ~EMPED ..() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 466125addb..61435c7569 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -723,7 +723,8 @@ var/global/list/obj/item/device/pda/PDAs = list() if(signal) if(signal.data["done"]) useTC = 1 - if(P.loc.z in signal.data["level"]) + var/turf/pos = get_turf(P) + if(pos.z in signal.data["level"]) useTC = 2 //Let's make this barely readable if(signal.data["compression"] > 0) diff --git a/code/game/objects/structures/stool_chair_bed.dm b/code/game/objects/structures/stool_chair_bed.dm index 448c4829ab..6946f2a9fd 100644 --- a/code/game/objects/structures/stool_chair_bed.dm +++ b/code/game/objects/structures/stool_chair_bed.dm @@ -76,7 +76,7 @@ if(buckled_mob != user) buckled_mob.visible_message(\ "\blue [buckled_mob.name] was unbuckled by [user.name]!",\ - "You unbuckled from [src] by [user.name].",\ + "You were unbuckled from [src] by [user.name].",\ "You hear metal clanking") else buckled_mob.visible_message(\ diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index ccb9dab50f..33a841e88e 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -15,6 +15,10 @@ return ..() +/turf/Click() + if(!isAI(usr)) + ..() + /turf/New() ..() for(var/atom/movable/AM as mob|obj in src) @@ -987,7 +991,7 @@ new /obj/structure/girder(src) src.ReplaceWithFloor() for(var/turf/simulated/floor/target_tile in range(0,src)) - //skytodo: + //skytodo /*if(target_tile.parent && target_tile.parent.group_processing) target_tile.parent.suspend_group_processing()*/ var/datum/gas_mixture/napalm = new diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 39fd0e2286..1b87ab61ac 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -298,7 +298,6 @@ switchCamera(locate(href_list["switchcamera"])) in cameranet.cameras if (href_list["showalerts"]) ai_alerts() - //Carn: holopad requests if (href_list["jumptoholopad"]) var/obj/machinery/hologram/holopad/H = locate(href_list["jumptoholopad"]) @@ -474,18 +473,18 @@ L[A.name] = list(A, (C) ? C : O, list(alarmsource)) if (O) if (C && C.can_use()) - src << "--- [class] alarm detected in [A.name]! ([C.c_tag])" + queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class) else if (CL && CL.len) var/foo = 0 var/dat2 = "" for (var/obj/machinery/camera/I in CL) dat2 += text("[][]", (!foo) ? "" : " | ", src, I, I.c_tag) //I'm not fixing this shit... foo = 1 - src << text ("--- [] alarm detected in []! ([])", class, A.name, dat2) + queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class) else - src << text("--- [] alarm detected in []! (No Camera)", class, A.name) + queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class) else - src << text("--- [] alarm detected in []! (No Camera)", class, A.name) + queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class) if (viewalerts) ai_alerts() return 1 @@ -502,7 +501,7 @@ cleared = 1 L -= I if (cleared) - src << text("--- [] alarm in [] has been cleared.", class, A.name) + queueAlarm(text("--- [] alarm in [] has been cleared.", class, A.name), class, 0) if (viewalerts) ai_alerts() return !cleared diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index b72c39c0c6..4e0551c7b9 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -65,6 +65,12 @@ del(eyeobj) // No AI, no Eye ..() +/atom/proc/move_camera_by_click() + if(istype(usr, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/AI = usr + if(AI.client.eye == AI.eyeobj) + AI.eyeobj.setLoc(src) + // This will move the AIEye. It will also cause lights near the eye to light up, if toggled. // This is handled in the proc below this one. diff --git a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm index f921cdecd5..03429b3420 100644 --- a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm +++ b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm @@ -8,13 +8,6 @@ /turf/proc/visibilityChanged() cameranet.updateVisibility(src) -/atom/proc/move_camera_by_click() - if(istype(usr, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/AI = usr - if(AI.client.eye == AI.eyeobj) - AI.eyeobj.setLoc(src) - -/* /turf/simulated/Del() visibilityChanged() ..() @@ -23,6 +16,8 @@ ..() visibilityChanged() +/* + // STRUCTURES /obj/structure/Del() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0830eb361d..7a885d8bb5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -345,7 +345,7 @@ else if (O && istype(O, /obj/machinery/camera)) C = O L[A.name] = list(A, (C) ? C : O, list(alarmsource)) - src << text("--- [class] alarm detected in [A.name]!") + queueAlarm(text("--- [class] alarm detected in [A.name]!"), class) // if (viewalerts) robot_alerts() return 1 @@ -363,7 +363,7 @@ cleared = 1 L -= I if (cleared) - src << text("--- [class] alarm in [A.name] has been cleared.") + queueAlarm(text("--- [class] alarm in [A.name] has been cleared."), class, 0) // if (viewalerts) robot_alerts() return !cleared @@ -813,6 +813,10 @@ src << browse(null, t1) return + if (href_list["showalerts"]) + robot_alerts() + return + if (href_list["mod"]) var/obj/item/O = locate(href_list["mod"]) O.attack_self(src) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 81db1563ba..fd3ce047c3 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -4,6 +4,12 @@ voice_name = "synthesized voice" var/syndicate = 0 var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS + var/list/alarms_to_show = list() + var/list/alarms_to_clear = list() + + + var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0) + var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0) /mob/living/silicon/proc/cancelAlarm() return @@ -14,6 +20,68 @@ /mob/living/silicon/proc/show_laws() return +/mob/living/silicon/proc/queueAlarm(var/message, var/type, var/incoming = 1) + var/in_cooldown = (alarms_to_show.len > 0 || alarms_to_clear.len > 0) + if(incoming) + alarms_to_show += message + alarm_types_show[type] += 1 + else + alarms_to_clear += message + alarm_types_clear[type] += 1 + + if(!in_cooldown) + spawn(10 * 10) // 10 seconds + + if(alarms_to_show.len < 5) + for(var/msg in alarms_to_show) + src << msg + else if(alarms_to_show.len) + + var/msg = "--- " + + if(alarm_types_show["Motion"]) + msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - " + + if(alarm_types_show["Fire"]) + msg += "FIRE: [alarm_types_show["Fire"]] Fire alarms detected. - " + + if(alarm_types_show["Atmosphere"]) + msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - " + + if(alarm_types_show["Power"]) + msg += "POWER: [alarm_types_show["Power"]] alarms detected. - " + + msg += "\[Show Alerts\]" + src << msg + + if(alarms_to_clear.len < 3) + for(var/msg in alarms_to_clear) + src << msg + + else if(alarms_to_clear.len) + var/msg = "--- " + + if(alarm_types_clear["Motion"]) + msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - " + + if(alarm_types_clear["Fire"]) + msg += "FIRE: [alarm_types_clear["Fire"]] Fire alarms cleared. - " + + if(alarm_types_clear["Atmosphere"]) + msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - " + + if(alarm_types_clear["Power"]) + msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - " + + msg += "\[Show Alerts\]" + src << msg + + + alarms_to_show = list() + alarms_to_clear = list() + alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0) + alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0) + /mob/living/silicon/drop_item() return diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 22a0571c04..c7dee0e2c1 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -108,7 +108,7 @@ if ((killing == 2 && state == 3)) if(assailant.loc != kill_loc) for(var/mob/O in viewers(assailant, null)) - O.show_message(text("\red [] lost his tightened grip on []'s neck!", assailant, affecting), 1) + O.show_message(text("\red [] lost \his tightened grip on []'s neck!", assailant, affecting), 1) killing = 0 hud1.icon_state = "disarm/kill" return @@ -134,7 +134,7 @@ if (state >= 3) if (!( killing )) for(var/mob/O in viewers(assailant, null)) - O.show_message(text("\red [] has temporarily tightened his grip on []!", assailant, affecting), 1) + O.show_message(text("\red [] has temporarily tightened \his grip on []!", assailant, affecting), 1) //Foreach goto(97) assailant.next_move = world.time + 10 //affecting.stunned = max(2, affecting.stunned) @@ -198,7 +198,7 @@ return for(var/mob/O in viewers(assailant, null)) - O.show_message(text("\red [] has reinforced his grip on [] (now neck)!", assailant, affecting), 1) + O.show_message(text("\red [] has reinforced \his grip on [] (now neck)!", assailant, affecting), 1) state = 3 icon_state = "grabbed+1" @@ -212,7 +212,7 @@ else if (state >= 3 && !killing) for(var/mob/O in viewers(assailant, null)) - O.show_message(text("\red [] starts to tighten his grip on []'s neck!", assailant, affecting), 1) + O.show_message(text("\red [] starts to tighten \his grip on []'s neck!", assailant, affecting), 1) hud1.icon_state = "disarm/kill1" killing = 1 if(do_after(assailant, 50)) @@ -227,7 +227,7 @@ killing = 2 kill_loc = assailant.loc for(var/mob/O in viewers(assailant, null)) - O.show_message(text("\red [] has tightened his grip on []'s neck!", assailant, affecting), 1) + O.show_message(text("\red [] has tightened \his grip on []'s neck!", assailant, affecting), 1) affecting.attack_log += text("\[[time_stamp()]\] Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])") assailant.attack_log += text("\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])") log_attack("[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])") @@ -236,7 +236,7 @@ affecting.losebreath += 1 else for(var/mob/O in viewers(assailant, null)) - O.show_message(text("\red [] was unable to tighten his grip on []'s neck!", assailant, affecting), 1) + O.show_message(text("\red [] was unable to tighten \his grip on []'s neck!", assailant, affecting), 1) killing = 0 hud1.icon_state = "disarm/kill" return diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 5e12670cc2..7225b022cf 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -80,10 +80,9 @@ on_hit(var/atom/target, var/blocked = 0) var/mob/living/M = target if(ishuman(target) && M.dna && M.dna.mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays. - var/mob/living/L = target if(prob(15)) - L.apply_effect((rand(30,80)),IRRADIATE) - L.Weaken(5) + M.apply_effect((rand(30,80)),IRRADIATE) + M.Weaken(5) for (var/mob/V in viewers(src)) V.show_message("\red [M] writhes in pain as \his vacuoles boil.", 3, "\red You hear the crunching of leaves.", 2) if(prob(35)) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index dab5c460ec..a9a052506c 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1095,8 +1095,8 @@ datum name = "The Doctor's Delight" id = "doctordelight" result = "doctorsdelight" - required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1) - result_amount = 4 + required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1, "tricordrazine" = 1) + result_amount = 5 irish_cream name = "Irish Cream" diff --git a/maps/tgstation.2.0.9.dmm b/maps/tgstation.2.0.9.dmm index 79f650c74a..f36b7b9a9f 100755 --- a/maps/tgstation.2.0.9.dmm +++ b/maps/tgstation.2.0.9.dmm @@ -6359,7 +6359,7 @@ "cso" = (/obj/machinery/mech_bay_recharge_port,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad) "csp" = (/obj/mecha/combat/marauder/mauler,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership) "csq" = (/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership) -"csr" = (/turf/space,/area/start) +"csr" = (/turf/unsimulated/wall{icon = 'icons/misc/fullscreen.dmi'; icon_state = "title"},/area/start) "css" = (/obj/structure/closet/acloset,/turf/unsimulated/floor{icon_state = "floor5"},/area/alien) "cst" = (/turf/unsimulated/wall{icon_state = "plasma2"},/area/alien) "csu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad)