From 525953616f20a3e148e149fce1a19eb2b3121034 Mon Sep 17 00:00:00 2001 From: Crazylemon Date: Thu, 8 Oct 2015 23:24:04 -0700 Subject: [PATCH 01/26] Fixes pet emotes I think I might want to move attack_animal up to mob/living, and add special cases for the few mobs that need it. Any reason not to? Also, DNM until I get the chance to test this. --- code/modules/mob/living/carbon/alien/humanoid/humanoid.dm | 2 +- code/modules/mob/living/carbon/alien/larva/larva.dm | 2 +- code/modules/mob/living/carbon/human/emote.dm | 6 +----- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/mob/living/carbon/metroid/metroid.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 4 ++-- code/modules/mob/living/silicon/pai/pai.dm | 4 ++-- code/modules/mob/living/silicon/robot/robot.dm | 4 ++-- code/modules/mob/living/simple_animal/constructs.dm | 4 ++-- code/modules/mob/say.dm | 6 ++++-- 10 files changed, 17 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 0fd832ebc0c..29f1a74156d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -171,7 +171,7 @@ /mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index f9a2b945410..1fb2090742d 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -107,7 +107,7 @@ /mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 414335a243e..c1ab1fd8fd7 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -42,10 +42,6 @@ return // Suppress emote, you're still cooling off. switch(act) - if("me") //OKAY SO RANT TIME, THIS FUCKING HAS TO BE HERE OR A SHITLOAD OF THINGS BREAK - return custom_emote(m_type, message) //DO YOU KNOW WHY SHIT BREAKS? BECAUSE SO MUCH OLDCODE CALLS mob.emote("me",1,"whatever_the_fuck_it_wants_to_emote") - //WHO THE FUCK THOUGHT THAT WAS A GOOD FUCKING IDEA!?!? - if("ping") var/M = null if(param) @@ -814,4 +810,4 @@ set desc = "Sets an extended description of your character's features." set category = "IC" - flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) + flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 465e4a8d6f1..80c03386179 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -395,7 +395,7 @@ /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 3806584a0d6..ebbac10148d 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -252,7 +252,7 @@ /mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 0160049cbc6..2af38e93dfc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -596,7 +596,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -999,4 +999,4 @@ var/list/ai_verbs_default = list( aiRadio.disabledAi = 1 //No talking on the built-in radio for you either! loc = card//Throw AI into the card. src << "You have been downloaded to a mobile storage device. Remote device connection severed." - user << "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." + user << "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 8c79ef206a9..19998bd9103 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -207,7 +207,7 @@ /mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -582,4 +582,4 @@ card.loc = newloc else //something went very wrong. CRASH("pAI without card") - loc = card + loc = card \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index f7372a79f5f..7d128aa6cd8 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -909,7 +909,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.emote("me", 1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -1395,4 +1395,4 @@ var/list/robot_verbs_default = list( connected_ai = AI connected_ai.connected_robots |= src notify_ai(1) - sync() + sync() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 3b6e7320717..bd0024da319 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -67,7 +67,7 @@ M.emote("mends some of \the [src]'s wounds.") else if(M.melee_damage_upper <= 0) - M.emote("[M.friendly] \the [src]") + M.emote("me", 1, "[M.friendly] \the [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -332,4 +332,4 @@ if (cultist == usr) //just to be sure. return cultist.loc = usr.loc - usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/ + usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/ \ No newline at end of file diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index cc4aafb64e8..a80c5d47910 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -99,7 +99,9 @@ /mob/proc/emote(var/act, var/type, var/message) if(act == "me") - return custom_emote(type, message) + message = "\The [src] [message]" // Forgetting something? This should make sure the mob's name actually shows up. + custom_emote(type, message) + return 1 // Silly rabbit, custom_emote doesn't return anything /mob/proc/get_ear() // returns an atom representing a location on the map from which this @@ -143,4 +145,4 @@ if (can_speak(L)) return L - return null + return null \ No newline at end of file From 3c72286f2f577806e6c36dfd566f594dcb7e73a4 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 9 Oct 2015 11:36:03 -0700 Subject: [PATCH 02/26] Custom_emote now used in place of emote("me") Also fixes some emotes which didn't actually exist for their respective characters. Left untouched: Jungle mobs, whatever those are supposed to be. --- code/game/mecha/mecha.dm | 2 +- code/game/vehicles/spacepods/spacepod.dm | 2 +- .../mob/living/carbon/alien/humanoid/humanoid.dm | 2 +- .../modules/mob/living/carbon/alien/larva/larva.dm | 2 +- code/modules/mob/living/carbon/human/emote.dm | 6 +++++- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 4 ++-- .../mob/living/carbon/human/human_organs.dm | 4 ++-- code/modules/mob/living/carbon/human/life.dm | 6 +++--- code/modules/mob/living/carbon/metroid/metroid.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 4 ++-- code/modules/mob/living/silicon/pai/pai.dm | 6 +++--- code/modules/mob/living/silicon/robot/robot.dm | 4 ++-- .../modules/mob/living/simple_animal/constructs.dm | 6 +++--- .../mob/living/simple_animal/friendly/cat.dm | 2 +- .../mob/living/simple_animal/friendly/corgi.dm | 12 ++++++------ .../mob/living/simple_animal/friendly/pug.dm | 2 +- .../mob/living/simple_animal/hostile/bat.dm | 4 ++-- .../mob/living/simple_animal/hostile/bear.dm | 8 ++++---- .../mob/living/simple_animal/hostile/carp.dm | 2 +- .../mob/living/simple_animal/hostile/faithless.dm | 2 +- .../mob/living/simple_animal/hostile/mimic.dm | 2 +- .../simple_animal/hostile/retaliate/undead.dm | 2 +- .../mob/living/simple_animal/hostile/tree.dm | 2 +- code/modules/mob/living/simple_animal/parrot.dm | 8 ++++---- .../mob/living/simple_animal/simple_animal.dm | 14 +++++++------- code/modules/mob/say.dm | 6 ++---- code/modules/organs/organ_internal.dm | 4 ++-- code/modules/reagents/newchem/other.dm | 2 +- code/modules/virus2/effect.dm | 6 +++--- 30 files changed, 66 insertions(+), 64 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index cc5481e9be4..d3e753329fe 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -530,7 +530,7 @@ /obj/mecha/attack_animal(mob/living/simple_animal/user as mob) src.log_message("Attack by simple animal. Attacker - [user].",1) if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") + user.custom_emote(1, "[user.friendly] [src]") else user.do_attack_animation(src) if(!prob(src.deflect_chance)) diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index fbb4a981811..3703cdc2af6 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -108,7 +108,7 @@ /obj/spacepod/attack_animal(mob/living/simple_animal/user as mob) if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") + user.custom_emote(1, "[user.friendly] [src]") else var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) deal_damage(damage) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 29f1a74156d..dff7ffb59af 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -171,7 +171,7 @@ /mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 1fb2090742d..78c3640c4db 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -107,7 +107,7 @@ /mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index c1ab1fd8fd7..414335a243e 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -42,6 +42,10 @@ return // Suppress emote, you're still cooling off. switch(act) + if("me") //OKAY SO RANT TIME, THIS FUCKING HAS TO BE HERE OR A SHITLOAD OF THINGS BREAK + return custom_emote(m_type, message) //DO YOU KNOW WHY SHIT BREAKS? BECAUSE SO MUCH OLDCODE CALLS mob.emote("me",1,"whatever_the_fuck_it_wants_to_emote") + //WHO THE FUCK THOUGHT THAT WAS A GOOD FUCKING IDEA!?!? + if("ping") var/M = null if(param) @@ -810,4 +814,4 @@ set desc = "Sets an extended description of your character's features." set category = "IC" - flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) \ No newline at end of file + flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 80c03386179..22d08480fd8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -395,7 +395,7 @@ /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a7056b0abc8..6f0f4f22626 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -75,10 +75,10 @@ emp_act unEquip(c_hand) if (affected.status & ORGAN_ROBOT) - emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!") + custom_emote(1, "drops what they were holding, their [affected.name] malfunctioning!") else var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") - emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!") + custom_emote(1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!") if(used_weapon) var/obj/item/W = used_weapon diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 7654b0d2e3b..63ffbf93de8 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -117,7 +117,7 @@ unEquip(r_hand) var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") - emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!") + custom_emote(1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!") else if(E.is_malfunctioning()) @@ -130,7 +130,7 @@ continue unEquip(r_hand) - emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!") + custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!") var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8967e1519d6..f2cc9aaf642 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1513,7 +1513,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!") if(shock_stage >= 30) - if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") + if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.") eye_blurry = max(2, eye_blurry) stuttering = max(stuttering, 5) @@ -1521,7 +1521,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") if(shock_stage >=60) - if(shock_stage == 60) emote("me",1,"'s body becomes limp.") + if(shock_stage == 60) custom_emote(1,"'s body becomes limp.") if (prob(2)) src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") Weaken(20) @@ -1537,7 +1537,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc Paralyse(5) if(shock_stage == 150) - emote("me",1,"can no longer stand, collapsing!") + custom_emote(1,"can no longer stand, collapsing!") Weaken(20) if(shock_stage >= 150) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index ebbac10148d..eb6c98be037 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -252,7 +252,7 @@ /mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 2af38e93dfc..8511c8b1736 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -596,7 +596,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -999,4 +999,4 @@ var/list/ai_verbs_default = list( aiRadio.disabledAi = 1 //No talking on the built-in radio for you either! loc = card//Throw AI into the card. src << "You have been downloaded to a mobile storage device. Remote device connection severed." - user << "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." \ No newline at end of file + user << "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 19998bd9103..c52db6883b0 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -207,7 +207,7 @@ /mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -445,7 +445,7 @@ "You apply some [W] at [src.name]'s damaged areas.") else user << "All [src.name]'s systems are nominal." - + return else if(W.force) visible_message("[user.name] attacks [src] with [W]!") @@ -582,4 +582,4 @@ card.loc = newloc else //something went very wrong. CRASH("pAI without card") - loc = card \ No newline at end of file + loc = card diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 7d128aa6cd8..9f8a44d9965 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -909,7 +909,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -1395,4 +1395,4 @@ var/list/robot_verbs_default = list( connected_ai = AI connected_ai.connected_robots |= src notify_ai(1) - sync() \ No newline at end of file + sync() diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index bd0024da319..875d6cfcf95 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -64,10 +64,10 @@ /mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob) if(istype(M, /mob/living/simple_animal/construct/builder)) health += 5 - M.emote("mends some of \the [src]'s wounds.") + M.custom_emote(1,"mends some of \the [src]'s wounds.") else if(M.melee_damage_upper <= 0) - M.emote("me", 1, "[M.friendly] \the [src]") + M.custom_emote(1, "[M.friendly] \the [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -332,4 +332,4 @@ if (cultist == usr) //just to be sure. return cultist.loc = usr.loc - usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/ \ No newline at end of file + usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/ diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index b13714ae552..44735915da3 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -39,7 +39,7 @@ if(!stat && !resting && !buckled) for(var/mob/living/simple_animal/mouse/M in view(1,src)) if(!M.stat && Adjacent(M)) - emote("me", 1, "splats \the [M]!") + custom_emote(1, "splats \the [M]!") M.splat() movement_target = null stop_automated_movement = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 0b904097fa3..84f3ba0a931 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -97,7 +97,7 @@ user << "[src] is wearing too much armor! You can't reach \his skin." visible_message("[user] gently taps [src] with [O].") if(health>0 && prob(15)) - emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") + custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") return if (istype(O, /obj/item/weapon/razor)) @@ -461,10 +461,10 @@ movement_target.attack_animal(src) else if(ishuman(movement_target.loc) ) if(prob(20)) - emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") + custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") if(prob(1)) - emote("me", 1, pick("dances around.","chases its tail!")) + custom_emote(1, pick("dances around.","chases its tail!")) spawn(0) if (ckey == null) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) @@ -591,7 +591,7 @@ if(!stat && !resting && !buckled) if(prob(1)) if (ckey == null) - emote("me", 1, pick("dances around.","chases her tail.")) + custom_emote(1, pick("dances around.","chases her tail.")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i @@ -609,10 +609,10 @@ if(change > 0) if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454 flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20) - emote("me", 1, "yaps happily!") + custom_emote(1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) - emote("me", 1, "growls!") + custom_emote(1, "growls!") /mob/living/simple_animal/pet/corgi/Ian/borgi name = "E-N" diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm index 224d46dd8f7..a819602719a 100644 --- a/code/modules/mob/living/simple_animal/friendly/pug.dm +++ b/code/modules/mob/living/simple_animal/friendly/pug.dm @@ -24,7 +24,7 @@ if(!stat && !resting && !buckled) if(prob(1)) - emote("me", 1, pick("chases its tail.")) + custom_emote(1, pick("chases its tail.")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index a2b56219f56..0c2174d131e 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -50,13 +50,13 @@ /mob/living/simple_animal/hostile/scarybat/FindTarget() . = ..() if(.) - emote("flutters towards [.]") + custom_emote(1, "flutters towards [.]") /mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available if(istype(A) && A == owner) return 0 return ..() - + /mob/living/simple_animal/hostile/scarybat/CanAttack(var/atom/the_target)//This is here as a potential override to pick a specific target if available if(istype(the_target) && the_target == owner) return 0 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 514d2d313bd..05b8740e671 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -86,7 +86,7 @@ if(stance_step in list(1,4,7)) //every 3 ticks var/action = pick( list( "growls at [target]", "stares angrily at [target]", "prepares to attack [target]", "closely watches [target]" ) ) if(action) - emote(action) + custom_emote(1, action) if(!found_mob) stance_step-- @@ -97,7 +97,7 @@ if(HOSTILE_STANCE_ATTACKING) if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest - emote( "is worn out and needs to rest" ) + custom_emote(1, "is worn out and needs to rest" ) stance = HOSTILE_STANCE_TIRED stance_step = 0 walk(src, 0) //This stops the bear's walking @@ -125,14 +125,14 @@ /mob/living/simple_animal/hostile/bear/FindTarget() . = ..() if(.) - emote("stares alertly at [.]") + custom_emote(1, "stares alertly at [.]") stance = HOSTILE_STANCE_ALERT /mob/living/simple_animal/hostile/bear/LoseTarget() ..(5) /mob/living/simple_animal/hostile/bear/AttackingTarget() - emote( pick( list("slashes at [target]", "bites [target]") ) ) + custom_emote(1, pick( list("slashes at [target]", "bites [target]") ) ) var/damage = rand(20,30) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 93b90107133..5c8c80d5bde 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -48,7 +48,7 @@ /mob/living/simple_animal/hostile/carp/FindTarget() . = ..() if(.) - emote("me", 1, "gnashes at [.]!") + custom_emote(1, "gnashes at [.]!") /mob/living/simple_animal/hostile/carp/AttackingTarget() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 06988408c83..bbcacd234fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -39,7 +39,7 @@ /mob/living/simple_animal/hostile/faithless/FindTarget() . = ..() if(.) - emote("me", 1, "wails at [.]!") + custom_emote(1, "wails at [.]!") /mob/living/simple_animal/hostile/faithless/AttackingTarget() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index dd42262bdcd..6246b286841 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/mimic/FindTarget() . = ..() if(.) - emote("growls at [.]") + custom_emote(1, "growls at [.]") /mob/living/simple_animal/hostile/mimic/Die() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 01178af83f2..93d510de9ff 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -59,7 +59,7 @@ /mob/living/simple_animal/hostile/retaliate/ghost/FindTarget() . = ..() if(.) - emote("wails at [.]") + custom_emote(1, "wails at [.]") /mob/living/simple_animal/hostile/retaliate/ghost/Life() if(target) diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 2d49cbf836d..a5138f08d08 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() if(.) - emote("growls at [.]") + custom_emote(1, "growls at [.]") /mob/living/simple_animal/hostile/tree/AttackingTarget() . =..() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index c3ab9221a20..84d92ee5985 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -343,7 +343,7 @@ //Search for item to steal parrot_interest = search_for_item() if(parrot_interest) - emote("looks in [parrot_interest]'s direction and takes flight") + custom_emote(1,"looks in [parrot_interest]'s direction and takes flight") parrot_state = PARROT_SWOOP | PARROT_STEAL icon_state = "parrot_fly" return @@ -365,7 +365,7 @@ if(AM) if(istype(AM, /obj/item) || isliving(AM)) //If stealable item parrot_interest = AM - emote("turns and flies towards [parrot_interest]") + custom_emote(1,"turns and flies towards [parrot_interest]") parrot_state = PARROT_SWOOP | PARROT_STEAL return else //Else it's a perch @@ -479,11 +479,11 @@ var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone))) H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1) - emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) + custom_emote(1, pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) else L.adjustBruteLoss(damage) - emote(pick("pecks at [L].", "claws [L].")) + custom_emote(1, pick("pecks at [L].", "claws [L].")) return //Otherwise, fly towards the mob! diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 8696a4b0f3c..c8c9c8c37c0 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -152,23 +152,23 @@ else randomValue -= speak.len if(emote_see && randomValue <= emote_see.len) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) else - emote(pick(emote_hear),2) + custom_emote(2, pick(emote_hear)) else say(pick(speak)) else if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len)) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len)) - emote(pick(emote_hear),2) + custom_emote(2, pick(emote_hear)) if((emote_hear && emote_hear.len) && (emote_see && emote_see.len)) var/length = emote_hear.len + emote_see.len var/pick = rand(1,length) if(pick <= emote_see.len) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) else - emote(pick(emote_hear),2) + custom_emote(2,pick(emote_hear)) //Atmos @@ -272,7 +272,7 @@ /mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index a80c5d47910..cc4aafb64e8 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -99,9 +99,7 @@ /mob/proc/emote(var/act, var/type, var/message) if(act == "me") - message = "\The [src] [message]" // Forgetting something? This should make sure the mob's name actually shows up. - custom_emote(type, message) - return 1 // Silly rabbit, custom_emote doesn't return anything + return custom_emote(type, message) /mob/proc/get_ear() // returns an atom representing a location on the map from which this @@ -145,4 +143,4 @@ if (can_speak(L)) return L - return null \ No newline at end of file + return null diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 5438fdd3ec3..323fe8519c1 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -33,10 +33,10 @@ if(is_bruised()) if(prob(2)) - spawn owner.emote("me", 1, "coughs up blood!") + spawn owner.custom_emote(1, "coughs up blood!") owner.drip(10) if(prob(4)) - spawn owner.emote("me", 1, "gasps for air!") + spawn owner.custom_emote(1, "gasps for air!") owner.losebreath += 5 /obj/item/organ/kidneys diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm index 6b63bb397f2..7e1e9899993 100644 --- a/code/modules/reagents/newchem/other.dm +++ b/code/modules/reagents/newchem/other.dm @@ -290,7 +290,7 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob) M << "Something isn't right!" M.adjustBruteLoss(1) if(2) - M.emote("me",1,"strains, but nothing happens.") + M.custom_emote(1,"strains, but nothing happens.") M.adjustBruteLoss(2) if(3) M.emote("scream") diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index e73fea39d27..7b1c38e4bef 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -552,7 +552,7 @@ stage = 3 activate(var/mob/living/carbon/mob,var/multiplier) if(prob(30)) - mob.emote("me",1,"is sweating profusely!") + mob.custom_emote(1,"is sweating profusely!") if(istype(mob.loc,/turf/simulated)) var/turf/simulated/T = mob.loc @@ -583,7 +583,7 @@ if(pick(0,1)) mob.say(pick("Uh HUH!", "Thank you, Thank you very much...", "I ain't nothin' but a hound dog!", "Swing low, sweet chariot!")) else - mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) + mob.custom_emote(1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob if(H.species.name == "Human" && !(H.f_style == "Pompadour")) @@ -945,7 +945,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) name = "Wheezing" stage = 1 activate(var/mob/living/carbon/mob,var/multiplier) - mob.emote("me",1,"wheezes.") + mob.custom_emote(1,"wheezes.") /datum/disease2/effect/optimistic_minor From d683671bc32a67fe5c4a51f55d740b5535c7d44f Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Thu, 8 Oct 2015 11:11:03 -0700 Subject: [PATCH 03/26] Pool controller refactor This commit does the following: - Adds a new helper to nanoUI JS, from rigsuits - Improves the pool controller code - Improves the pool controller nanoUI template No new features have actually been added, so. --- code/game/machinery/poolcontroller.dm | 92 ++++++++++++++------------- nano/js/nano_base_helpers.js | 4 ++ nano/templates/poolcontroller.tmpl | 26 +++++--- 3 files changed, 70 insertions(+), 52 deletions(-) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 6a865e923eb..f9898a3de00 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -8,30 +8,27 @@ var/temperature = "normal" //The temperature of the pool, starts off on normal, which has no effects. var/temperaturecolor = "" //used for nanoUI fancyness var/srange = 5 //The range of the search for pool turfs, change this for bigger or smaller pools. - var/linkedmist = list() //Used to keep track of created mist - var/misted = 0 //Used to check for mist. + var/list/linkedmist = list() //Used to keep track of created mist + /obj/machinery/poolcontroller/New() //This proc automatically happens on world start for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange - src.linkedturfs += W //Add found pool turfs to the central list. + linkedturfs += W //Add found pool turfs to the central list. ..() //Changed to call parent as per MarkvA's recommendation /obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer. if(!emagged) //If it is not already emagged, emag it. - user << "\red You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does. + user << "You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does. emagged = 1 //Set the emag var to true. /obj/machinery/poolcontroller/attackby(obj/item/P as obj, mob/user as mob, params) //Proc is called when a user hits the pool controller with something. - if(istype(P,/obj/item/device/multitool)) //If the mob hits the pool controller with a multitool, reset the emagged status if(emagged) //Check the emag status - user << "\red You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards. + user << "You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards. emagged = 0 //Set the emagged var to false. - return else - user << "\red Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged. + user << "Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged. - return //Return, nothing else needs to be done. else //If it's not a multitool, defer to /obj/machinery/attackby ..() @@ -51,18 +48,14 @@ continue if(isobserver(M)) continue + if(M.stat == DEAD) + continue //End sanity checks, go on switch(temperature) //Apply different effects based on what the temperature is set to. if("scalding") //Burn the mob. M.bodytemperature = min(500, M.bodytemperature + 35) //heat mob at 35k(elvin) per cycle M << "The water is searing hot!" - if("frigid") //Freeze the mob. - M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle - M << "The water is freezing!" - - if("normal") //Normal temp does nothing, because it's just room temperature water. - if("warm") //Gently warm the mob. M.bodytemperature = min(330, M.bodytemperature + 10) //Heats up mobs to just over normal, not enough to burn if(prob(50)) //inform the mob of warm water half the time @@ -73,22 +66,30 @@ if(prob(50)) //inform the mob of cold water half the time M << "The water is chilly." //Inform the mob it's chilly water. + if("frigid") //Freeze the mob. + M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle + M << "The water is freezing!" + + if(ishuman(M)) //Make sure they are human before typecasting. var/mob/living/carbon/human/drownee = M //Typecast them as human. - if(drownee.stat == DEAD) //Check stat, if they are dead, ignore them. - continue - if(drownee && drownee.lying && !drownee.internal && !(drownee.species.flags & NO_BREATHE) && !(drownee.species.name == "Skrell" || drownee.species.name =="Neara") && !(NO_BREATH in drownee.mutations)) - //Establish that there is a mob, the mob is lying down, has no internals, species does breathe, is not a skrell/neara, and does not have NO_BREATHE - if(drownee.stat != CONSCIOUS) //Mob is in critical. + if(drownee && drownee.lying) //Mob lying down + if(drownee.internal) + continue //Has internals, no drowning + if((drownee.species.flags & NO_BREATHE) || (NO_BREATHE in drownee.mutations)) + continue //doesn't breathe, no drowning + if(drownee.get_species() == "Skrell" || drownee.get_species() == "Neara") + continue //fish things don't drown + + if(drownee.stat) //Mob is in critical. drownee.adjustOxyLoss(9) //Kill em quickly. add_logs(drownee, src, "drowned") drownee.visible_message("\The [drownee] appears to be drowning!","You're quickly drowning!") //inform them that they are fucked. else - if(!drownee.internal) //double check they have no internals, just in case. - drownee.adjustOxyLoss(5) //5 oxyloss per cycle. - add_logs(drownee, src, "drowned") - if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. - drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* + drownee.adjustOxyLoss(5) //5 oxyloss per cycle. + add_logs(drownee, src, "drowned") + if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. + drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* for(var/obj/effect/decal/cleanable/decal in W) animate(decal, alpha = 10, time = 20) @@ -96,23 +97,23 @@ qdel(decal) /obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles + if(linkedmist.len) + return + for(var/turf/simulated/floor/beach/water/W in linkedturfs) var/M = new /obj/effect/mist(W) - if(misted) - return linkedmist += M - misted = 1 //var just to keep track of when the mist on proc has been called. - /obj/machinery/poolcontroller/proc/mistoff() //Delete all /obj/effect/mist from all linked pool tiles. for(var/obj/effect/mist/M in linkedmist) qdel(M) - misted = 0 //no mist left, turn off the tracking var + linkedmist.Cut() + /obj/machinery/poolcontroller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] - data["currentTemp"] = capitalize(src.temperature) + data["currentTemp"] = temperature data["emagged"] = emagged data["TempColor"] = temperaturecolor @@ -122,33 +123,36 @@ ui.set_initial_data(data) ui.open() + + /obj/machinery/poolcontroller/Topic(href, href_list) - if(..()) return 1 + if(..()) + return 1 switch(href_list["temp"]) if("Scalding") - if(!src.emagged) + if(!emagged) return 0 - src.temperature = "scalding" - src.temperaturecolor = "#FF0000" + temperature = "scalding" + temperaturecolor = "#FF0000" miston() if("Frigid") - if(!src.emagged) + if(!emagged) return 0 - src.temperature = "frigid" - src.temperaturecolor = "#00CCCC" + temperature = "frigid" + temperaturecolor = "#00CCCC" mistoff() if("Warm") - src.temperature = "warm" - src.temperaturecolor = "#990000" + temperature = "warm" + temperaturecolor = "#990000" mistoff() if("Cool") - src.temperature = "cool" - src.temperaturecolor = "#009999" + temperature = "cool" + temperaturecolor = "#009999" mistoff() if("Normal") - src.temperature = "normal" - src.temperaturecolor = "" + temperature = "normal" + temperaturecolor = "" mistoff() return 1 \ No newline at end of file diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index 40c6b6077e5..28a41518010 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -102,6 +102,10 @@ NanoBaseHelpers = function () parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); return parts.join("."); }, + // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript + capitalizeFirstLetter: function(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + }, // Display a bar. Used to show health, capacity, etc. displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { diff --git a/nano/templates/poolcontroller.tmpl b/nano/templates/poolcontroller.tmpl index 246542107a2..7f24546e4b2 100644 --- a/nano/templates/poolcontroller.tmpl +++ b/nano/templates/poolcontroller.tmpl @@ -7,39 +7,49 @@ Used In File(s): \code\game\machinery\poolcontroller.dm Current Temperature:
- {{:data.currentTemp}} + {{:helper.capitalizeFirstLetter(data.currentTemp)}}
+
+
+ Saftey Status: +
{{if data.emagged}} - WARNING: SAFE MODE OVERRIDE + WARNING: OVERRIDDEN {{else}} - Safeties Nominal + Nominal {{/if}}
+
Temperature Selection:
+ {{if data.emagged}}
- {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' })}} + {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' }, data.currentTemp == "scalding" ? 'selected' : null)}}
{{/if}} +
- {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' })}} + {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' }, data.currentTemp == "warm" ? 'selected' : null)}}
+
- {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' })}} + {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' }, data.currentTemp == "normal" ? 'selected' : null)}}
+
- {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' })}} + {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' }, data.currentTemp == "cool" ? 'selected' : null)}}
+ {{if data.emagged}}
- {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' })}} + {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' }, data.currentTemp == "frigid" ? 'selected' : null)}}
{{/if}}
\ No newline at end of file From b1e5c5886782fd6f3de64a976a8ef6174da1412b Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 11 Oct 2015 22:40:26 +0200 Subject: [PATCH 04/26] Fixes reagent scanner not showing time of death correctly --- code/game/objects/items/devices/scanners.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 74a612762e7..80f42a72f4a 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -124,6 +124,7 @@ REAGENT SCANNER origin_tech = "magnets=1;biotech=1" var/upgraded = 0 var/mode = 1; + var/timeofdeath = null /obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob) @@ -162,7 +163,7 @@ REAGENT SCANNER user.show_message("\t Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) - user.show_message("\blue Time of Death: [M.timeofdeath]") + user.show_message("\blue Time of Death: [worldtime2text(timeofdeath)]") if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) From b17b6a7225c08a4f1d5ab62a7230c74dc532a06c Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 11 Oct 2015 23:34:19 +0200 Subject: [PATCH 05/26] Fixes my derp --- code/game/objects/items/devices/scanners.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 80f42a72f4a..9ce33b7582f 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -163,7 +163,7 @@ REAGENT SCANNER user.show_message("\t Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) - user.show_message("\blue Time of Death: [worldtime2text(timeofdeath)]") + user.show_message("\blue Time of Death: [worldtime2text(M.timeofdeath)]") if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) From e2f91d4bd7b6e7b017d12ab234788532fba0996f Mon Sep 17 00:00:00 2001 From: Robertha89 Date: Sun, 11 Oct 2015 23:55:17 +0200 Subject: [PATCH 06/26] Fixes redundancy --- code/game/objects/items/devices/scanners.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 9ce33b7582f..e7337e1042d 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -124,7 +124,6 @@ REAGENT SCANNER origin_tech = "magnets=1;biotech=1" var/upgraded = 0 var/mode = 1; - var/timeofdeath = null /obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob) From b0b79080b629056131fcac4be49427470adb1bf3 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sun, 11 Oct 2015 15:34:03 -0700 Subject: [PATCH 07/26] Nukes an apostrophe that doesn't play nice --- code/modules/mob/living/carbon/human/life.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 34f6b9cb6f9..d4e27d39b25 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1515,7 +1515,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") if(shock_stage >=60) - if(shock_stage == 60) custom_emote(1,"'s body becomes limp.") + if(shock_stage == 60) custom_emote(1,"falls limp.") if (prob(2)) src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") Weaken(20) @@ -1882,4 +1882,4 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc // Need this in species. //#undef HUMAN_MAX_OXYLOSS -//#undef HUMAN_CRIT_MAX_OXYLOSS +//#undef HUMAN_CRIT_MAX_OXYLOSS \ No newline at end of file From 9795dc761b2084ecb53d575ad81a20a470b51b5f Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 11 Oct 2015 19:51:19 -0400 Subject: [PATCH 08/26] Removes Nations and Unused Game Modes --- _maps/map_files/cyberiad/cyberiad.dmm | 18 +- code/__DEFINES/hud.dm | 1 - code/__HELPERS/global_lists.dm | 5 - code/_globalvars/lists/mobs.dm | 1 - code/_globalvars/lists/objects.dm | 1 - code/datums/helper_datums/teleport.dm | 14 - code/datums/mind.dm | 1 - code/game/gamemodes/epidemic/epidemic.dm | 224 --------- code/game/gamemodes/meme/meme.dm | 181 -------- .../game/gamemodes/nations/flag_pinpointer.dm | 65 --- code/game/gamemodes/nations/flagprocs.dm | 142 ------ code/game/gamemodes/nations/nationdatums.dm | 30 -- code/game/gamemodes/nations/nations.dm | 439 ------------------ code/game/jobs/job_controller.dm | 33 +- code/game/objects/effects/landmarks.dm | 13 - code/game/objects/items/flag.dm | 26 +- .../objects/items/weapons/storage/bags.dm | 4 +- code/game/objects/structures/morgue.dm | 9 +- code/game/supplyshuttle.dm | 2 - code/modules/admin/player_panel.dm | 16 - code/modules/mob/dead/observer/observer.dm | 7 +- code/modules/mob/living/carbon/human/human.dm | 1 - code/modules/mob/living/carbon/human/life.dm | 29 -- code/modules/mob/living/silicon/ai/ai.dm | 1 - .../modules/mob/living/silicon/robot/robot.dm | 1 - config/example/config.txt | 1 - paradise.dme | 4 - 27 files changed, 37 insertions(+), 1232 deletions(-) delete mode 100644 code/game/gamemodes/epidemic/epidemic.dm delete mode 100644 code/game/gamemodes/meme/meme.dm delete mode 100644 code/game/gamemodes/nations/flag_pinpointer.dm delete mode 100644 code/game/gamemodes/nations/flagprocs.dm delete mode 100644 code/game/gamemodes/nations/nationdatums.dm delete mode 100644 code/game/gamemodes/nations/nations.dm diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 2b9fa0915a1..c376a496a4a 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -542,7 +542,7 @@ "akv" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) "akw" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/security/main) "akx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main) -"aky" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/nations{name = "Brigston"},/turf/simulated/floor,/area/security/main) +"aky" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) "akz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/main) "akA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch/gamma{locked = 1; req_access_txt = "1"; use_power = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/main) "akB" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk6"; icon_state = "catwalk6"},/area/solar/auxstarboard) @@ -3163,7 +3163,7 @@ "biQ" = (/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) "biR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/bridge) "biS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) -"biT" = (/obj/machinery/hologram/holopad,/obj/effect/landmark/nations{name = "People's Republic of Commandzakstan"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) +"biT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "biU" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) "biV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/item/device/radio/beacon,/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) "biW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) @@ -4725,7 +4725,7 @@ "bMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/research{name = "Research Division"}) "bMT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"}) "bMU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) -"bMV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/effect/landmark/nations{name = "Scientopia"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"bMV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bMW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bMX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bMY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) @@ -5744,7 +5744,6 @@ "cgx" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"cgA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/landmark/nations{name = "Medistan"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -6548,7 +6547,6 @@ "cvV" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "32"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cvW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cvX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) -"cvY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/landmark/nations{name = "Atmosia"},/turf/simulated/floor,/area/engine/break_room) "cvZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cwa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) "cwb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/atmos/control) @@ -8311,7 +8309,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGafxacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafyafyafAaeAafyafyafAaeAaaaagSaifaigaihagSaiiaijaikailaimainaioaipagvaiqairahhaisaitaiuahUaivaiwaixaiyaizaiAaiBaiCaiDaiEaiFaiGaiFaiHahAaieaieaieaieaieaieaieaieahAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaaaaaaaaaiIaaaaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafAafyaiJaeAafAafyaiKaeAaaaagSaiLaiMaiNagSaiOaiOaiOaiOaiPaiQaiRaiSagvaiTaiUaiVaiWaiXaiYahUaiZajaajbajcajdajeajfajgaiDaiEajhaiGajhajiahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafxaabajnaabafxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaeAajoajpajqajrajoajpajqajsajtajuajuajuajuajuajuajuajuajvajwajxajyajzajAajBajCajDajEajFajGahUajHajIajJajKajdajeajKajgajLaiEaiCaiCajMajNajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabaaaaabaaaaabaabaabaabaabaabaabaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxaabaabaaaajQaaaaabaabafxafxacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAajRajSajTafyajUajVajWajXajtajYajZakaakbakcakdakdajuakeakfakgakhakiajBakjakkaklakmaknajFakoakpakqakqajKakraksaktakuakvakwakxakyakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxaabaabaaaajQaaaaabaabafxafxacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAajRajSajTafyajUajVajWajXajtajYajZakaakbakcakdakdajuakeakfakgakhakiajBakjakkaklakmaknajFakoakpakqakqajKakraksaktakuakvakwakxakxakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaabaaaaabaaaaaaajQaaaaaaaabaaaaabaaaaaaacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleakqalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabaaaaaaaabaloaabaabaaaaaaaloaabaaaaabaabajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaabalpalpalpalpalpaaaalqaaaalpalpalpalpalpaabacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFalJalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabaaaajkajlajmaaaaaaajkajlajmaaaaaaajkajlajmaabaabaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaalSalTalTalTalTalUalValWalXalXalXalXalYaaaacGaaaaaaaaaalZamaamaamaambamcaaaaaaaaaaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtamuamvamwajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKaaaaaaaaaaaaaabaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8356,7 +8354,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDaaaaaaaaaaaaaaaaaaaaabcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEaaaaaaaaaaaaaaaaaaaaabcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbcSbcSbeLbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabaaaaaabfmaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDaaaaaaaaaaaabcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEaaaaaaaaaaaabcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbcSbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbeLbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbiebifbigbihbiibijaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSbiTbiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbgKbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbgKbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikbjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkLbkMbkNbkObkPaYibkQaMebcSbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbeLbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatblqbaAblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikblsbltblublvbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbmrbmsbmtaYiaYibjfbcSbmubcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatbmKbaAbmLbmMbmNbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikaInaInaKzbmPbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnCbnDbcSbnEbcSbnFbcSbnGbnHbnIbmwbnJaUTbnKbnLaUTaUTbnMbnNbnNbnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatblqbaAblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8375,7 +8373,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbGVbGWbGVbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbHtbHubHvbHwbHxbvjaaabEkbHybHzbHybHybHybHybHybHAbHybHBbvvbFXbucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbEXbIxbIxbIxbIxbIxbEXbFfbFjbFhbFjbFjbIybFfaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbIDbngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjaaabEkbHybIWbIXbIYbIZbJabJbbJcbJdbJebvvbFXbCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwbJFbGybJGbJHbvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbKgbKhbKibKjbKkbDzbDAbKlbDAbDzbKmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbKnbAebFqbAebAebAebAebAebyvbAfbICbKobngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbKwbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbKObvvbKPbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbbLbbLbbLcbLbbLdbLdbLebLfbLgbLhbLhbLibLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLAbLBbJVbLCbEXbLDbLDbLDbLEbEXbLFaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMaaaaaaaaaabHybMbbMcbMdbMdbMebMfbMgbHybMhbMibFXbMjbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbMVbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbEXbIxbIxbEXbNcbNdbNebNfbNgbNhbNibLDaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMaaaaaaaaaabHybMbbMcbMdbMdbMebMfbMgbHybMhbMibFXbMjbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbEXbIxbIxbEXbNcbNdbNebNfbNgbNhbNibLDaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbNjbNkbNjbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbNrbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMaaaaaaaaaabHybNNbNObNPbNQbMebMfbMgbHybNRbNSbNTbNUbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHbOIbOJbOKbOLbNabOMbONaaaaaaaaabEXbOObOPbOQbORbOSbOTbOUbEXaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybPibvvbPjbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMbONaaaaaaaaabEXbQebQfbEXbKjbEXbEXbKjbEXaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQgaabaaaaaaaaaaaabOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQNbubbQObvvbQPbQQbQRbvvbQSbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbRFbRGbRHbRIbRJbRKbNabRLbwoaaaaaaaaabEXbEXbEXbEXaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8388,7 +8386,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbF aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaabUEcaVcaWcaXbUEbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlbPlcbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcchcciccjcckcclccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwbTgccxbTgccycczaabaaabOVbOVbUIbUIbUIbOVaaabUTccAccBccCccDbZFccEccFbUVccGccHccIbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcdqcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKceLceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfdcfdcfdcfecffcfgcfhcficfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzcgAcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFcgHcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFcgHcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejchochpchqbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchuchvchwchxchychychzchAcglbGybGychBchCchDbGybGybGychEchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcfdcfdcfdcfdcfdcfdcgIbSqchOchPchQchRchSchTchUchVcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwcixciycizaacaacaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejbUTcfScejaaaaaaaaaaaaciEbaTciGciHciIciJciKciLciMciNciOciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcfdcfdcjlcjpcjpcjpcjpckNclSckUcjqcjqcjrcjscjtcbAcjucjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAjaaaaabaabcjKcjKcjKcjKcjKcjKcjLcjKbUTcelcjMaaacjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZckackbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8401,7 +8399,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccsdcsecsfcsgcsgcshcsicsjcskcslcsmcsncsocspcspcspcsqcsrcsscstcstcsucsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXcsRcsYcwraaaaaaaaacEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaactdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccsdctuctvctwctvctxctyctzctActBctCctBctDctEctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXctYctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqJculcwraaaaaaaaadbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaackPcurcyFcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqJcyGcwraaaaaaaaadbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAaaaaaaaaaaaaaaaaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBcvIcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvYcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcwncwocpMaaaaaaaaadbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAaaaaaaaaaaaaaaaaaackPcwtcwucwvcwwcwxcwycwzcwAcwBcxScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBcvIcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcwncwocpMaaaaaaaaadbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAaaaaaaaaaaaaaaaaaackPcwtcwucwvcwwcwxcwycwzcwAcwBcxScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxacGafxafxafxagiafxafxaabagiaqZaaaaabaabcwNcwNcwNcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMaaaaaaaaadbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAaaaaaaaaaaaaaaaaaackPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabaaacwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaaaaqZaaaaaaaaaaabaabcwNcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcwXcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcyrcxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAaaaaaaaaaaaadcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAaaaaaackPcxOcxOcxOcyZczaczbczcczdczecAiczgckPcAVcAYcAWckPaaaaaacwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaacGaaaczoczpczqaaaczoczpczqaaaczoczpczqaabczraabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaczscwWcwXcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcbkcyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAaaaaaaaaaaaadcidchdckdcmdcnbGyckObVicusbGybGybGycgmcoAaaaaaackPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPaaaaaacwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 3e3e219792b..293ba1f18ea 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -8,4 +8,3 @@ #define IMPTRACK_HUD 7 // tracking implant #define SPECIALROLE_HUD 8 // AntagHUD image #define STATUS_HUD_OOC 9 // STATUS_HUD without virus db check for someone being ill. -#define NATIONS_HUD 10 //Show nations icons during nations gamemode diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a81a99c540b..00faf1864f9 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -31,11 +31,6 @@ var/datum/job/J = new T joblist[J.title] = J - paths = subtypesof(/datum/nations) - for(var/T in paths) - var/datum/nations/N = new T - all_nations[N.name] = N - paths = subtypesof(/datum/superheroes) for(var/T in paths) var/datum/superheroes/S = new T diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 452911908bc..c13ae732cee 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -2,7 +2,6 @@ var/global/list/all_species[0] var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages -var/global/list/all_nations[0] var/global/list/all_superheroes[0] var/global/list/whitelisted_species = list() diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index a001c55082f..e43177c0965 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -8,7 +8,6 @@ var/global/list/side_effects = list() //list of all medical sideeffects types var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking. var/global/list/spacepods_list = list() //list of all space pods. Used by hostile mobs target tracking. var/global/list/joblist = list() //list of all jobstypes, minus borg and AI -var/global/list/flag_list = list() //list of flags during Nations gamemode var/global/list/airlocks = list() //list of all airlocks var/global/list/singularities = list() //list of all singularities var/global/list/janitorial_equipment = list() //list of janitorial equipment diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 048eaa55fd3..fc8e01984f9 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -167,18 +167,4 @@ if(istype(teleatom, /mob/living)) var/mob/living/MM = teleatom MM << "The bluespace interface on your bag of holding interferes with the teleport!" - return 1 - -/datum/teleport/instant/science/teleportChecks() - if(istype(teleatom, /obj/item/flag/nation)) // Don't let nation's flags get teleported either --Fox - teleatom.visible_message("The portal rejects [teleatom]!") - return 0 - - if(!isemptylist(teleatom.search_contents_for(/obj/item/flag/nation))) - if(istype(teleatom, /mob/living)) - var/mob/living/MM = teleatom - MM.visible_message("The portal rejects [MM]!","The flag that you're carrying seems to be unable to pass through the portal. Better drop it if you want to go through.") - else - teleatom.visible_message("The portal rejects [teleatom]!") - return 0 return 1 \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f781ace9a90..0efec301d83 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -55,7 +55,6 @@ var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder - var/datum/nations/nation //associated nation for CTF var/datum/vampire/vampire //vampire holder var/rev_cooldown = 0 diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm deleted file mode 100644 index e64100e2a12..00000000000 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ /dev/null @@ -1,224 +0,0 @@ -/datum/game_mode/epidemic - name = "epidemic" - config_tag = "epidemic" - required_players = 1 - required_players_secret = 15 - - var/const/waittime_l = 300 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 600 //upper bound on time before intercept arrives (in tenths of seconds) - var/checkwin_counter =0 - var/finished = 0 - - var/cruiser_arrival - - var/virus_name = "" - - var/stage = 0 - var/doctors = 0 - -/////////////////////////// -//Announces the game type// -/////////////////////////// -/datum/game_mode/epidemic/announce() - world << "The current game mode is - Epidemic!" - world << "A deadly epidemic is spreading on the station. Find a cure as fast as possible, and keep your distance to anyone who speaks in a hoarse voice!" - - -/////////////////////////////////////////////////////////////////////////////// -//Gets the round setup, cancelling if there's not enough players at the start// -/////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/epidemic/pre_setup() - doctors = 0 - for(var/mob/new_player/player in world) - if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor")) - doctors++ - break - - if(doctors < 1) - return 0 - - return 1 - -/datum/game_mode/epidemic/proc/cruiser_seconds() - return (cruiser_arrival - world.time) / 10 - -////////////////////// INTERCEPT //////////////////////// -/// OVERWRITE THE INTERCEPT WITH A QUARANTINE WARNING /// -///////////////////////////////////////////////////////// - -/datum/game_mode/epidemic/send_intercept() - var/intercepttext = "CONFIDENTIAL REPORT
" - virus_name = "X-[rand(1,99)]™" - intercepttext += "Warning: Pathogen [virus_name] has been detected on [station_name()].

" - intercepttext += "Code violet quarantine of [station_name()] put under immediate effect.
" - intercepttext += "Class [rand(2,5)] cruiser has been dispatched. ETA: [round(cruiser_seconds() / 60)] minutes.
" - intercepttext += "
Instructions
" - intercepttext += "* ELIMINATE THREAT WITH EXTREME PREJUDICE. [virus_name] IS HIGHLY CONTAGIOUS. INFECTED CREW MEMBERS MUST BE QUARANTINED IMMEDIATELY.
" - intercepttext += "* [station_name()] is under QUARANTINE. Any vessels outbound from [station_name()] will be tracked down and destroyed.
" - intercepttext += "* The existence of [virus_name] is highly confidential. To prevent a panic, only high-ranking staff members are authorized to know of its existence. Crew members that illegally obtained knowledge of [virus_name] are to be neutralized.
" - intercepttext += "* A cure is to be researched immediately, but Nanotrasen intellectual property must be respected. To prevent knowledge of [virus_name] from falling into unauthorized hands, all medical staff that work with the pathogen must be enhanced with a Nanotrasen loyality implant.
" - - - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") - comm.messagetext.Add(intercepttext) - - world << sound('sound/AI/commandreport.ogg') - - // add an extra law to the AI to make sure it cooperates with the heads - var/extra_law = "Crew authorized to know of pathogen [virus_name]'s existence are: Heads of command, any crew member with loyalty implant. Do not allow unauthorized personnel to gain knowledge of [virus_name]. Aid authorized personnel in quarantining and neutrlizing the outbreak. This law overrides all other laws." - for(var/mob/living/silicon/ai/M in world) - M.add_ion_law(extra_law) - M << "\red " + extra_law - -/datum/game_mode/epidemic/proc/announce_to_kill_crew() - var/intercepttext = "CONFIDENTIAL REPORT
" - intercepttext += "PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].
" - intercepttext += "CRUISER WILL ARRIVE IN [round(cruiser_seconds()/60)] MINUTES
" - - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") - comm.messagetext.Add(intercepttext) - world << sound('sound/AI/commandreport.ogg') - - -/datum/game_mode/epidemic/post_setup() - // make sure viral outbreak events don't happen on this mode - EventTypes.Remove(/datum/event/viralinfection) - - // scan the crew for possible infectees - var/list/crew = list() - for(var/mob/living/carbon/human/H in world) if(H.client) - // heads should not be infected - if(H.mind.assigned_role in command_positions) continue - crew += H - - if(crew.len < 2) - world << "\red There aren't enough players for this mode!" - world << "\red Rebooting world in 5 seconds." - - if(blackbox) - blackbox.save_all_data_to_sql() - sleep(50) - world.Reboot() - - var/datum/disease2/disease/lethal = new - lethal.makerandom(1) - lethal.infectionchance = 5 - - // the more doctors, the more will be infected - var/lethal_amount = doctors * 2 - - // keep track of initial infectees - var/list/infectees = list() - - for(var/i = 0, i < lethal_amount, i++) - var/mob/living/carbon/human/H = pick(crew) - if(lethal.uniqueID in H.virus2) - i-- - continue - H.virus2["[lethal.uniqueID]"] = lethal.getcopy() - infectees += H - - var/mob/living/carbon/human/patient_zero = pick(infectees) - var/datum/disease2/disease/V = patient_zero.virus2["[lethal.uniqueID]"] - V.stage = 3 - - cruiser_arrival = world.time + (10 * 90 * 60) - stage = 1 - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - - - ..() - - -/datum/game_mode/epidemic/process() - if(stage == 1 && cruiser_seconds() < 60 * 30) - announce_to_kill_crew() - stage = 2 - else if(stage == 2 && cruiser_seconds() <= 60 * 5) - command_announcement.Announce("Inbound cruiser detected on collision course. Scans indicate the ship to be armed and ready to fire. Estimated time of arrival: 5 minutes.", "[station_name()] Early Warning System") - stage = 3 - else if(stage == 3 && cruiser_seconds() <= 0) - crew_lose() - stage = 4 - - checkwin_counter++ - if(checkwin_counter >= 20) - if(!finished) - ticker.mode.check_win() - checkwin_counter = 0 - return 0 - -////////////////////////////////////// -//Checks if the revs have won or not// -////////////////////////////////////// -/datum/game_mode/epidemic/check_win() - var/alive = 0 - var/sick = 0 - for(var/mob/living/carbon/human/H in world) - if(H.key && H.stat != 2) alive++ - if(H.virus2.len && H.stat != 2) sick++ - - if(alive == 0) - finished = 2 - if(sick == 0) - finished = 1 - return - -/////////////////////////////// -//Checks if the round is over// -/////////////////////////////// -/datum/game_mode/epidemic/check_finished() - if(finished != 0) - return 1 - else - return 0 - -/////////////////////////////////////////// -///Handle crew failure(station explodes)/// -/////////////////////////////////////////// -/datum/game_mode/epidemic/proc/crew_lose() - ticker.mode:explosion_in_progress = 1 - for(var/mob/M in world) - if(M.client) - M << 'sound/machines/Alarm.ogg' - world << "\blueIncoming missile detected.. Impact in 10.." - for (var/i=9 to 1 step -1) - sleep(10) - world << "\blue[i].." - sleep(10) - enter_allowed = 0 - if(ticker) - ticker.station_explosion_cinematic(0,null) - if(ticker.mode) - ticker.mode:station_was_nuked = 1 - ticker.mode:explosion_in_progress = 0 - finished = 2 - return - - -////////////////////////////////////////////////////////////////////// -//Announces the end of the game with all relavent information stated// -////////////////////////////////////////////////////////////////////// -/datum/game_mode/epidemic/declare_completion() - if(finished == 1) - feedback_set_details("round_end_result","win - epidemic cured") - world << "\red The virus outbreak was contained! The crew wins!" - else if(finished == 2) - feedback_set_details("round_end_result","loss - rev heads killed") - world << "\red The crew succumbed to the epidemic!" - ..() - return 1 \ No newline at end of file diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm deleted file mode 100644 index 0f9bb44babe..00000000000 --- a/code/game/gamemodes/meme/meme.dm +++ /dev/null @@ -1,181 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 - -/datum/game_mode/var/list/memes = list() - -/datum/game_mode/meme - name = "Memetic Anomaly" - config_tag = "meme" - required_players = 3 - required_players_secret = 10 - restricted_jobs = list("AI", "Cyborg") - recommended_enemies = 2 // need at least a meme and a host - votable = 0 // temporarily disable this mode for voting - - - - var/var/list/datum/mind/first_hosts = list() - var/var/list/assigned_hosts = list() - - var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time - var/const/prob_right_murder_target_l = 25 // lower bound on probability of naming right assassination target - var/const/prob_right_murder_target_h = 50 // upper bound on probability of naimg the right assassination target - - var/const/prob_int_item = 50 // intercept names the theft target half the time - var/const/prob_right_item_l = 25 // lower bound on probability of naming right theft target - var/const/prob_right_item_h = 50 // upper bound on probability of naming the right theft target - - var/const/prob_int_sab_target = 50 // intercept names the sabotage target half the time - var/const/prob_right_sab_target_l = 25 // lower bound on probability of naming right sabotage target - var/const/prob_right_sab_target_h = 50 // upper bound on probability of naming right sabotage target - - var/const/prob_right_killer_l = 25 //lower bound on probability of naming the right operative - var/const/prob_right_killer_h = 50 //upper bound on probability of naming the right operative - var/const/prob_right_objective_l = 25 //lower bound on probability of determining the objective correctly - var/const/prob_right_objective_h = 50 //upper bound on probability of determining the objective correctly - - var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - -/datum/game_mode/meme/announce() - world << "The current game mode is - Meme!" - world << "An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary." - -/datum/game_mode/meme/can_start() - if(!..()) - return 0 - - // for every 10 players, get 1 meme, and for each meme, get a host - // also make sure that there's at least one meme and one host - recommended_enemies = max(src.num_players() / 20 * 2, 2) - - var/list/datum/mind/possible_memes = get_players_for_role(BE_MEME) - - if(possible_memes.len < 2) - log_admin("MODE FAILURE: MEME. NOT ENOUGH MEME CANDIDATES.") - return 0 // not enough candidates for meme - - // for each 2 possible memes, add one meme and one host - while(possible_memes.len >= 2) - var/datum/mind/meme = pick(possible_memes) - possible_memes.Remove(meme) - - var/datum/mind/first_host = pick(possible_memes) - possible_memes.Remove(first_host) - - modePlayer += meme - modePlayer += first_host - memes += meme - first_hosts += first_host - - // so that we can later know which host belongs to which meme - assigned_hosts[meme.key] = first_host - - meme.assigned_role = "MODE" //So they aren't chosen for other jobs. - meme.special_role = "Meme" - - return 1 - -/datum/game_mode/meme/pre_setup() - return 1 - - -/datum/game_mode/meme/post_setup() - // create a meme and enter it - for(var/datum/mind/meme in memes) - var/mob/living/parasite/meme/M = new - var/mob/original = meme.current - meme.transfer_to(M) - M.clearHUD() - - // get the host for this meme - var/datum/mind/first_host = assigned_hosts[meme.key] - // this is a redundant check, but I don't think the above works.. - // if picking hosts works with this method, remove the method above - if(!first_host) - first_host = pick(first_hosts) - first_hosts.Remove(first_host) - M.enter_host(first_host.current) - forge_meme_objectives(meme, first_host) - - del original - - log_admin("Created [memes.len] memes.") - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - ..() - return - - -/datum/game_mode/proc/forge_meme_objectives(var/datum/mind/meme, var/datum/mind/first_host) - // meme always needs to attune X hosts - var/datum/objective/meme_attune/attune_objective = new - attune_objective.owner = meme - attune_objective.gen_amount_goal(3,6) - meme.objectives += attune_objective - - // generate some random objectives, use standard traitor objectives - var/job = first_host.assigned_role - - for(var/datum/objective/o in SelectObjectives(job, meme)) - o.owner = meme - meme.objectives += o - - greet_meme(meme) - - return - -/datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) - if (you_are) - meme.current << "\red You are a meme!" - - var/obj_count = 1 - for(var/datum/objective/objective in meme.objectives) - meme.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - return - -/datum/game_mode/meme/check_finished() - var/memes_alive = 0 - for(var/datum/mind/meme in memes) - if(!istype(meme.current,/mob/living)) - continue - if(meme.current.stat==2) - continue - memes_alive++ - - if (memes_alive) - return ..() - else - return 1 - -/datum/game_mode/proc/auto_declare_completion_meme() - for(var/datum/mind/meme in memes) - var/memewin = 1 - var/attuned = 0 - if((meme.current) && istype(meme.current,/mob/living/parasite/meme)) - world << "The meme was [meme.current.key]." - world << "The last host was [meme.current:host.key]." - world << "Hosts attuned: [attuned]" - - var/count = 1 - for(var/datum/objective/objective in meme.objectives) - if(objective.check_completion()) - world << "Objective #[count]: [objective.explanation_text] \green Success" - feedback_add_details("meme_objective","[objective.type]|SUCCESS") - else - world << "Objective #[count]: [objective.explanation_text] \red Failed" - feedback_add_details("meme_objective","[objective.type]|FAIL") - memewin = 0 - count++ - - else - memewin = 0 - - if(memewin) - world << "The meme was successful!" - feedback_add_details("meme_success","SUCCESS") - else - world << "The meme has failed!" - feedback_add_details("meme_success","FAIL") - return 1 diff --git a/code/game/gamemodes/nations/flag_pinpointer.dm b/code/game/gamemodes/nations/flag_pinpointer.dm deleted file mode 100644 index 776932bbb7b..00000000000 --- a/code/game/gamemodes/nations/flag_pinpointer.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/weapon/pinpointer/advpinpointer/flag - name = "\improper Flag Pinpointer" - desc = "Tracks the position of every nation's flag." - -/obj/item/weapon/pinpointer/advpinpointer/flag/attack_self() - switch(mode) - if (0) - mode = 1 - active = 1 - target = locate(/obj/item/flag/nation/atmos) - point_at(target) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (1) - mode = 2 - target = locate(/obj/item/flag/nation/sec) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (2) - mode = 3 - target = locate(/obj/item/flag/nation/cargo) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (3) - mode = 4 - target = locate(/obj/item/flag/nation/command) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (4) - mode = 5 - target = locate(/obj/item/flag/nation/med) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (5) - mode = 6 - target = locate(/obj/item/flag/nation/rnd) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - else - mode = 0 - active = 0 - icon_state = "pinoff" - usr << "\blue You switch \the [src] off." - -/obj/item/weapon/pinpointer/advpinpointer/flag/examine(mob/user) - switch(mode) - if (1) - user << "Is is calibrated for the [target.name]" - if (2) - user << "Is is calibrated for the [target.name]" - if (3) - user << "Is is calibrated for the [target.name]" - if (4) - user << "Is is calibrated for the [target.name]" - if (5) - user << "Is is calibrated for the [target.name]" - else - user << "It is switched off." - -/datum/supply_packs/key_pinpointer_nations - name = "Nations Flag Pinpointer crate" - contains = list(/obj/item/weapon/pinpointer/advpinpointer/flag) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Nations Flag Pinpointer crate" - access = access_heads - group = "Operations" - - New() - if (istype(ticker.mode,/datum/game_mode/nations)) - ..() diff --git a/code/game/gamemodes/nations/flagprocs.dm b/code/game/gamemodes/nations/flagprocs.dm deleted file mode 100644 index aa516de1f3d..00000000000 --- a/code/game/gamemodes/nations/flagprocs.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/flag/nation - density = 1 - anchored = 1 - var/turf/startloc = null - var/captured = 0 - var/list/vassals = list() - var/datum/nations/liege = null - var/datum/nations/nation = null - -/obj/item/flag/nation/New() - ..() - flag_list += src - -/obj/item/flag/nation/fire_act() - return - -/obj/item/flag/nation/Ignite() - return - -/obj/item/flag/nation/light() - return - -/obj/item/flag/nation/attackby(var/obj/item/weapon/W, var/mob/user, params) - return - - -/obj/item/flag/nation/ex_act() - return - -/obj/item/flag/nation/blob_act() - return - - -/obj/item/flag/nation/attack_hand(mob/user as mob) - if(user.mind) - if(user.mind.nation) - var/obj/item/flag/nation/F = locate(user.mind.nation.flagpath) - if(istype(user.mind.nation,nation)) //Same team as flag - if(liege && liege == F.liege) - user << "You can't steal your liege's flags!" - return - else if(loc != startloc) - loc = startloc - user.visible_message("[user] sends [src] back to base!", "You return [src] to your base!") - return - else - user << "You can't move your flag from it's home location!" - return - else - if(captured && Adjacent(F.startloc)) - user << "This flag has already been captured by your team!" - return - else if(..()) - captured = 0 - anchored = 0 - var/obj/item/flag/nation/N = null - if(liege) - N = locate(liege.flagpath) - for(var/mob/living/carbon/human/H in player_list) - if(H.mind && H.mind.nation && liege && nation) - if(H.mind.nation.name == liege.name) //we have to check based on the name var since they will be different instances of the nation datum - H.mind.current << "You are no longer the liege of [nation]!" - if(H.mind.nation.name == nation.name) - H.mind.current << "You are no longer vassals of [liege]!" - if(N) - N.vassals -= nation - liege = null - else - user << "You are not part of a nation and therefore cannot pick up any flags!" - return - return - -/obj/item/flag/nation/dropped(mob/user as mob) - ..() - spawn(20) - anchored = 1 - var/obj/item/flag/nation/F = locate(user.mind.nation.flagpath) - if(F.loc != F.startloc) return - for(var/obj/item/flag/nation/S in orange(1,F.startloc)) - if(S == src) - captured = 1 - liege = F.nation - F.vassals += nation - //Announce capture/vassalage here. - for(var/mob/living/carbon/human/H in player_list) - if(H.mind && H.mind.nation && F.nation && nation) - if(H.mind.nation.name == F.nation.name) - H.mind.current << "You have just vassalized [nation]! They must now obey any members of your nation!" - continue - if(H.mind.nation.name == nation.name) - H.mind.current << "You are now vassals of [liege]! You must now obey the orders of any of their members!" - continue - //Check for Victory - for(var/obj/item/flag/nation/N in flag_list) - if(F.nation && N.nation) - if(F.nation.name == N.nation.name) - continue - if(N.liege && F.nation) - if(N.captured && N.liege.name == F.nation.name) - continue - else - return - ticker.mode.declare_completion(F.nation) - - - -//Nations/Department flags --Nations Gamemode Specific -/obj/item/flag/nation/cargo - name = "Cargonia flag" - desc = "The flag of the independent, sovereign nation of Cargonia." - icon_state = "cargoflag" - nation = new /datum/nations/cargonia - -/obj/item/flag/nation/med - name = "Medistan flag" - desc = "The flag of the independent, sovereign nation of Medistan." - icon_state = "medflag" - nation = new /datum/nations/medistan - -/obj/item/flag/nation/sec - name = "Brigston flag" - desc = "The flag of the independent, sovereign nation of Brigston." - icon_state = "secflag" - nation = new /datum/nations/brigston - -/obj/item/flag/nation/rnd - name = "Scientopia flag" - desc = "The flag of the independent, sovereign nation of Scientopia." - icon_state = "rndflag" - nation = new /datum/nations/scientopia - -/obj/item/flag/nation/atmos - name = "Atmosia flag" - desc = "The flag of the independent, sovereign nation of Atmosia." - icon_state = "atmosflag" - nation = new /datum/nations/atmosia - -/obj/item/flag/nation/command - name = "People's Republic of Commandzakstan flag" - desc = "The flag of the independent, sovereign nation of the People's Republic of Commandzakstan." - icon_state = "ntflag" - nation = new /datum/nations/command \ No newline at end of file diff --git a/code/game/gamemodes/nations/nationdatums.dm b/code/game/gamemodes/nations/nationdatums.dm deleted file mode 100644 index 27ccb2ed2cc..00000000000 --- a/code/game/gamemodes/nations/nationdatums.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/nations - var/name - var/flagpath - -/datum/nations/atmosia - name = "Atmosia" - flagpath = /obj/item/flag/nation/atmos - -/datum/nations/brigston - name = "Brigston" - flagpath = /obj/item/flag/nation/sec - -/datum/nations/cargonia - name = "Cargonia" - flagpath = /obj/item/flag/nation/cargo - -/datum/nations/command - name = "People's Republic of Commandzakstan" - flagpath = /obj/item/flag/nation/command - -/datum/nations/medistan - name = "Medistan" - flagpath = /obj/item/flag/nation/med - -/datum/nations/scientopia - name = "Scientopia" - flagpath = /obj/item/flag/nation/rnd - - - diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm deleted file mode 100644 index 9efc2e4f6f4..00000000000 --- a/code/game/gamemodes/nations/nations.dm +++ /dev/null @@ -1,439 +0,0 @@ -var/global/no_synthetic = 0 - -datum/game_mode/nations - name = "nations" - config_tag = "nations" - required_players_secret = 25 - var/const/waittime_l = 1200 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 3000 //upper bound on time before intercept arrives (in tenths of seconds) - var/kickoff = 0 - var/victory = 0 - var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") - -/datum/game_mode/nations/pre_pre_setup() - no_synthetic = 1 - -/datum/game_mode/nations/post_setup() - spawn (rand(waittime_l, waittime_h)) - remove_flags() - spawn(50) - kickoff=1 - send_intercept() - split_teams() - spawn_flags() - populate_vars() - for(var/mob/M in player_list) - if(!istype(M,/mob/new_player)) - M << sound('sound/effects/purge_siren.ogg') - return ..() - -/datum/game_mode/nations/send_intercept() - command_announcement.Announce("Due to recent and COMPLETELY UNFOUNDED allegations of massive fraud and insider trading \ - affecting trillions of investors, the Nanotrasen Corporation has decided to liquidate all \ - assets of the Centcom Division in order to pay the massive legal fees that will be incurred \ - during the following centuries long court process. Therefore, all current employment contracts \ - are IMMEDIATELY TERMINATED. Nanotrasen will be unable to send a rescue shuttle to carry you home,\ - however they remain willing for the time being to continue trading cargo. Have a pleasant \ - day.", "FINAL TRANSMISSION, CENTCOM COMMAND.") - - - -/datum/game_mode/nations/proc/remove_flags() - for(var/obj/item/flag/F in world) - qdel(F) - -/datum/game_mode/nations/proc/spawn_flags() - - for(var/obj/effect/landmark/nations/N in landmarks_list) - switch(N.name) - if("Atmosia") - new /obj/item/flag/nation/atmos(get_turf(N)) - if("Brigston") - new /obj/item/flag/nation/sec(get_turf(N)) - if("Cargonia") - new /obj/item/flag/nation/cargo(get_turf(N)) - if("People's Republic of Commandzakstan") - new /obj/item/flag/nation/command(get_turf(N)) - if("Medistan") - new /obj/item/flag/nation/med(get_turf(N)) - if("Scientopia") - new /obj/item/flag/nation/rnd(get_turf(N)) - -/datum/game_mode/nations/proc/split_teams() - - for(var/mob/living/carbon/human/H in player_list) - if(H.mind) - if(H.mind.assigned_role in engineering_positions) - H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in medical_positions) - H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in science_positions) - H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in security_positions) - H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in cargonians) - H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in support_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in command_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else - message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") - continue - -/datum/game_mode/nations/proc/populate_vars() - for(var/obj/effect/landmark/nations/N in landmarks_list) - switch(N.name) - if("Atmosia") - for(var/obj/item/flag/nation/atmos/A in flag_list) - A.startloc = get_turf(N) - continue - if("Brigston") - for(var/obj/item/flag/nation/sec/B in flag_list) - B.startloc = get_turf(N) - continue - if("Cargonia") - for(var/obj/item/flag/nation/cargo/C in flag_list) - C.startloc = get_turf(N) - continue - if("People's Republic of Commandzakstan") - for(var/obj/item/flag/nation/command/D in flag_list) - D.startloc = get_turf(N) - continue - if("Medistan") - for(var/obj/item/flag/nation/med/M in flag_list) - M.startloc = get_turf(N) - continue - if("Scientopia") - for(var/obj/item/flag/nation/rnd/S in flag_list) - S.startloc = get_turf(N) - continue - -/datum/game_mode/nations/check_finished() - if(victory) - return 1 - return 0 - -/datum/game_mode/nations/declare_completion(var/datum/nations/N) - world << "[N.name] has captured all of the station. All glory to [N.name]" - victory = 1 - - - -/mob/proc/nations_status() - set category = "OOC" - set name = "Nation Status" - set desc = "Information on your nation and your allies." - - if (!( ticker )) return - if (ticker.mode.name != "nations") return - if(!mind) return - if(!mind.nation) return - - var/obj/item/flag/nation/F = locate(mind.nation.flagpath) - - var/dat = "Nation Status

Nation Status

" - - dat += "You are part of the nation of [mind.nation.name].
" - dat += "You -cannot- defect to another nation. Doing so or helping
" - dat += "another nation you are not a vassal of is bannable.
" - - dat += "
" - if(F.liege) - dat += "You are currently the vassal of [F.liege.name] and must obey
" - dat += "the commands of ANY of their members.
" - else - dat += "You are not currently vassalized by anyone! Protect your flag!
" - dat += "
Liege
" - - dat += "
" - if(F.vassals.len) - for(var/datum/nations/V in F.vassals) - dat += "[V.name] is your vassal and must obey the commands of ANY of your members." - else - dat += "You do not currently have any vassals! Capture flags to vassalize!
" - dat += "
Vassals
" - dat += "
" - dat += "The following are considered OUTLAWED by the Geneva Space Convention and will result" - dat += "in severe consequences if used in warfare:
" - dat += "Scientopia - Large Scale Bombs - Nuclear Warfare" - dat += "Atmosia - Using atmos as a weapon - Chemical Warfare" - dat += "Medistan - Releasing harmful viruses - Biological Warfare" - dat += "
Geneva Space Convention
" - - dat += "" - usr << browse(dat, "window=nationstatus;size=400x500") - -/mob/proc/respawn_self() - set category = "OOC" - set name = "Respawn Character" - set desc = "Respawn yourself (15 minute cooldown)." - - if (!( ticker )) - usr << "\blue The round hasn't started!" - return - if(stat!=2) - usr << "\blue You must be dead to respawn." - return - if (ticker.mode.name != "nations") - usr << "\blue Respawn is disabled." - return - if(!mind) - return - if(!mind.nation) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(!mind.assigned_role) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(!mind.assigned_role in get_all_jobs()) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(mind.special_role) - src << "It appears you beame an antag and are longer part of a nation. Use Respawn as NPC instead." - return - else - var/deathtime = world.time - src.timeofdeath - var/deathtimeminutes = round(deathtime / 600) - var/pluralcheck = "minute" - if(deathtimeminutes == 0) - pluralcheck = "" - else if(deathtimeminutes == 1) - pluralcheck = " [deathtimeminutes] minute and" - else if(deathtimeminutes > 1) - pluralcheck = " [deathtimeminutes] minutes and" - var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) - usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds." - if (deathtime < 9000) - usr << "You must wait 15 minutes to respawn!" - return - else - - //Ok, it's not a xeno or a monkey. So, spawn a human. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. - - var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character. - if(mind) //mind isn't currently in use by someone/something - /*Try and locate a record for the person being respawned through data_core. - This isn't an exact science but it does the trick more often than not.*/ - var/id = md5("[real_name][mind.assigned_role]") - for(var/datum/data/record/t in data_core.locked) - if(t.fields["id"]==id) - record_found = t//We shall now reference the record. - break - - if(record_found)//If they have a record we can determine a few things. - new_character.real_name = record_found.fields["name"] - new_character.gender = record_found.fields["sex"] - new_character.age = record_found.fields["age"] - new_character.b_type = record_found.fields["b_type"] - else - new_character.gender = pick(MALE,FEMALE) - var/datum/preferences/A = new() - A.copy_to(new_character) - - if(!new_character.real_name) - if(new_character.gender == MALE) - new_character.real_name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - else - new_character.real_name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - new_character.name = new_character.real_name - - if(mind) - mind.transfer_to(new_character) //be careful when doing stuff like this! I've already checked the mind isn't in use - new_character.mind.special_verbs = list() - else - new_character.mind_initialize() - if(!new_character.mind.assigned_role) new_character.mind.assigned_role = "Civilian"//If they somehow got a null assigned role. - - //DNA - if(record_found)//Pull up their name from database records if they did have a mind. - new_character.dna = new()//Let's first give them a new DNA. - new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity. - - // I HATE BYOND. HATE. HATE. - N3X - var/list/newSE= record_found.fields["enzymes"] - var/list/newUI = record_found.fields["identity"] - new_character.dna.SE = newSE.Copy() //This is the default of enzymes so I think it's safe to go with. - new_character.dna.UpdateSE() - new_character.UpdateAppearance(newUI.Copy())//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. - else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. - new_character.dna.ready_dna(new_character) - - new_character.key = key - - job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. - - if(!record_found)//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. - data_core.manifest_inject(new_character) - - new_character << "You have been fully respawned. Get back in the fight!." - new_character.hud_updateflag |= 1 << NATIONS_HUD - return new_character - - - -/** - * LateSpawn hook. - * Called in newplayer.dm when a humanoid character joins the round after it started. - * Parameters: var/mob/living/carbon/human, var/rank - */ -/hook/latespawn/proc/give_latejoiners_nations(var/mob/living/carbon/human/H) - var/datum/game_mode/nations/mode = get_nations_mode() - if (!mode) return 1 - - if(!mode.kickoff) return 1 - - var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") - if(H.mind) - if(H.mind.assigned_role in engineering_positions) - H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in medical_positions) - H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in science_positions) - H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in security_positions) - H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in cargonians) - H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in support_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in command_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else - message_admins("[key_name_admin(H)] with [H.mind.assigned_role] could not find any nation to assign!") - return 1 - message_admins("[key_name_admin(H)] latejoined with no mind.") - return 1 - -/proc/get_nations_mode() - if(!ticker || !istype(ticker.mode, /datum/game_mode/nations)) - return null - - return ticker.mode \ No newline at end of file diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 2ff04e63f6a..0de351c4917 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -14,29 +14,16 @@ var/global/datum/controller/occupations/job_master proc/SetupOccupations(var/list/faction = list("Station")) - if(no_synthetic) - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) -list(/datum/job/ai,/datum/job/cyborg) - if(!all_jobs.len) - world << "\red \b Error setting up jobs, no job datums found" - return 0 - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) continue - if(!job.faction in faction) continue - occupations += job - else - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) - if(!all_jobs.len) - world << "\red \b Error setting up jobs, no job datums found" - return 0 - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) continue - if(!job.faction in faction) continue - occupations += job - + occupations = list() + var/list/all_jobs = subtypesof(/datum/job) + if(!all_jobs.len) + world << "\red \b Error setting up jobs, no job datums found" + return 0 + for(var/J in all_jobs) + var/datum/job/job = new J() + if(!job) continue + if(!job.faction in faction) continue + occupations += job return 1 diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 5cc9eefd1cb..8d6aa799fd8 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -102,19 +102,6 @@ ..() return QDEL_HINT_HARDDEL_NOW -/obj/effect/landmark/nations - name = "nations" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - anchored = 1.0 - -/obj/effect/landmark/nations/New() - ..() - tag = "nations*[name]" - invisibility = 101 - - return 1 - /obj/effect/landmark/start name = "start" icon = 'icons/mob/screen1.dmi' diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 6ff7e24a85e..db492efaf29 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -156,36 +156,36 @@ desc = "A flag proudly proclaiming the superior heritage of Unathi." icon_state = "unathiflag" -//Nation Flags (Able to spawn outside Nations gamemode) +//Department Flags /obj/item/flag/cargo - name = "Cargonia flag" - desc = "The flag of the independent, sovereign nation of Cargonia." + name = "cargo flag" + desc = "The flag of the cargo department." icon_state = "cargoflag" /obj/item/flag/med - name = "Medistan flag" - desc = "The flag of the independent, sovereign nation of Medistan." + name = "medical flag" + desc = "The flag of the medical department." icon_state = "medflag" /obj/item/flag/sec - name = "Brigston flag" - desc = "The flag of the independent, sovereign nation of Brigston." + name = "security flag" + desc = "The flag of the security department." icon_state = "secflag" /obj/item/flag/rnd - name = "Scientopia flag" - desc = "The flag of the independent, sovereign nation of Scientopia." + name = "science flag" + desc = "The flag of the science department." icon_state = "rndflag" /obj/item/flag/atmos - name = "Atmosia flag" - desc = "The flag of the independent, sovereign nation of Atmosia." + name = "atmospherics flag" + desc = "The flag of the atmospherics department." icon_state = "atmosflag" /obj/item/flag/command - name = "Command flag" - desc = "The flag of the independent, sovereign nation of Command." + name = "command flag" + desc = "The flag of the command department" icon_state = "ntflag" //Antags diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 034483583fd..bd4dd452887 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -37,7 +37,7 @@ max_w_class = 2 storage_slots = 30 can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation") + cant_hold = list("/obj/item/weapon/disk/nuclear") /obj/item/weapon/storage/bag/trash/suicide_act(mob/user) user.visible_message("[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!") @@ -88,7 +88,7 @@ storage_slots = 7 display_contents_with_number = 0 //or else this will lead to stupid behavior. can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation") + cant_hold = list("/obj/item/weapon/disk/nuclear") var/head = 0 /obj/item/weapon/storage/bag/plasticbag/mob_can_equip(M as mob, slot) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index ee2b57d19d7..d23de20410c 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -318,9 +318,6 @@ return else - if(!isemptylist(search_contents_for(/obj/item/flag/nation))) - usr << "You get the feeling that you shouldn't cremate one of the items in the cremator." - return for (var/mob/M in viewers(src)) M.show_message("\red You hear a roar as the crematorium activates.", 1) @@ -417,7 +414,7 @@ usr << "\red Access denied." return -/hook/Login/proc/update_morgue(var/client/client, var/mob/L) +/hook/Login/proc/update_morgue(var/client/client, var/mob/L) //Update morgues on login/logout if (L.stat == DEAD) var/obj/structure/morgue/Morgue = null @@ -440,8 +437,8 @@ Morgue = B.loc if (Morgue) Morgue.update() - -/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) + +/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) //Update morgues on login/logout if (L.stat == DEAD) var/obj/structure/morgue/Morgue = null diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 7960132730e..08887ddb02e 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -190,8 +190,6 @@ var/list/mechtoys = list( return 1 if(istype(A,/obj/item/weapon/disk/nuclear)) return 1 - if(istype(A,/obj/item/flag/nation)) - return 1 if(istype(A,/obj/machinery/nuclearbomb)) return 1 if(istype(A,/obj/item/device/radio/beacon)) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 92691e78d69..064878a7696 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -477,22 +477,6 @@ dat += "Head not found!" dat += "" - if(ticker.mode.name == "nations") - dat += "
" - for(var/obj/item/flag/nation/N in world) - dat += "" - dat += "
Flags(s)
[N.name], " - var/atom/flag_loc = N.loc - while(!istype(flag_loc, /turf)) - if(istype(flag_loc, /mob)) - var/mob/M = flag_loc - dat += "carried by [M.real_name] " - if(istype(flag_loc, /obj)) - var/obj/O = flag_loc - dat += "in \a [O.name] " - flag_loc = flag_loc.loc - dat += "in [flag_loc.loc] at ([flag_loc.x], [flag_loc.y], [flag_loc.z])
" - if(istype(ticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/mode = ticker.mode dat += "
" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c483f1ee750..ed5441c06f1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -119,7 +119,7 @@ Works together with spawning an observer, noted above. if(antagHUD) var/list/target_list = list() for(var/mob/living/target in oview(src, 14)) - if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation)) + if(target.mind && (target.mind.special_role || issilicon(target))) target_list += target if(target_list.len) assess_targets(target_list, src) @@ -146,7 +146,6 @@ Works together with spawning an observer, noted above. var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] - C.images += target.hud_list[NATIONS_HUD] // ??? THE SNOWFLAKE IS KILLING ME for(var/mob/living/silicon/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] @@ -172,10 +171,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Ghost" set desc = "Relinquish your life and enter the land of the dead." - if(ticker && ticker.mode.name == "nations") - usr << "\blue Ghosting is disabled." - return - var/mob/M = src if(stat == DEAD) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 465e4a8d6f1..1ed6dc27afb 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -36,7 +36,6 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ..() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8967e1519d6..78b2e6b3d6e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1234,9 +1234,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(see_override) //Override all see_invisible = see_override - if(ticker && ticker.mode.name == "nations") - process_nations() - if(healths) if (analgesic) healths.icon_state = "health_health_numb" @@ -1826,34 +1823,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc holder.icon_state = "hudshadowlingthrall" hud_list[SPECIALROLE_HUD] = holder - - if(hud_updateflag & 1 << NATIONS_HUD) - var/image/holder = hud_list[NATIONS_HUD] - holder.icon_state = "hudblank" - - if(mind && mind.nation) - switch(mind.nation.name) - if("Atmosia") - holder.icon_state = "hudatmosia" - if("Brigston") - holder.icon_state = "hudbrigston" - if("Cargonia") - holder.icon_state = "hudcargonia" - if("People's Republic of Commandzakstan") - holder.icon_state = "hudcommand" - if("Medistan") - holder.icon_state = "hudmedistan" - if("Scientopia") - holder.icon_state = "hudscientopia" - - hud_list[NATIONS_HUD] = holder hud_updateflag = 0 -/mob/living/carbon/human/proc/process_nations() - var/client/C = client - for(var/mob/living/carbon/human/H in view(src, 14)) - C.images += H.hud_list[NATIONS_HUD] - /mob/living/carbon/human/handle_silent() if(..()) speech_problem_flag = 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 0160049cbc6..2f824b06c60 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -183,7 +183,6 @@ var/list/ai_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ai_list += src ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 329f1b04a91..2e1d7c1c910 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -149,7 +149,6 @@ var/list/robot_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") scanner.Grant(src) /mob/living/silicon/robot/proc/init(var/alien=0) diff --git a/config/example/config.txt b/config/example/config.txt index 076a0e80766..6f5485ba6e6 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -86,7 +86,6 @@ PROBABILITY RAGINMAGES 0 PROBABILITY BORER 0 PROBABILITY XENOS 2 PROBABILITY MUTINY 1 -PROBABILITY NATIONS 0 PROBABILITY METEOR 0 ## Hash out to disable random events during the round. diff --git a/paradise.dme b/paradise.dme index 34ed30b4905..0bbc685e31b 100644 --- a/paradise.dme +++ b/paradise.dme @@ -351,10 +351,6 @@ #include "code\game\gamemodes\mutiny\directives\tau_ceti_needs_women_directive.dm" #include "code\game\gamemodes\mutiny\directives\terminations_directive.dm" #include "code\game\gamemodes\mutiny\directives\vox_heist.dm" -#include "code\game\gamemodes\nations\flag_pinpointer.dm" -#include "code\game\gamemodes\nations\flagprocs.dm" -#include "code\game\gamemodes\nations\nationdatums.dm" -#include "code\game\gamemodes\nations\nations.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" From 8890f2c2061ebb1fffdb0474e41483e1bf17edd9 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 11 Oct 2015 20:06:55 -0400 Subject: [PATCH 09/26] hud icon cleanup --- icons/mob/hud.dmi | Bin 11983 -> 5378 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 2a7d6de6cb6d303d35b1c1fe2a10847339905460..cc0fcbf3e09ed8c610bb90a23d8d6aae4d666937 100644 GIT binary patch literal 5378 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 literal 11983 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 From 81cfcd7af3222eb6d807fd7934030559faf81ff8 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 12 Oct 2015 02:37:52 -0400 Subject: [PATCH 10/26] More Dereferencing --- code/game/machinery/computer/station_alert.dm | 1 + .../objects/items/devices/sensor_device.dm | 9 ++- code/game/objects/objs.dm | 1 - code/modules/assembly/igniter.dm | 63 +++++++++++-------- code/modules/assembly/shock_kit.dm | 2 + code/modules/assembly/signaler.dm | 6 ++ code/modules/mob/login.dm | 4 +- code/modules/mob/mob.dm | 1 + 8 files changed, 56 insertions(+), 31 deletions(-) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 19a5d8e59ee..9f1238c56d2 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -25,6 +25,7 @@ /obj/machinery/computer/station_alert/Destroy() alarm_monitor.unregister(src) qdel(alarm_monitor) + alarm_monitor = null return ..() /obj/machinery/computer/station_alert/attack_ai(mob/user) diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index 730f81f0bdb..6172a603ce5 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -1,5 +1,5 @@ /obj/item/device/sensor_device - name = "handheld crew monitor" + name = "handheld crew monitor" desc = "A miniature machine that tracks suit sensors across the station." icon = 'icons/obj/device.dmi' icon_state = "scanner" @@ -7,10 +7,15 @@ slot_flags = SLOT_BELT origin_tech = "biotech=3;materials=3;magnets=3" var/datum/nano_module/crew_monitor/crew_monitor - + /obj/item/device/sensor_device/New() crew_monitor = new(src) +/obj/item/device/sensor_device/Destroy() + qdel(crew_monitor) + crew_monitor = null + return ..() + /obj/item/device/sensor_device/attack_self(mob/user as mob) ui_interact(user) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index dc560095e3d..bc65d324d82 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,6 +1,5 @@ /obj //var/datum/module/mod //not used - var/w_amt = 0 // waster amounts var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index ceb621e2e18..29c13f4a6bc 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -3,34 +3,43 @@ desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" materials = list(MAT_METAL=500, MAT_GLASS=50) - w_amt = 10 origin_tech = "magnets=1" + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread - describe() - return "The igniter is [secured?"secured.":"unsecured."]" +/obj/item/device/assembly/igniter/New() + ..() + sparks.set_up(2, 0, src) + sparks.attach(src) +/obj/item/device/assembly/igniter/Destroy() + qdel(sparks) + sparks = null + return ..() + + +/obj/item/device/assembly/igniter/describe() + return "The igniter is [secured?"secured.":"unsecured."]" + + +/obj/item/device/assembly/igniter/activate() + if(!..()) return 0//Cooldown check + var/turf/location = get_turf(loc) + if(location) location.hotspot_expose(1000,1000) + if (istype(src.loc,/obj/item/device/assembly_holder)) + if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc + if (tank) + tank.explode() + if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) + var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc + if(beakerbomb) + beakerbomb.heat_beaker() + + sparks.start() + return 1 + + +/obj/item/device/assembly/igniter/attack_self(mob/user as mob) activate() - if(!..()) return 0//Cooldown check - var/turf/location = get_turf(loc) - if(location) location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) - var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank) - tank.explode() - if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) - var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc - if(beakerbomb) - beakerbomb.heat_beaker() - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - return 1 - - - attack_self(mob/user as mob) - activate() - add_fingerprint(user) - return \ No newline at end of file + add_fingerprint(user) + return \ No newline at end of file diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 70a822cd8fb..d34dc9e4c76 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -11,7 +11,9 @@ /obj/item/assembly/shock_kit/Destroy() qdel(part1) + part1 = null qdel(part2) + part2 = null return ..() /obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 86b4037b1b9..fe33be50f48 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -27,6 +27,12 @@ spawn(1) // For things that set the frequency directly set_frequency(frequency) return + + Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + return ..() + describe() return "\The [src]'s power light is [receiving?"on":"off"]" diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 5f902a9eeb4..a1478496ff7 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -30,7 +30,9 @@ client.images = null //remove the images such as AIs being unable to see runes client.screen = list() //remove hud items just in case - if(hud_used) qdel(hud_used) //remove the hud objects + if(hud_used) + qdel(hud_used) //remove the hud objects + hud_used = null hud_used = new /datum/hud(src) next_move = 1 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 084ff2d3935..16cf68ef568 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -3,6 +3,7 @@ dead_mob_list -= src living_mob_list -= src qdel(hud_used) + hud_used = null if(mind && mind.current == src) spellremove(src) ghostize() From 46f9f68f31d9f619f5503de705a409be28d14e2e Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 12 Oct 2015 04:18:49 -0400 Subject: [PATCH 11/26] more de-referencing --- code/game/machinery/bots/bots.dm | 2 ++ code/game/machinery/bots/mulebot.dm | 3 +++ code/game/mecha/mech_bay.dm | 2 ++ code/game/objects/items/weapons/flamethrower.dm | 3 +++ code/game/objects/items/weapons/grenades/smokebomb.dm | 1 + code/modules/examine/descriptions/engineering.dm | 2 +- .../living/simple_animal/hostile/retaliate/drone.dm | 2 +- code/modules/power/singularity/singularity.dm | 1 + code/modules/power/supermatter/supermatter.dm | 11 ++++++----- 9 files changed, 20 insertions(+), 7 deletions(-) diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 7491a88c9a8..b4286afa676 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -109,7 +109,9 @@ /obj/machinery/bot/Destroy() aibots -= src qdel(Radio) + Radio = null qdel(botcard) + botcard = null return ..() /obj/machinery/bot/proc/add_to_beacons(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index d9e640258a6..8df634c0b50 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -82,6 +82,9 @@ var/global/mulebot_count = 0 unload(0) qdel(wires) wires = null + if(cell) + qdel(cell) + cell = null return ..() // attack by item diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 8588baa80df..f50bc1327dd 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -116,6 +116,8 @@ recharge_console.voltage = MC * 10 /obj/machinery/mech_bay_recharge_port/Destroy() + qdel(pr_recharger) + pr_recharger = null recharge_console.recharge_port = null recharge_floor.recharge_port = null return ..() diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 40ac8e93bdd..8524a6cbcf2 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -25,10 +25,13 @@ /obj/item/weapon/flamethrower/Destroy() if(weldtool) qdel(weldtool) + weldtool = null if(igniter) qdel(igniter) + igniter = null if(ptank) qdel(ptank) + ptank = null return ..() diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 2b7e7b7f854..d8ef1d9591b 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -15,6 +15,7 @@ Destroy() qdel(smoke) + smoke = null return ..() prime() diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm index c3f9b9b21fa..c8842c21bc7 100644 --- a/code/modules/examine/descriptions/engineering.dm +++ b/code/modules/examine/descriptions/engineering.dm @@ -1,4 +1,4 @@ -/obj/machinery/power/supermatter +/obj/machinery/power/supermatter_shard description_info = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \ After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \ Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.
\ diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index c3e4ed577f9..37f675f532e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -161,7 +161,7 @@ ..() qdel(src) -/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() +/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index c4170888d3d..338f3830766 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -45,6 +45,7 @@ /obj/singularity/Destroy() processing_objects.Remove(src) singularities -= src + target = null return ..() /obj/singularity/Move(atom/newloc, direct) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f9b97b7f26a..597a078b320 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -72,6 +72,7 @@ /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") qdel(radio) + radio = null return ..() /obj/machinery/power/supermatter_shard/proc/explode() @@ -233,7 +234,7 @@ /obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob) ui_interact(user) - + /obj/machinery/power/supermatter_shard/attack_ghost(mob/user as mob) ui_interact(user) @@ -242,16 +243,16 @@ "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) - + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) + Consume(user) - + /obj/machinery/power/supermatter_shard/proc/get_integrity() var/integrity = damage / explosion_point integrity = round(100 - integrity * 100) integrity = integrity < 0 ? 0 : integrity return integrity - + // This is purely informational UI that may be accessed by AIs or robots /obj/machinery/power/supermatter_shard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] From 79f27421794905a9e157123bcc311201f42be633 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 12 Oct 2015 08:42:56 -0700 Subject: [PATCH 12/26] PDA CSS, to make it look like the old PDAs. #nostalgia --- nano/templates/pda.tmpl | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 8b2920bb23b..9b3c01adfdd 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -3,6 +3,39 @@ Title: PDA UI Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm --> + + + {{if data.owner}}
From 9398a3a92ca1435d0cdf6396d7c5e74670b8c581 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 12 Oct 2015 13:38:22 -0700 Subject: [PATCH 13/26] Retro Toggle, more color tweaks --- code/game/objects/items/devices/PDA/PDA.dm | 9 +++- nano/templates/pda.tmpl | 57 ++++++++++++---------- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 842501da8a1..cfb3cd14c7c 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -62,6 +62,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/ownrank = null // this one is rank, never alt title var/obj/item/device/paicard/pai = null // A slot for a personal AI device + var/retro_mode = 0 /obj/item/device/pda/medical default_cartridge = /obj/item/weapon/cartridge/medical @@ -401,6 +402,8 @@ var/global/list/obj/item/device/pda/PDAs = list() data["idInserted"] = (id ? 1 : 0) data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------") + data["useRetro"] = retro_mode + data["cart_loaded"] = cartridge ? 1:0 if(cartridge) var/cartdata[0] @@ -574,6 +577,9 @@ var/global/list/obj/item/device/pda/PDAs = list() mode = 0 else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. cartridge.mode = mode + if("Retro") + retro_mode = !retro_mode + ui_interact(user) if ("Authenticate")//Checks for ID id_check(U, 1) if("UpdateInfo") @@ -1138,7 +1144,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(T.ptank) atmosanalyzer_scan(T.ptank.air_contents, user, T) else if (istype(A, /obj/machinery/portable_atmospherics/scrubber/huge)) var/obj/machinery/portable_atmospherics/scrubber/huge/T = A - atmosanalyzer_scan(T.air_contents, user, T) + atmosanalyzer_scan(T.air_contents, user, T) else if (istype(A, /obj/machinery/atmospherics/unary/tank)) var/obj/machinery/atmospherics/unary/tank/T = A atmosanalyzer_scan(T.air_contents, user, T) @@ -1276,4 +1282,3 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/emp_act(severity) for(var/atom/A in src) A.emp_act(severity) - \ No newline at end of file diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 9b3c01adfdd..de7bcf83e09 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -3,39 +3,41 @@ Title: PDA UI Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm --> - - - + .fixedLeft, .fixedLeftWide, .fixedLeftWider, .fixedLeftWidest { + color: #000000; + } + + +{{/if}} {{if data.owner}}
@@ -46,6 +48,7 @@ h1, h2, h3, h4, h5, h6 { {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'fixedLeft')}} {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'fixedLeftWide')}} {{/if}} {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'fixedLeft')}} {{/if}} + {{:helper.link('Toggle R.E.T.R.O. mode', 'gear', {'choice': "Retro"}, null, 'floatRight')}}

From ca3d60278bbe2476135c46641a0a3368d1549b33 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 12 Oct 2015 13:45:06 -0700 Subject: [PATCH 14/26] One last color tweak --- nano/templates/pda.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index de7bcf83e09..308edb36e4c 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -32,7 +32,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm color: #000000; } - .fixedLeft, .fixedLeftWide, .fixedLeftWider, .fixedLeftWidest { + .fixedLeft, .fixedLeftWide, .fixedLeftWider, .fixedLeftWidest, floatRight { color: #000000; } From 8e99e99f4a94c3cf04459cc5c12e214c822fb7ed Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 12 Oct 2015 13:51:27 -0700 Subject: [PATCH 15/26] Fix ID link inconsistant styling --- nano/templates/pda.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 308edb36e4c..7dc44c263f9 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -78,7 +78,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm ID:
- {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'fixedLeftWidest' : 'fixedLeft')}} + {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'link fixedLeftWidest' : 'link fixedLeft')}}

From 69f4d9651736935ce1ebcab2239ea6841e6dfbb7 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 12 Oct 2015 14:15:27 -0700 Subject: [PATCH 16/26] Switch to goon coloring, new note class for PDA's --- nano/css/shared.css | 5 +++++ nano/templates/pda.tmpl | 22 ++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/nano/css/shared.css b/nano/css/shared.css index 861fd9e165c..786b577e615 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -445,6 +445,11 @@ div.notice { white-space: nowrap; } +.pdanote { + color: #cd6500; + font-weight: bold; +} + /* DNA Modifier styling */ .dnaBlock { float: left; diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 7dc44c263f9..e827bab7a08 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -12,29 +12,39 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm } body { - background: #808000; + background: #6F7961; } .itemLabelNarrow, .itemLabel, .itemLabelWide, .itemLabelWider, .itemLabelWidest { - color: #444400; + color: #000000; + font-weight: bold; } .average { - color: #ABAB00; + color: #222222; + } + + .pdanote { + color: #555555; } .link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton { color: #000000; - background: #ACAC50; + background: #565D4B; } h1, h2, h3, h4, h5, h6 { color: #000000; } - .fixedLeft, .fixedLeftWide, .fixedLeftWider, .fixedLeftWidest, floatRight { + .fixedLeft, .fixedLeftWide, .fixedLeftWider, .fixedLeftWidest, .floatRight { color: #000000; } + + #uiTitleText { + color: #000000; + } + {{/if}} @@ -225,7 +235,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
- {{:data.note}} + {{:data.note}}
From e83ebc3d5299ce84fef000263f1fc4dfcd80ae41 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 12 Oct 2015 19:39:12 -0400 Subject: [PATCH 17/26] Eyes Fixes and Chem Tweaks --- code/game/machinery/adv_med.dm | 14 +++++------ code/modules/reagents/newchem/medicine.dm | 25 +++++++++++++------ .../chemical_reaction_med.dm | 7 ------ .../reagents/oldchem/reagents/reagents_med.dm | 16 +----------- code/modules/surgery/organs_internal.dm | 12 +++++++-- 5 files changed, 35 insertions(+), 39 deletions(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 4ffe2a33052..1d6e07b04c6 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -28,7 +28,7 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 2) RefreshParts() - + /obj/machinery/bodyscanner/upgraded/New() ..() component_parts = list() @@ -129,9 +129,9 @@ usr << "[L.name] will not fit into the body scanner because they have a slime latched onto their head." return if(L == user) - visible_message("[user] climbs into the body scanner.", 3) + visible_message("[user] climbs into the body scanner.") else - visible_message("[user] puts [L.name] into the body scanner.", 3) + visible_message("[user] puts [L.name] into the body scanner.") if (L.client) L.client.perspective = EYE_PERSPECTIVE @@ -350,21 +350,21 @@ /obj/machinery/body_scanconsole/attack_ai(user as mob) return attack_hand(user) - + /obj/machinery/body_scanconsole/attack_ghost(user as mob) return attack_hand(user) /obj/machinery/body_scanconsole/attack_hand(user as mob) if(stat & (NOPOWER|BROKEN)) return - + if (panel_open) user << "Close the maintenance panel first." return - + if(!src.connected) findscanner() - + if (src.connected) if(!connected.occupant) user << "The scanner is empty." diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index e20a8d1c491..9905345926b 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -513,16 +513,25 @@ datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob) datum/reagent/oculine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.eye_blurry = max(M.eye_blurry-5 , 0) - M.eye_blind = max(M.eye_blind-5 , 0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] - if(istype(E)) - if(E.damage > 0) - E.damage -= 1 + if(prob(80)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + if(istype(E)) + E.damage = max(E.damage-1, 0) + M.eye_blurry = max(M.eye_blurry-1 , 0) + M.ear_damage = max(M.ear_damage-1, 0) + if(prob(50)) + M.disabilities &= ~NEARSIGHTED + if(prob(30)) + M.sdisabilities &= ~BLIND + M.eye_blind = 0 + if(M.ear_damage <= 25) + if(prob(30)) + M.ear_deaf = 0 ..() return + /datum/chemical_reaction/oculine name = "Oculine" id = "oculine" diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm index 02e1f4a65cd..809a8dfd34d 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm @@ -30,13 +30,6 @@ result_amount = 2 mix_message = "The solvent extracts an antibiotic compound from the fungus." - audioline - name = "Audioline" - id = "audioline" - result = "audioline" - required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) - result_amount = 3 - rezadone name = "Rezadone" id = "rezadone" diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 696fa6354a5..2bd1ec2c939 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -61,20 +61,6 @@ ..() return -/datum/reagent/audioline - name = "Audioline" - id = "audioline" - description = "Heals ear damage." - reagent_state = LIQUID - color = "#6600FF" // rgb: 100, 165, 255 - -/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.ear_damage = 0 - M.ear_deaf = 0 - ..() - return - /datum/reagent/mitocholide name = "Mitocholide" id = "mitocholide" @@ -91,7 +77,7 @@ for(var/name in H.internal_organs_by_name) var/obj/item/organ/I = H.internal_organs_by_name[name] if(I.damage > 0) - I.damage -= 0.20 + I.damage = max(I.damage-0.2, 0) ..() return diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6fe84897c3b..d0f70b6482b 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -156,6 +156,14 @@ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 + if(target_zone == "head") + target.disabilities &= ~NEARSIGHTED + target.sdisabilities &= ~BLIND + target.eye_blurry = 0 + target.eye_blind = 0 + target.ear_damage = 0 + target.ear_deaf = 0 + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!hasorgans(target)) @@ -193,7 +201,7 @@ if (!..()) return 0 - + var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!(affected && !(affected.status & ORGAN_ROBOT))) @@ -310,7 +318,7 @@ if(!istype(O)) return 0 - + if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) user << "You cannot install a naked organ into a robotic body." return 2 From 34eadf298e86a27d621c3289ff2808a20d0c4681 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 12 Oct 2015 22:28:25 -0400 Subject: [PATCH 18/26] more 3 fixes --- code/game/dna/dna_modifier.dm | 54 +++++++++---------- code/game/machinery/OpTable.dm | 2 +- code/game/machinery/Sleeper.dm | 10 ++-- .../machinery/computer/HolodeckControl.dm | 20 +++---- code/game/machinery/cryo.dm | 10 ++-- code/game/machinery/cryopod.dm | 14 ++--- code/game/machinery/suit_storage_unit.dm | 8 +-- code/modules/admin/verbs/onlyoneteam.dm | 10 ++-- 8 files changed, 64 insertions(+), 64 deletions(-) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 33a952ace87..b0dcf14933f 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -79,7 +79,7 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - + /obj/machinery/dna_scannernew/RefreshParts() scan_level = 0 damage_coeff = 0 @@ -190,7 +190,7 @@ return if(L == user) return - visible_message("[user] puts [L.name] into the DNA Scanner.", 3) + visible_message("[user] puts [L.name] into the DNA Scanner.") put_in(L) if(user.pulling == L) user.pulling = null @@ -316,21 +316,21 @@ for(var/atom/movable/A as mob|obj in src) A.forceMove(src.loc) qdel(src) - + // Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations /obj/machinery/dna_scannernew/proc/radiation_check() if(!occupant) return 1 - + if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant if((H.species.flags & NO_DNA_RAD)) return 1 - + var/radiation_protection = occupant.run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.") if (radiation_protection > NEGATE_MUTATION_THRESHOLD) return 1 - + return 0 /obj/machinery/computer/scan_consolenew @@ -445,9 +445,9 @@ if(..(user)) return - if(stat & (NOPOWER|BROKEN)) - return - + if(stat & (NOPOWER|BROKEN)) + return + ui_interact(user) /** @@ -588,10 +588,10 @@ return 1 // return 1 forces an update to all Nano uis attached to src var/radiation = (((src.radiation_intensity*3)+src.radiation_duration*3) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - if(src.connected.radiation_check()) + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 - + if (prob(95)) if(prob(75)) randmutb(src.connected.occupant) @@ -691,29 +691,29 @@ if (!src.connected.occupant) return 1 - + if (prob((80 + (src.radiation_duration / 2)))) var/radiation = (src.radiation_intensity+src.radiation_duration) src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + if(src.connected.radiation_check()) return 1 - + block = miniscrambletarget(num2text(selected_ui_target), src.radiation_intensity, src.radiation_duration) src.connected.occupant.dna.SetUISubBlock(src.selected_ui_block,src.selected_ui_subblock,block) src.connected.occupant.UpdateAppearance() else var/radiation = ((src.radiation_intensity*2)+src.radiation_duration) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) if(src.connected.radiation_check()) return 1 - + if (prob(20+src.radiation_intensity)) randmutb(src.connected.occupant) domutcheck(src.connected.occupant,src.connected) else randmuti(src.connected.occupant) - src.connected.occupant.UpdateAppearance() + src.connected.occupant.UpdateAppearance() return 1 // return 1 forces an update to all Nano uis attached to src //////////////////////////////////////////////////////// @@ -755,16 +755,16 @@ sleep(10*src.radiation_duration) // sleep for radiation_duration seconds irradiating = 0 - src.connected.locked = lock_state - - if(src.connected.occupant) + src.connected.locked = lock_state + + if(src.connected.occupant) if (prob((80 + ((src.radiation_duration / 2) + (connected.precision_coeff ** 3))))) var/radiation = ((src.radiation_intensity+src.radiation_duration) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 - + var/real_SE_block=selected_se_block block = miniscramble(block, src.radiation_intensity, src.radiation_duration) if(prob(20)) @@ -782,7 +782,7 @@ if(src.connected.radiation_check()) return 1 - + if (prob(80-src.radiation_duration)) //testing("Random bad mut!") randmutb(src.connected.occupant) @@ -893,8 +893,8 @@ src.connected.locked = lock_state var/radiation = (rand(20,50) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index d7cf74d8137..6a0bd412e8f 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -92,7 +92,7 @@ if (C == user) user.visible_message("[user] climbs on the operating table.","You climb on the operating table.") else - visible_message("[C] has been laid on the operating table by [user].", 3) + visible_message("[C] has been laid on the operating table by [user].") if (C.client) C.client.perspective = EYE_PERSPECTIVE C.client.eye = src diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 6cb48aef355..2459e1cc121 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -308,7 +308,7 @@ user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") src.updateUsrDialog() return - + else user << "\red The sleeper has a beaker already." return @@ -354,7 +354,7 @@ usr << "[G:affecting.name] will not fit into the sleeper because they have a slime latched onto their head." return - visible_message("[user] starts putting [G:affecting:name] into the sleeper.", 3) + visible_message("[user] starts putting [G:affecting:name] into the sleeper.") if(do_after(user, 20, target = G:affecting)) if(src.occupant) @@ -555,9 +555,9 @@ usr << "[L.name] will not fit into the sleeper because they have a slime latched onto their head." return if(L == user) - visible_message("[user] starts climbing into the sleeper.", 3) + visible_message("[user] starts climbing into the sleeper.") else - visible_message("[user] starts putting [L.name] into the sleeper.", 3) + visible_message("[user] starts putting [L.name] into the sleeper.") if(do_after(user, 20, target = L)) if(src.occupant) @@ -599,7 +599,7 @@ if(M.Victim == usr) usr << "You're too busy getting your life sucked out of you." return - visible_message("[usr] starts climbing into the sleeper.", 3) + visible_message("[usr] starts climbing into the sleeper.") if(do_after(usr, 20, target = usr)) if(src.occupant) usr << "\blue The sleeper is already occupied!" diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index b4e9dc9822c..2db4a6a64e8 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -19,7 +19,7 @@ /obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob) if(..()) return 1 - + user.set_machine(src) var/dat @@ -195,7 +195,7 @@ if(!..()) return - + if(active) if(!checkInteg(linkedholodeck)) damaged = 1 @@ -348,10 +348,10 @@ /obj/structure/table/holotable name = "table" -/obj/structure/table/holotable/attack_alien(mob/user as mob) +/obj/structure/table/holotable/attack_alien(mob/user as mob) return attack_hand(user) -/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) +/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) return attack_hand(user) /obj/structure/table/holotable/attack_hand(mob/user as mob) @@ -387,11 +387,11 @@ pressure_resistance = 4*ONE_ATMOSPHERE anchored = 1.0 flags = ON_BORDER - + /obj/structure/rack/holorack name = "rack" -/obj/structure/rack/holorack/attack_alien(mob/user as mob) +/obj/structure/rack/holorack/attack_alien(mob/user as mob) return attack_hand(user) /obj/structure/rack/holorack/attack_animal(mob/living/simple_animal/user as mob) @@ -480,12 +480,12 @@ return G.affecting.loc = src.loc G.affecting.Weaken(5) - visible_message("[G.assailant] dunks [G.affecting] into the [src]!", 3) + visible_message("[G.assailant] dunks [G.affecting] into the [src]!") qdel(W) return else if (istype(W, /obj/item) && get_dist(src,user)<2) user.drop_item(src) - visible_message("[user] dunks [W] into the [src]!", 3) + visible_message("[user] dunks [W] into the [src]!") return /obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -495,9 +495,9 @@ return if(prob(50)) I.loc = src.loc - visible_message("Swish! \the [I] lands in \the [src].", 3) + visible_message("Swish! \the [I] lands in \the [src].") else - visible_message("\The [I] bounces off of \the [src]'s rim!", 3) + visible_message("\The [I] bounces off of \the [src]'s rim!") return 0 else return ..(mover, target, height, air_group) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 1a3361425d9..ceb15bc79b7 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -49,7 +49,7 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - + /obj/machinery/atmospherics/unary/cryo_cell/construction() ..(dir,dir) @@ -113,9 +113,9 @@ return if(put_mob(L)) if(L == user) - visible_message("[user] climbs into the cryo cell.", 3) + visible_message("[user] climbs into the cryo cell.") else - visible_message("[user] puts [L.name] into the cryo cell.", 3) + visible_message("[user] puts [L.name] into the cryo cell.") if(user.pulling == L) user.pulling = null @@ -157,11 +157,11 @@ /obj/machinery/atmospherics/unary/cryo_cell/attack_ghost(mob/user) return attack_hand(user) - + /obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) if(user == occupant) return - + if(panel_open) usr << "\blue Close the maintenance panel first." return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 24c7acc269e..f509cb9026d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -110,7 +110,7 @@ user << "\The [I] is no longer in storage." return - visible_message("The console beeps happily as it disgorges \the [I].", 3) + visible_message("The console beeps happily as it disgorges \the [I].") I.loc = get_turf(src) frozen_items -= I @@ -125,7 +125,7 @@ user << "There is nothing to recover from storage." return - visible_message("The console beeps happily as it disgorges the desired objects.", 3) + visible_message("The console beeps happily as it disgorges the desired objects.") for(var/obj/item/I in frozen_items) I.loc = get_turf(src) @@ -420,7 +420,7 @@ else announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") - visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3) + visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.") // Delete the mob. qdel(occupant) @@ -458,7 +458,7 @@ if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("[user] starts putting [G:affecting:name] into \the [src].") if(do_after(user, 20, target = G:affecting)) if(!M || !G || !G:affecting) return @@ -547,9 +547,9 @@ if(willing) if(L == user) - visible_message("[user] starts climbing into the cryo pod.", 3) + visible_message("[user] starts climbing into the cryo pod.") else - visible_message("[user] starts putting [L] into the cryo pod.", 3) + visible_message("[user] starts putting [L] into the cryo pod.") if(do_after(user, 20, target = L)) if(!L) return @@ -637,7 +637,7 @@ usr << "You're too busy getting your life sucked out of you." return - visible_message("[usr] starts climbing into \the [src].", 3) + visible_message("[usr] starts climbing into \the [src].") if(do_after(usr, 20, target = usr)) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index e697eed0fea..8cdd74790ac 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -389,7 +389,7 @@ src.SUIT = null if(src.MASK) src.MASK = null - visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.", 3) + visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.") src.isbroken = 1 src.isopen = 1 src.islocked = 0 @@ -484,7 +484,7 @@ if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) usr << "It's too cluttered inside for you to fit in!" return - visible_message("[usr] starts squeezing into the suit storage unit!", 3) + visible_message("[usr] starts squeezing into the suit storage unit!") if(do_after(usr, 10, target = usr)) usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE @@ -528,7 +528,7 @@ if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty user << "The unit's storage area is too cluttered." return - visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3) + visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return //derpcheck var/mob/M = G.affecting @@ -685,7 +685,7 @@ user << "\red There is no room inside the cycler for [G.affecting.name]." return - visible_message("[user] starts putting [G.affecting.name] into the suit cycler.", 3) + visible_message("[user] starts putting [G.affecting.name] into the suit cycler.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 23f4df6116b..016b4c891a0 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -2,12 +2,12 @@ if(!ticker) alert("The game hasn't started yet!") return - + var/list/incompatible_species = list("Plasmaman") for(var/mob/living/carbon/human/H in player_list) - if(H.stat == DEAD || !(H.client)) + if(H.stat == DEAD || !(H.client)) continue - if(is_special_character(H)) + if(is_special_character(H)) continue if(H.species.name in incompatible_species) H.set_species("Human") @@ -55,7 +55,7 @@ H.species.equip(H) H.regenerate_icons() - + message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used dodgeball.") nologevent = 1 @@ -85,6 +85,6 @@ return else playsound(src, 'sound/items/dodgeball.ogg', 50, 1) - visible_message("[H] HAS BEEN ELIMINATED!", 3) + visible_message("[H] HAS BEEN ELIMINATED!") H.melt() return From e19a8a405b858f2084bff7c3ae0f34f395bf1214 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 12 Oct 2015 23:17:13 -0400 Subject: [PATCH 19/26] mitocholide buff --- code/modules/reagents/oldchem/reagents/reagents_med.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 2bd1ec2c939..a9f2d48bb19 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -77,7 +77,7 @@ for(var/name in H.internal_organs_by_name) var/obj/item/organ/I = H.internal_organs_by_name[name] if(I.damage > 0) - I.damage = max(I.damage-0.2, 0) + I.damage = max(I.damage-0.4, 0) ..() return From f2c868da2f6fdf67fbee87469c9938862b4f4056 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 13 Oct 2015 16:10:01 -0400 Subject: [PATCH 20/26] Makes Monkey Cubes GC --- .../reagent_containers/food/snacks.dm | 65 ++++--------------- 1 file changed, 12 insertions(+), 53 deletions(-) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 4213eb145ce..34c2cd5de23 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1652,82 +1652,40 @@ icon_state = "monkeycube" bitesize = 12 filling_color = "#ADAC7F" - var/monkey_type = "Monkey" /obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() ..() reagents.add_reagent("protein",10) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O as obj, mob/user as mob, proximity) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity) if(!proximity) return if(istype(O,/obj/structure/sink) && !wrapped) - user << "You place [name] under a stream of water..." - if(loc == user) - user.unEquip(src) - forceMove(get_turf(src)) + user << "You place [src] under a stream of water..." + user.drop_item() + forceMove(get_turf(O)) return Expand() ..() -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) if(wrapped) Unwrap(user) -/* -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M) - M << "Something inside of you suddently expands!" - - - if (istype(M, /mob/living/carbon/human)) - //Do not try to understand. - var/obj/item/weapon/surprise = new/obj/item/weapon(M) - var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas - surprise.icon = ook.icon - surprise.icon_state = ook.icon_state - surprise.name = "malformed [ook.name]" - surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life." - qdel(ook) //rip nullspace monkey - surprise.transform *= 0.6 - surprise.add_blood(M) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/E = H.get_organ("chest") - E.fracture() - for (var/obj/item/organ/I in E.internal_organs) - I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1)) - - if (!E.hidden && prob(60)) //set it snuggly - E.hidden = surprise - E.cavity = 0 - else //someone is having a bad day - E.createwound(CUT, 30) - E.embed(surprise) - else if (issmall(M)) - M.visible_message("[M] suddenly tears in half!") - var/mob/living/carbon/monkey/ook = new monkey_type(M.loc) - ook.name = "malformed [ook.name]" - ook.transform *= 0.6 - ook.add_blood(M) - M.gib() - ..() -*/ - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature) if(volume >= 5) return Expand() /obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() - for(var/mob/M in viewers(src,7)) - M << "\red \The [src] expands!" - var/mob/living/carbon/human/H = new (src) + visible_message("[src] expands!") + var/mob/living/carbon/human/H = new (get_turf(src)) H.set_species(monkey_type) qdel(src) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user) icon_state = "monkeycube" desc = "Just add water!" - user << "You unwrap the cube." + user << "You unwrap the cube." wrapped = 0 - return /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped desc = "Still wrapped in some paper." @@ -1737,22 +1695,23 @@ /obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube name = "farwa cube" monkey_type = "Farwa" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube name = "farwa cube" monkey_type = "Farwa" - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube name = "wolpin cube" monkey_type = "Wolpin" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube name = "wolpin cube" monkey_type = "Wolpin" - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube name = "stok cube" monkey_type = "Stok" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube name = "stok cube" monkey_type = "Stok" From 6db6dcd3f1c8376696c6e6bdb496e832a5f7bf83 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 13 Oct 2015 19:14:25 -0400 Subject: [PATCH 21/26] flag --- code/game/objects/items/flag.dm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index db492efaf29..32171b19fbe 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -159,33 +159,33 @@ //Department Flags /obj/item/flag/cargo - name = "cargo flag" - desc = "The flag of the cargo department." + name = "Cargonia flag" + desc = "The flag of the independent, sovereign nation of Cargonia." icon_state = "cargoflag" /obj/item/flag/med - name = "medical flag" - desc = "The flag of the medical department." + name = "Medistan flag" + desc = "The flag of the independent, sovereign nation of Medistan." icon_state = "medflag" /obj/item/flag/sec - name = "security flag" - desc = "The flag of the security department." + name = "Brigston flag" + desc = "The flag of the independent, sovereign nation of Brigston." icon_state = "secflag" /obj/item/flag/rnd - name = "science flag" - desc = "The flag of the science department." + name = "Scientopia flag" + desc = "The flag of the independent, sovereign nation of Scientopia." icon_state = "rndflag" /obj/item/flag/atmos - name = "atmospherics flag" - desc = "The flag of the atmospherics department." + name = "Atmosia flag" + desc = "The flag of the independent, sovereign nation of Atmosia." icon_state = "atmosflag" /obj/item/flag/command - name = "command flag" - desc = "The flag of the command department" + name = "Command flag" + desc = "The flag of the independent, sovereign nation of Command." icon_state = "ntflag" //Antags From 7999eb9a9c5735c425b1d81fd49893b722222024 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 13 Oct 2015 20:37:27 -0400 Subject: [PATCH 22/26] Fixes Pipes not GCing --- code/ATMOSPHERICS/atmospherics.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index ac699c42a53..a4e432bb1e3 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -50,6 +50,9 @@ Pipelines + Other Objects -> Pipe network stored = new(src, make_from = src) /obj/machinery/atmospherics/Destroy() + if(stored) + qdel(stored) + stored = null for(var/mob/living/M in src) //ventcrawling is serious business M.remove_ventcrawl() M.forceMove(loc) From e07f4e0423195b1ecaba2192abdf30a9707f4deb Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Tue, 13 Oct 2015 18:29:39 -0700 Subject: [PATCH 23/26] Final tweaks Unified PDA links with .pdalink class, changed .good to be brighter in retro, fixed scrollbar in retro, retro now overrides .pdalink in order to make goon-style buttons --- nano/templates/pda.tmpl | 126 ++++++++++++++++++++++++---------------- 1 file changed, 77 insertions(+), 49 deletions(-) diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index e827bab7a08..753e06f299e 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -8,7 +8,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Blob