From 90d76b652c3b3ef2b9d4f322290bd3beb46b1a13 Mon Sep 17 00:00:00 2001 From: Lzimann Date: Fri, 28 Oct 2016 17:35:22 -0200 Subject: [PATCH 01/15] You can see your own attack log once again --- code/_onclick/item_attack.dm | 4 ++-- code/datums/martial.dm | 8 ++++---- .../gamemodes/devil/true_devil/_true_devil.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/mecha/mecha_defense.dm | 4 ++-- code/game/objects/obj_defense.dm | 4 ++-- code/game/objects/structures/displaycase.dm | 2 +- code/game/objects/structures/grille.dm | 4 ++-- code/game/objects/structures/tables_racks.dm | 2 +- code/game/turfs/simulated/walls.dm | 2 +- .../mob/living/carbon/alien/alien_defense.dm | 2 +- .../carbon/alien/humanoid/humanoid_defense.dm | 10 +++++----- .../carbon/alien/larva/larva_defense.dm | 4 ++-- .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/carbon/human/species.dm | 10 +++++----- .../living/carbon/monkey/monkey_defense.dm | 19 +++++++++---------- code/modules/mob/living/living_defense.dm | 14 +++++++------- .../mob/living/silicon/robot/robot_defense.dm | 4 ++-- .../mob/living/silicon/silicon_defense.dm | 2 +- .../living/simple_animal/animal_defense.dm | 8 ++++---- code/modules/projectiles/gun.dm | 4 ++-- 21 files changed, 56 insertions(+), 57 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index af7671a10d6..7a6e820a2f6 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -56,7 +56,7 @@ /obj/attacked_by(obj/item/I, mob/living/user) if(I.force) - visible_message("[user] has hit [src] with [I]!", null, null, COMBAT_MESSAGE_RANGE, user) + visible_message("[user] has hit [src] with [I]!", null, null, COMBAT_MESSAGE_RANGE) //only witnesses close by and the victim see a hit message. take_damage(I.force, I.damtype, "melee", 1) @@ -105,6 +105,6 @@ if(user in viewers(src, null)) attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!" visible_message("[attack_message]", \ - "[attack_message]", null, COMBAT_MESSAGE_RANGE,user) + "[attack_message]", null, COMBAT_MESSAGE_RANGE) return 1 diff --git a/code/datums/martial.dm b/code/datums/martial.dm index eb68ce0e064..dca344b774e 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -47,7 +47,7 @@ if(!damage) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ - "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE, A) + "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE) add_logs(A, D, "attempted to [atk_verb]") return 0 @@ -56,7 +56,7 @@ playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1) D.visible_message("[A] has [atk_verb]ed [D]!", \ - "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE, A) + "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE) D.apply_damage(damage, BRUTE, affecting, armor_block) @@ -108,7 +108,7 @@ if(!damage) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ - "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE, A) + "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE) add_logs(A, D, "attempted to hit", atk_verb) return 0 @@ -119,7 +119,7 @@ playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1) D.visible_message("[A] has [atk_verb]ed [D]!", \ - "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE, A) + "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE) D.apply_damage(damage, STAMINA, affecting, armor_block) add_logs(A, D, "punched (boxing) ") diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 2e323976414..e8f6c0ff468 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -130,7 +130,7 @@ attack_message = "[user] has [message_verb] [src] with [I]!" if(message_verb) visible_message("[attack_message]", - "[attack_message]", null, COMBAT_MESSAGE_RANGE, user) + "[attack_message]", null, COMBAT_MESSAGE_RANGE) return TRUE /mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6ff7bd4743a..aaee37ecabf 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -247,7 +247,7 @@ Class Procs: else user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE) take_damage(4, BRUTE, "melee", 1) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index d7710b28d24..4a8ee45ce79 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -56,7 +56,7 @@ user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1) - user.visible_message("[user] hits [name]. Nothing happens", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] hits [name]. Nothing happens", null, null, COMBAT_MESSAGE_RANGE) log_message("Attack by hand/paw. Attacker - [user].",1) log_append_to_last("Armor saved.") @@ -94,7 +94,7 @@ log_message("Attack by hulk. Attacker - [user].",1) user.changeNext_move(CLICK_CD_MELEE) add_logs(user, src, "punched", "hulk powers") - user.visible_message("[user] hits [name]. The metal creaks and bends.", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] hits [name]. The metal creaks and bends.", null, null, COMBAT_MESSAGE_RANGE) user.do_attack_animation(src, ATTACK_EFFECT_SMASH) take_damage(15, BRUTE, "melee", 0, get_dir(src, user)) return 1 diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 1e425b7fac8..726fd15e245 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -70,7 +70,7 @@ /obj/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") ..(user, 1) - visible_message("[user] smashes [src]!", null, null, COMBAT_MESSAGE_RANGE, user) + visible_message("[user] smashes [src]!", null, null, COMBAT_MESSAGE_RANGE) if(density) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) @@ -134,7 +134,7 @@ return 0 else return 0 - visible_message("[M.name] has hit [src].", null, null, COMBAT_MESSAGE_RANGE, M.occupant) + visible_message("[M.name] has hit [src].", null, null, COMBAT_MESSAGE_RANGE) return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. /obj/singularity_act() diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index f65a36722f5..17474760f0e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -185,7 +185,7 @@ //prevents remote "kicks" with TK if (!Adjacent(user)) return - user.visible_message("[user] kicks the display case.", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] kicks the display case.", null, null, COMBAT_MESSAGE_RANGE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) take_damage(2) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 9258d7140a0..cf3f5b9ff44 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -43,14 +43,14 @@ /obj/structure/grille/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) - user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE) if(!shock(user, 70)) take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_alien(mob/living/user) user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] mangles [src].", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] mangles [src].", null, null, COMBAT_MESSAGE_RANGE) if(!shock(user, 70)) take_damage(20, BRUTE, "melee", 1) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 66423e31913..2c2d89e7d7a 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -439,7 +439,7 @@ /obj/structure/rack/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) - user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE) take_damage(rand(4,8), BRUTE, "melee", 1) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 4337bf630ce..3c786686e92 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -87,7 +87,7 @@ switch(M.damtype) if(BRUTE) playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - visible_message("[M.name] has hit [src]!", null, null, COMBAT_MESSAGE_RANGE, M.occupant) + visible_message("[M.name] has hit [src]!", null, null, COMBAT_MESSAGE_RANGE) if(prob(hardness + M.force) && M.force > 20) dismantle_wall(1) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index e7ca991e69b..cb73bddef64 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -36,7 +36,7 @@ In all, this is a lot like the monkey code. /N M.do_attack_animation(src, ATTACK_EFFECT_BITE) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) visible_message("[M.name] bites [src]!", \ - "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) adjustBruteLoss(1) add_logs(M, src, "attacked") updatehealth() diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index 0c35197d59f..bd8a1322460 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -17,7 +17,7 @@ hitverb = "slammed" playsound(loc, "punch", 25, 1, -1) visible_message("[user] has [hitverb] [src]!", \ - "[user] has [hitverb] [src]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] has [hitverb] [src]!", null, COMBAT_MESSAGE_RANGE) return 1 /mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M) @@ -28,7 +28,7 @@ if (prob(90)) playsound(loc, "punch", 25, 1, -1) visible_message("[M] has punched [src]!", \ - "[M] has punched [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has punched [src]!", null, COMBAT_MESSAGE_RANGE) if ((stat != DEAD) && (damage > 9 || prob(5)))//Regular humans have a very small chance of weakening an alien. Paralyse(2) visible_message("[M] has weakened [src]!", \ @@ -39,7 +39,7 @@ else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [src]!", \ - "[M] has attempted to punch [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has attempted to punch [src]!", null, COMBAT_MESSAGE_RANGE) if ("disarm") if (!lying) @@ -54,11 +54,11 @@ drop_item() playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ - "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to disarm [src]!",\ - "[M] has attempted to disarm [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has attempted to disarm [src]!", null, COMBAT_MESSAGE_RANGE) diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index 1a407d945f2..a5b406612ea 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -7,7 +7,7 @@ playsound(loc, "punch", 25, 1, -1) add_logs(M, src, "attacked") visible_message("[M] has kicked [src]!", \ - "[M] has kicked [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has kicked [src]!", null, COMBAT_MESSAGE_RANGE) if ((stat != DEAD) && (damage > 4.9)) Paralyse(rand(5,10)) @@ -16,7 +16,7 @@ else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to kick [src]!", \ - "[M] has attempted to kick [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has attempted to kick [src]!", null, COMBAT_MESSAGE_RANGE) /mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(user.a_intent == "harm") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1d7f6c92da6..f272b85a967 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -332,7 +332,7 @@ updatehealth() visible_message("[M.name] has hit [src]!", \ - "[M.name] has hit [src]!", null, COMBAT_MESSAGE_RANGE, M.occupant) + "[M.name] has hit [src]!", null, COMBAT_MESSAGE_RANGE) add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") else diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5ec7c528b06..407ca039e84 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -971,7 +971,7 @@ if(!damage || !affecting) playsound(target.loc, user.dna.species.miss_sound, 25, 1, -1) target.visible_message("[user] has attempted to [atk_verb] [target]!",\ - "[user] has attempted to [atk_verb] [target]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] has attempted to [atk_verb] [target]!", null, COMBAT_MESSAGE_RANGE) return 0 @@ -980,7 +980,7 @@ playsound(target.loc, user.dna.species.attack_sound, 25, 1, -1) target.visible_message("[user] has [atk_verb]ed [target]!", \ - "[user] has [atk_verb]ed [target]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] has [atk_verb]ed [target]!", null, COMBAT_MESSAGE_RANGE) if(user.limb_destroyer) target.dismembering_strike(user, affecting.body_zone) @@ -1008,7 +1008,7 @@ if(randn <= 25) playsound(target, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) target.visible_message("[user] has pushed [target]!", - "[user] has pushed [target]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] has pushed [target]!", null, COMBAT_MESSAGE_RANGE) target.apply_effect(2, WEAKEN, target.run_armor_check(affecting, "melee", "Your armor prevents your fall!", "Your armor softens your fall!")) target.forcesay(hit_appends) return @@ -1026,14 +1026,14 @@ if(!talked) //BubbleWrap if(target.drop_item()) target.visible_message("[user] has disarmed [target]!", \ - "[user] has disarmed [target]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] has disarmed [target]!", null, COMBAT_MESSAGE_RANGE) playsound(target, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) return playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1) target.visible_message("[user] attempted to disarm [target]!", \ - "[user] attemped to disarm [target]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] attemped to disarm [target]!", null, COMBAT_MESSAGE_RANGE) /datum/species/proc/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index 0af56cda546..b9400a3d30f 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -52,7 +52,7 @@ M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) if (prob(75)) visible_message("[M] has punched [name]!", \ - "[M] has punched [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has punched [name]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, "punch", 25, 1, -1) var/damage = rand(5, 10) @@ -72,7 +72,7 @@ else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [name]!", \ - "[M] has attempted to punch [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has attempted to punch [name]!", null, COMBAT_MESSAGE_RANGE) if("disarm") if (!paralysis) M.do_attack_animation(src, ATTACK_EFFECT_DISARM) @@ -81,12 +81,12 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) add_logs(M, src, "pushed") visible_message("[M] has pushed down [src]!", \ - "[M] has pushed down [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has pushed down [src]!", null, COMBAT_MESSAGE_RANGE) else if(drop_item()) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ - "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) /mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M) if(..()) //if harm or disarm intent. @@ -99,10 +99,10 @@ if (paralysis < 15) Paralyse(rand(10, 15)) visible_message("[M] has wounded [name]!", \ - "[M] has wounded [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has wounded [name]!", null, COMBAT_MESSAGE_RANGE) else visible_message("[M] has slashed [name]!", \ - "[M] has slashed [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has slashed [name]!", null, COMBAT_MESSAGE_RANGE) var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) add_logs(M, src, "attacked") @@ -116,18 +116,17 @@ else playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to lunge at [name]!", \ - "[M] has attempted to lunge at [name]!", null, COMBAT_MESSAGE_RANGE, M) - + "[M] has attempted to lunge at [name]!", null, COMBAT_MESSAGE_RANGE) if (M.a_intent == "disarm") playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) if(prob(95)) Weaken(10) visible_message("[M] has tackled down [name]!", \ - "[M] has tackled down [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has tackled down [name]!", null, COMBAT_MESSAGE_RANGE) else if(drop_item()) visible_message("[M] has disarmed [name]!", \ - "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE) add_logs(M, src, "disarmed") updatehealth() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 0b076c59813..d824b58739a 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -110,7 +110,7 @@ return updatehealth() visible_message("[M.name] has hit [src]!", \ - "[M.name] has hit [src]!", null, COMBAT_MESSAGE_RANGE, M.occupant) + "[M.name] has hit [src]!", null, COMBAT_MESSAGE_RANGE) add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") else step_away(src,M) @@ -185,7 +185,7 @@ add_logs(M, src, "attacked") M.do_attack_animation(src) visible_message("The [M.name] glomps [src]!", \ - "The [M.name] glomps [src]!", null, COMBAT_MESSAGE_RANGE, M) + "The [M.name] glomps [src]!", null, COMBAT_MESSAGE_RANGE) return 1 /mob/living/attack_animal(mob/living/simple_animal/M) @@ -198,7 +198,7 @@ playsound(loc, M.attack_sound, 50, 1, 1) M.do_attack_animation(src) visible_message("\The [M] [M.attacktext] [src]!", \ - "\The [M] [M.attacktext] [src]!", null, COMBAT_MESSAGE_RANGE, M) + "\The [M] [M.attacktext] [src]!", null, COMBAT_MESSAGE_RANGE) add_logs(M, src, "attacked") return 1 @@ -217,11 +217,11 @@ add_logs(M, src, "attacked") playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) visible_message("[M.name] bites [src]!", \ - "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) return 1 else visible_message("[M.name] has attempted to bite [src]!", \ - "[M.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) return 0 /mob/living/attack_larva(mob/living/carbon/alien/larva/L) @@ -235,12 +235,12 @@ if(prob(90)) add_logs(L, src, "attacked") visible_message("[L.name] bites [src]!", \ - "[L.name] bites [src]!", null, COMBAT_MESSAGE_RANGE, L) + "[L.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) return 1 else visible_message("[L.name] has attempted to bite [src]!", \ - "[L.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE, L) + "[L.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) return 0 /mob/living/attack_alien(mob/living/carbon/alien/humanoid/M) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 7778e4a53c0..7e317bf00c3 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -12,14 +12,14 @@ if(get_active_held_item()) uneq_active() visible_message("[M] disarmed [src]!", \ - "[M] has disabled [src]'s active module!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has disabled [src]'s active module!", null, COMBAT_MESSAGE_RANGE) add_logs(M, src, "disarmed") else Stun(2) step(src,get_dir(M,src)) add_logs(M, src, "pushed") visible_message("[M] has forced back [src]!", \ - "[M] has forced back [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has forced back [src]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1) else ..() diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index f40f4bfeed6..c6f5452632b 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -69,7 +69,7 @@ M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(src.loc, 'sound/effects/bang.ogg', 10, 1) visible_message("[M] punches [src], but doesn't leave a dent.", \ - "[M] punches [src], but doesn't leave a dent.", null, COMBAT_MESSAGE_RANGE, M) + "[M] punches [src], but doesn't leave a dent.", null, COMBAT_MESSAGE_RANGE) return 0 /mob/living/silicon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 4830fd63a2e..c58226a79df 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -15,7 +15,7 @@ if("harm", "disarm") M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) visible_message("[M] [response_harm] [src]!",\ - "[M] [response_harm] [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] [response_harm] [src]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, attacked_sound, 25, 1, -1) attack_threshold_check(harm_intent_damage) add_logs(M, src, "attacked") @@ -27,7 +27,7 @@ ..(user, 1) playsound(loc, "punch", 25, 1, -1) visible_message("[user] has punched [src]!", \ - "[user] has punched [src]!", null, COMBAT_MESSAGE_RANGE, user) + "[user] has punched [src]!", null, COMBAT_MESSAGE_RANGE) adjustBruteLoss(15) return 1 @@ -48,12 +48,12 @@ if(M.a_intent == "disarm") playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) visible_message("[M] [response_disarm] [name]!", \ - "[M] [response_disarm] [name]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] [response_disarm] [name]!", null, COMBAT_MESSAGE_RANGE) add_logs(M, src, "disarmed") else var/damage = rand(15, 30) visible_message("[M] has slashed at [src]!", \ - "[M] has slashed at [src]!", null, COMBAT_MESSAGE_RANGE, M) + "[M] has slashed at [src]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) attack_threshold_check(damage) add_logs(M, src, "attacked") diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 87a2f251b82..75ccabb1c41 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -115,9 +115,9 @@ playsound(user, fire_sound, 50, 1) if(message) if(pointblank) - user.visible_message("[user] fires [src] point blank at [pbtarget]!", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] fires [src] point blank at [pbtarget]!", null, null, COMBAT_MESSAGE_RANGE) else - user.visible_message("[user] fires [src]!", null, null, COMBAT_MESSAGE_RANGE, user) + user.visible_message("[user] fires [src]!", null, null, COMBAT_MESSAGE_RANGE) if(weapon_weight >= WEAPON_MEDIUM) if(user.get_inactive_held_item()) From 4bd80f021daf44268d4a93a1089e171c29cae733 Mon Sep 17 00:00:00 2001 From: Mike Long Date: Fri, 28 Oct 2016 20:52:03 -0400 Subject: [PATCH 02/15] Fixes #21240 --- code/game/objects/structures.dm | 25 ++++++++++++--------- code/game/objects/structures/false_walls.dm | 3 +++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 2cf309254a0..9377b9ce084 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -92,15 +92,20 @@ if(!(resistance_flags & INDESTRUCTIBLE)) if(resistance_flags & ON_FIRE) user << "It's on fire!" - var/healthpercent = (obj_integrity/max_integrity) * 100 if(broken) user << "It looks broken." - switch(healthpercent) - if(100 to INFINITY) - user << "It seems pristine and undamaged." - if(50 to 100) - user << "It looks slightly damaged." - if(25 to 50) - user << "It appears heavily damaged." - if(0 to 25) - user << "It's falling apart!" \ No newline at end of file + var/examine_status = examine_status() + if(examine_status) + user << examine_status + +/obj/structure/proc/examine_status() //An overridable proc, mostly for falsewalls. + var/healthpercent = (obj_integrity/max_integrity) * 100 + switch(healthpercent) + if(100 to INFINITY) + return "It seems pristine and undamaged." + if(50 to 100) + return "It looks slightly damaged." + if(25 to 50) + return "It appears heavily damaged." + if(0 to 25) + return "It's falling apart!" diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index d3df50a5c96..70585b96f26 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -139,6 +139,9 @@ /obj/structure/falsewall/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 +/obj/structure/falsewall/examine_status() //So you can't detect falsewalls by examine. + return null + /* * False R-Walls */ From 22ccfd8e6223c1b3bf4feb70cc99abbd28bdd170 Mon Sep 17 00:00:00 2001 From: Kraseo Date: Sat, 29 Oct 2016 20:46:55 +0200 Subject: [PATCH 03/15] RIP AND TEAR --- code/game/objects/items/weapons/twohanded.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index d8f2c0a205f..73c4802f187 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -455,7 +455,7 @@ . = ..() /obj/item/weapon/twohanded/required/chainsaw/doomslayer - name = "OOOH BABY" + name = "THE GREAT COMMUNICATOR" desc = "VRRRRRRR!!!" armour_penetration = 100 force_on = 30 From ca58db328df9c793fc14379ec4cc1a1d291c026a Mon Sep 17 00:00:00 2001 From: Mysak0CZ Date: Sat, 29 Oct 2016 22:34:51 +0200 Subject: [PATCH 04/15] [ready for review] APC minor tweaks (#21241) I moved some things in APC's construction code. Emaged and malf-AI-hacked APCs can now be fixed replacing theyir board (old one destroyed in process). - We emag and hack APC's board, not frame You can now add/remove APC's wires even if board is secured Removing APC's and SMES's terminal no longer ignore current tool's speed You can repair APC's cover (only if APC is not compleatly broken) by using APC frame on it, while electronicks are still in place You can no longer unlock AI-hacked APCs, throught AI still can closing APC's cover will lock it --- code/modules/mob/living/silicon/ai/ai.dm | 1 + code/modules/power/apc.dm | 147 +++++++++++++++-------- code/modules/power/smes.dm | 2 +- code/modules/power/terminal.dm | 8 +- 4 files changed, 100 insertions(+), 58 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 5302d9d1eef..5cdc406c20a 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -858,6 +858,7 @@ var/list/ai_list = list() apc.malfai = parent || src apc.malfhack = TRUE apc.locked = TRUE + apc.coverlocked = TRUE playsound(get_turf(src), 'sound/machines/ding.ogg', 50, 1) src << "Hack complete. \The [apc] is now under your \ diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index c27282e1b8c..a410998bdf5 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -381,37 +381,60 @@ if(issilicon(user) && get_dist(src,user)>1) return src.attack_hand(user) - if (istype(W, /obj/item/weapon/crowbar) && opened) - if (has_electronics==1) - if (terminal) - user << "Disconnect the wires first!" + if (istype(W, /obj/item/weapon/crowbar)) //Using crowbar + if (opened) // a) on open apc + if (has_electronics==1) + if (terminal) + user << "Disconnect the wires first!" + return + playsound(src.loc, W.usesound, 50, 1) + user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues + if(do_after(user, 50/W.toolspeed, target = src)) + if (has_electronics==1) + has_electronics = 0 + if (stat & BROKEN) + user.visible_message(\ + "[user.name] has broken the power control board inside [src.name]!",\ + "You break the charred power control board and remove the remains.", + "You hear a crack.") + return + //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 + else if (emagged) // We emag board, not APC's frame + emagged = 0 + user.visible_message(\ + "[user.name] has discarded emaged power control board from [src.name]!",\ + "You discarded shorten board.") + return + else if (malfhack) // AI hacks board, not APC's frame + user.visible_message(\ + "[user.name] has discarded strangely programmed power control board from [src.name]!",\ + "You discarded strangely programmed board.") + malfai = null + malfhack = 0 + return + else + user.visible_message(\ + "[user.name] has removed the power control board from [src.name]!",\ + "You remove the power control board.") + new /obj/item/weapon/electronics/apc(loc) + return + else if (opened!=2) //cover isn't removed + opened = 0 + coverlocked = 1 //closing cover relocks it + update_icon() return - playsound(src.loc, W.usesound, 50, 1) - user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues - if(do_after(user, 50/W.toolspeed, target = src)) - if (has_electronics==1) - has_electronics = 0 - if ((stat & BROKEN) || malfhack) - user.visible_message(\ - "[user.name] has broken the power control board inside [src.name]!",\ - "You break the charred power control board and remove the remains.", - "You hear a crack.") - //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 - else - user.visible_message(\ - "[user.name] has removed the power control board from [src.name]!",\ - "You remove the power control board.") - new /obj/item/weapon/electronics/apc(loc) - else if (opened!=2) //cover isn't removed - opened = 0 - update_icon() - else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) ) - if(coverlocked && !(stat & MAINT)) - user << "The cover is locked and cannot be opened!" - return - else - opened = 1 - update_icon() + else if (!(stat & BROKEN)) // b) on closed and not broken APC + if(coverlocked && !(stat & MAINT)) // locked... + user << "The cover is locked and cannot be opened!" + return + else if (panel_open) // wires are exposed + user << "Exposed wires prevents you from opening it!" + return + else + opened = 1 + update_icon() + return + else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside if(cell) user << "There is a power cell already installed!" @@ -429,13 +452,14 @@ "You insert the power cell.") chargecount = 0 update_icon() + else if (istype(W, /obj/item/weapon/screwdriver)) // haxing if(opened) if (cell) user << "Close the APC first!" //Less hints more mystery! return else - if (has_electronics==1 && terminal) + if (has_electronics==1) has_electronics = 2 stat &= ~MAINT playsound(src.loc, W.usesound, 50, 1) @@ -466,16 +490,24 @@ else if(stat & (BROKEN|MAINT)) user << "Nothing happens!" else - if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) + if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) locked = !locked user << "You [ locked ? "lock" : "unlock"] the APC interface." update_icon() else user << "Access denied." - else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2) + + else if (istype(W, /obj/item/stack/cable_coil) && opened) if (src.loc:intact) user << "You must remove the floor plating in front of the APC first!" return + else if (terminal) // it already have terminal + user << "This APC is already wired!" + return + else if (has_electronics == 0) + user << "There is nothing to wire!" + return + var/obj/item/stack/cable_coil/C = W if(C.get_amount() < 10) user << "You need ten lengths of cable for APC!" @@ -486,7 +518,7 @@ if(do_after(user, 20, target = src)) if (C.get_amount() < 10 || !C) return - if (C.get_amount() >= 10 && !terminal && opened && has_electronics != 2) + if (C.get_amount() >= 10 && !terminal && opened && has_electronics > 0) var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() if (prob(50) && electrocute_mob(usr, N, N)) @@ -498,21 +530,28 @@ user << "You add cables to the APC frame." make_terminal() terminal.connect_to_network() - else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2) - terminal.dismantle(user) - else if (istype(W, /obj/item/weapon/electronics/apc) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) + else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened) + terminal.dismantle(user, W) + + else if (istype(W, /obj/item/weapon/electronics/apc) && opened) + if (has_electronics!=0) // there are already electronicks inside + user << "You cannot put the board inside, there already is one!" + return + else if (stat & BROKEN) + user << "You cannot put the board inside, the frame is damaged!" + return + user.visible_message("[user.name] inserts the power control board into [src].", \ "You start to insert the power control board into the frame...") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 10, target = src)) if(has_electronics==0) has_electronics = 1 + locked = 1 //We placed new, locked board in user << "You place the power control board inside the frame." qdel(W) - else if (istype(W, /obj/item/weapon/electronics/apc) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack)) - user << "You cannot put the board inside, the frame is damaged!" - return + else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal) var/obj/item/weapon/weldingtool/WT = W if (WT.get_fuel() < 3) @@ -524,7 +563,7 @@ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 50/W.toolspeed, target = src)) if(!src || !WT.remove_fuel(3, user)) return - if (emagged || malfhack || (stat & BROKEN) || opened==2) + if ((stat & BROKEN) || opened==2) new /obj/item/stack/sheet/metal(loc) user.visible_message(\ "[user.name] has cut [src] apart with [W].",\ @@ -536,16 +575,20 @@ "You cut the APC frame from the wall.") qdel(src) return - else if (istype(W, /obj/item/wallframe/apc) && opened && emagged) - emagged = 0 - if (opened==2) - opened = 1 - user.visible_message(\ - "[user.name] has replaced the damaged APC frontal panel with a new one.",\ - "You replace the damaged APC frontal panel with a new one.") - qdel(W) - update_icon() - else if (istype(W, /obj/item/wallframe/apc) && opened && ((stat & BROKEN) || malfhack)) + + else if (istype(W, /obj/item/wallframe/apc) && opened) + if (!(stat & BROKEN || opened==2 || obj_integrity < max_integrity)) // There is nothing to repair + user << "You found no reason for repairing this APC" + return + if (!(stat & BROKEN) && opened==2) // Cover is the only thing broken, we do not need to remove elctronicks to replace cover + user.visible_message("[user.name] replaces missing APC's cover.",\ + "You begin to replace APC's cover...") + if(do_after(user, 20, target = src)) // replacing cover is quicker than replacing whole frame + user << "You replace missing APC's cover." + qdel(W) + opened = 1 + update_icon() + return if (has_electronics) user << "You cannot repair this APC until you remove the electronics still inside!" return @@ -556,8 +599,6 @@ qdel(W) stat &= ~BROKEN obj_integrity = max_integrity - malfai = null - malfhack = 0 if (opened==2) opened = 1 update_icon() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e20e68a1683..16806b02680 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -164,7 +164,7 @@ //disassembling the terminal if(istype(I, /obj/item/weapon/wirecutters) && terminal && panel_open) - terminal.dismantle(user) + terminal.dismantle(user, I) return //crowbarring it ! diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 68aa7191683..8d2ef8acbd3 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -38,7 +38,7 @@ /obj/machinery/power/apc/can_terminal_dismantle() . = 0 - if(opened && has_electronics != 2) + if(opened) . = 1 /obj/machinery/power/smes/can_terminal_dismantle() @@ -47,7 +47,7 @@ . = 1 -/obj/machinery/power/terminal/proc/dismantle(mob/living/user) +/obj/machinery/power/terminal/proc/dismantle(mob/living/user, obj/item/W) if(isturf(loc)) var/turf/T = loc if(T.intact) @@ -59,7 +59,7 @@ "You begin to cut the cables...") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 50, target = src)) + if(do_after(user, 50/W.toolspeed, target = src)) if(master && master.can_terminal_dismantle()) if(prob(50) && electrocute_mob(user, powernet, src)) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread @@ -73,6 +73,6 @@ /obj/machinery/power/terminal/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/weapon/wirecutters)) - dismantle(user) + dismantle(user, W) else return ..() From 58a6acc9bb959b2e7d4714b7fef5b66b10ac7d29 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Oct 2016 20:34:52 +0000 Subject: [PATCH 05/15] Automatic changelog generation for PR #21241 [ci skip] --- html/changelogs/AutoChangeLog-pr-21241.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-21241.yml diff --git a/html/changelogs/AutoChangeLog-pr-21241.yml b/html/changelogs/AutoChangeLog-pr-21241.yml new file mode 100644 index 00000000000..1bb7ee7c47c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-21241.yml @@ -0,0 +1,8 @@ +author: "Mysak0CZ" +delete-after: True +changes: + - bugfix: "You no longer need to deconstruct emagged (or AI-hacked) APC to fix them, replacing board is sufficient" + - bugfix: "You can no longer unlock AI-hacked APCs" + - bugfix: "Removing APC's and SMES's terminal no longer ignore current tool's speed" + - rscadd: "You can repair APC's cover (only if APC is not compleatly broken) by using APC frame on it" + - rscadd: "closing APC's cover will lock it" From d01b76172d917e5833041136cfb3fdbdddfc50f1 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Sat, 29 Oct 2016 22:05:29 -0700 Subject: [PATCH 06/15] removes species change from Halloween event --- code/modules/events/holiday/halloween.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index db549fea546..35e0c17eae2 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -11,10 +11,6 @@ for(var/mob/living/carbon/human/H in mob_list) var/obj/item/weapon/storage/backpack/b = locate() in H.contents new /obj/item/weapon/storage/spooky(b) - if(prob(50)) - H.set_species(/datum/species/skeleton) - else - H.set_species(/datum/species/zombie) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list) Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian)) From dc87e2b3e124f4455b5fa1de2c33c0e2182254a8 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Sun, 30 Oct 2016 05:18:53 +0000 Subject: [PATCH 07/15] Automatic changelog compile, [ci skip] --- html/changelog.html | 79 +++------------------- html/changelogs/.all_changelog.yml | 9 +++ html/changelogs/AutoChangeLog-pr-21241.yml | 8 --- 3 files changed, 19 insertions(+), 77 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-21241.yml diff --git a/html/changelog.html b/html/changelog.html index 08a6f152118..f86526e5185 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,16 @@ -->
+

30 October 2016

+

Mysak0CZ updated:

+
    +
  • You no longer need to deconstruct emagged (or AI-hacked) APC to fix them, replacing board is sufficient
  • +
  • You can no longer unlock AI-hacked APCs
  • +
  • Removing APC's and SMES's terminal no longer ignore current tool's speed
  • +
  • You can repair APC's cover (only if APC is not compleatly broken) by using APC frame on it
  • +
  • closing APC's cover will lock it
  • +
+

29 October 2016

Chowder McArthor updated:

    @@ -1054,75 +1064,6 @@
    • Highlander has been revamped. Now you can butcher your coworkers in cold blood like never before!
    - -

    28 August 2016

    -

    CoreOverload updated:

    -
      -
    • You can now use sheets from any hand, not just the active one.
    • -
    -

    Iamgoofball updated:

    -
      -
    • Station and Character names are now allowed to be longer.
    • -
    • Gender Reassignment surgery has been removed.
    • -
    -

    Incoming5643 updated:

    -
      -
    • Due to a bad case of "being terrible" the save system for secret satchels has been reworked. All saves are now unified in a single data file: /data/npc_saves/SecretSatchels
    • -
    • Old savefiles such as: /data/npc_saves/SecretSatchels_Box Station can now be safely removed.
    • -
    • A new slime reaction has been found for pink slimes using blood. The potion produced from this reaction can be used to change the gender of living things. Decently useful for animal husbandry, but otherwise mostly just for pranks/"""roleplay"""/enforcing a brutal regime composed entirely of female slime people.
    • -
    -

    Joan updated:

    -
      -
    • Bumping the AI on help intent will no longer cause it and you to swap positions, even if it is unanchored. If unanchored, it will properly push the AI around.
    • -
    • The staff of lava can now turn lava back into basalt.
    • -
    • Placing a singularity or energy ball generator directly in front of an active particle accelerator may be a bad idea.
    • -
    -

    Kor updated:

    -
      -
    • Added Battlemage armour to the spellbook. The armour is heavily shielded, but will not recharge once the shields are depleted.
    • -
    • Added armour runes to the spellbook, which can grant additional charges to the Battlemage armour.
    • -
    -

    MrStonedOne updated:

    -
      -
    • The game window will now flash in the taskbar on incoming admin pm, and to all admins when an admin help comes in.
    • -
    -

    PKPenguin321 updated:

    -
      -
    • The tesla is now much more dangerous, and can cause electronics to explode violently.
    • -
    • It now hurts to get thrown into another person.
    • -
    -

    Shadowlight213 updated:

    -
      -
    • The radiation storm random event will automatically enable and disable emergency maint.
    • -
    • The radiation storm random event is now a weather type that affects the station.
    • -
    • The security temperature gun now has a firing pin making it 0.0000001% more useful!
    • -
    • Added config option to use byond account creation age for job limits.
    • -
    -

    WJohnston updated:

    -
      -
    • Lavaland lava probably sorta looks better I guess.
    • -
    -

    Yackemflam updated:

    -
      -
    • Sniper kit have been given as a syndicate bundle set. Be warned though, they are not as equipped as the nuclear agent kits.
    • -
    -

    kilkun updated:

    -
      -
    • Adds a shielded deathsquad hardsuit. it has four charges and recharges after 15 seconds of not being shot (compared to the syndicate 3 charges and 20 second recharge rate)
    • -
    • All death commandos now spawn with this new hardsuit. The previous hardsuit was not removed.
    • -
    -

    pubby updated:

    -
      -
    • Mining scanner module to standard borgs
    • -
    • Sheet snatcher module from standard borgs
    • -
    -

    xxalpha updated:

    -
      -
    • Cigarette packs, donut boxes, egg boxes can now be closed and opened with Ctrl+Click.
    • -
    • Lighters are now represented in cigarette packs with a sprite of their own.
    • -
    • You can now remove a lighter from a cigarette pack quickly with Alt+Click.
    • -
    • Reduced the amount of cigars that cigar cases can hold to 5 because the cigar case sprite doesn't support more than that.
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 8f4a92663e3..2aa7d7cfc30 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -7682,3 +7682,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. ma44: - rscadd: You can now solidify liquid gold into sheets of gold with frostoil and a very little amount of iron +2016-10-30: + Mysak0CZ: + - bugfix: You no longer need to deconstruct emagged (or AI-hacked) APC to fix them, + replacing board is sufficient + - bugfix: You can no longer unlock AI-hacked APCs + - bugfix: Removing APC's and SMES's terminal no longer ignore current tool's speed + - rscadd: You can repair APC's cover (only if APC is not compleatly broken) by using + APC frame on it + - rscadd: closing APC's cover will lock it diff --git a/html/changelogs/AutoChangeLog-pr-21241.yml b/html/changelogs/AutoChangeLog-pr-21241.yml deleted file mode 100644 index 1bb7ee7c47c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-21241.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Mysak0CZ" -delete-after: True -changes: - - bugfix: "You no longer need to deconstruct emagged (or AI-hacked) APC to fix them, replacing board is sufficient" - - bugfix: "You can no longer unlock AI-hacked APCs" - - bugfix: "Removing APC's and SMES's terminal no longer ignore current tool's speed" - - rscadd: "You can repair APC's cover (only if APC is not compleatly broken) by using APC frame on it" - - rscadd: "closing APC's cover will lock it" From 3d3fef9998cc02a4fcd14847a5e6588ba1079f37 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Sat, 29 Oct 2016 22:29:45 -0700 Subject: [PATCH 08/15] changes so only humans and lizards --- code/modules/events/holiday/halloween.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index 35e0c17eae2..c0143fe5ee6 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -11,6 +11,11 @@ for(var/mob/living/carbon/human/H in mob_list) var/obj/item/weapon/storage/backpack/b = locate() in H.contents new /obj/item/weapon/storage/spooky(b) + if(ishuman(H) || islizard(H)) + if(prob(50)) + H.set_species(/datum/species/skeleton) + else + H.set_species(/datum/species/zombie) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list) Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian)) From 2966abffb0f697ddcece107ad8b14eac93ce7a3f Mon Sep 17 00:00:00 2001 From: ExcessiveUseOfCobblestone Date: Sun, 30 Oct 2016 01:54:53 -0400 Subject: [PATCH 09/15] moves speedmod to infectious zambies only --- code/modules/mob/living/carbon/human/species_types.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index faeda3530d7..394754809c9 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -674,12 +674,12 @@ meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT, TOXINLOVER) mutant_organs = list(/obj/item/organ/tongue/zombie) - speedmod = 2 /datum/species/zombie/infectious name = "Infectious Zombie" no_equip = list(slot_wear_mask, slot_head) armor = 20 // 120 damage to KO a zombie, which kills it + speedmod = 2 /datum/species/zombie/infectious/spec_life(mob/living/carbon/C) . = ..() From e7d0db78f1a2a955af28816d64e8bc48e55f9030 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 30 Oct 2016 02:51:19 -0400 Subject: [PATCH 10/15] The creepy clown epidemic has arrived at Space Station 13. (#21164) * Implements a full spooky clown event for halloween.dm * temp * made requested fixes * reeeee * Clowns actually work now. Minor refactors to hallucination thanks oranges * CLOWNS FINALLY WORK PROPERLY JESUS FUCK * Fix incorrect prob method call --- code/modules/events/holiday/halloween.dm | 44 ++++++++++++++++++++++++ code/modules/flufftext/Hallucination.dm | 17 +++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index c0143fe5ee6..8930c93bf5f 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -54,6 +54,50 @@ if(IsMultiple(activeFor, 4)) spawn_meteors(3, meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm +//Creepy clown invasion +/datum/round_event_control/creepy_clowns + name = "Clowns" + typepath = /datum/round_event/creepy_clowns + holidayID = HALLOWEEN + weight = 20 + earliest_start = 0 + +/datum/round_event/creepy_clowns + endWhen = 40 + +/datum/round_event/creepy_clowns/start() + for(var/mob/living/carbon/human/H in living_mob_list) + if(!H.client || !istype(H)) + return + H << "Honk..." + H << 'sound/spookoween/scary_clown_appear.ogg' + var/turf/T = get_turf(H) + if(T) + new /obj/effect/hallucination/simple/clown(T, H, 50) + +/datum/round_event/creepy_clowns/tick() + if(IsMultiple(activeFor, 4)) + for(var/mob/living/carbon/human/H in living_mob_list) + if (prob(66)) + playsound(H.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 100, 1) + if (prob(33)) + var/turf/T = get_turf(H) + if(T) + new /obj/effect/hallucination/simple/clown(T, H, 25) + else if (prob(25)) + var/turf/T = get_turf(H) + if(T) + new /obj/effect/hallucination/simple/clown/scary(T, H, 25) + else if (prob(5)) + var/turf/T = get_turf(H) + if(T) + spawn_atom_to_turf(/obj/effect/mob_spawn/human/corpse/clown, H, 1) + else if (prob(1)) + spawn_atom_to_turf(/mob/living/simple_animal/hostile/retaliate/clown, H, 1) + +/datum/round_event/creepy_clowns/announce() + priority_announce("Honk... Honk... honk... HONK! HONK! HONKHONKHONKHONKHONK", "HONK!", 'sound/spookoween/scary_horn.ogg') + //spooky foods (you can't actually make these when it's not halloween) /obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull name = "skull cookie" diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index c14da947741..cdcb8983ef1 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -206,6 +206,18 @@ Gunshots/explosions/opening doors/less rare audio (done) target << "[xeno_name] scrambles into the ventilation ducts!" qdel(src) +/obj/effect/hallucination/simple/clown + image_icon = 'icons/mob/animal.dmi' + image_state = "clown" + +/obj/effect/hallucination/simple/clown/New(loc,var/mob/living/carbon/T,duration) + ..(loc, T) + name = pick(clown_names) + QDEL_IN(src,duration) + +/obj/effect/hallucination/simple/clown/scary + image_state = "scary_clown" + /obj/effect/hallucination/singularity_scare //Singularity moving towards you. //todo Hide where it moved with fake space images @@ -303,11 +315,12 @@ Gunshots/explosions/opening doors/less rare audio (done) if(target.client) delusions |= A target.client.images |= A - sleep(duration) + QDEL_IN(src, duration) + +/obj/effect/hallucination/delusion/Destroy() for(var/image/I in delusions) if(target.client) target.client.images.Remove(I) - qdel(src) /obj/effect/hallucination/fakeattacker/New(loc,var/mob/living/carbon/T) target = T From 4dfd96b67ba24887ced8d3f30b9c17162047c5aa Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 30 Oct 2016 06:51:20 +0000 Subject: [PATCH 11/15] Automatic changelog generation for PR #21164 [ci skip] --- html/changelogs/AutoChangeLog-pr-21164.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-21164.yml diff --git a/html/changelogs/AutoChangeLog-pr-21164.yml b/html/changelogs/AutoChangeLog-pr-21164.yml new file mode 100644 index 00000000000..cb9e390f869 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-21164.yml @@ -0,0 +1,5 @@ +author: "bgobandit" +delete-after: True +changes: + - rscadd: "The creepy clown epidemic has arrived at Space Station 13." + - rscadd: "Honk." From ef38656c470fff0282f2153e40aae45f77021de5 Mon Sep 17 00:00:00 2001 From: oranges Date: Mon, 31 Oct 2016 01:41:54 +1300 Subject: [PATCH 12/15] Tweak Duplicate object proc (#21069) Better typepathing and doesnt try to update_icon on things that don't have an update_icon proc defined Also adds a holoitem flag so admin area copy doesn't make objects immune to lava fire and acid --- code/modules/holodeck/area_copy.dm | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index d2e4a1d05b2..653aac2f9b3 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -1,7 +1,7 @@ -/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0, var/atom/newloc = null, var/nerf = 0) +/proc/DuplicateObject(var/atom/original, var/perfectcopy = TRUE, var/sameloc = FALSE, var/atom/newloc = null, var/nerf = FALSE, var/holoitem=FALSE) if(!original) return null - var/obj/O + var/atom/O if(sameloc) O = new original.type(original.loc) @@ -20,15 +20,19 @@ else O.vars[V] = original.vars[V] - if(istype(O)) - O.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF // holoitems do not burn + if(istype(O, /obj)) + var/obj/N = O + if(holoitem) + N.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF // holoitems do not burn + if(nerf && istype(O,/obj/item)) var/obj/item/I = O I.damtype = STAMINA // thou shalt not + + N.update_icon() if(istype(O,/obj/machinery)) var/obj/machinery/M = O M.power_change() - O.update_icon() return O @@ -89,13 +93,13 @@ X.icon_state = old_icon_state1 for(var/obj/O in T) - var/obj/O2 = DuplicateObject(O , 1, newloc = X, nerf=nerf_weapons) + var/obj/O2 = DuplicateObject(O , perfect_copy=TRUE, newloc = X, nerf=nerf_weapons, holoitem=TRUE) if(!O2) continue copiedobjs += O2.GetAllContents() for(var/mob/M in T) if(istype(M, /mob/camera)) continue // If we need to check for more mobs, I'll add a variable - var/mob/SM = DuplicateObject(M , 1, newloc = X) + var/mob/SM = DuplicateObject(M , perfect_copy=TRUE, newloc = X, holoitem=TRUE) copiedobjs += SM.GetAllContents() var/global/list/forbidden_vars = list("type","stat","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity") From be516683af29309ae452351a2586094a2f4cc85c Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Sun, 30 Oct 2016 14:18:10 +0000 Subject: [PATCH 13/15] Automatic changelog compile, [ci skip] --- html/changelog.html | 5 +++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-21164.yml | 5 ----- 3 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-21164.yml diff --git a/html/changelog.html b/html/changelog.html index f86526e5185..fd835643218 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -64,6 +64,11 @@
  • You can repair APC's cover (only if APC is not compleatly broken) by using APC frame on it
  • closing APC's cover will lock it
  • +

    bgobandit updated:

    +
      +
    • The creepy clown epidemic has arrived at Space Station 13.
    • +
    • Honk.
    • +

    29 October 2016

    Chowder McArthor updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 2aa7d7cfc30..3c87b5cbb0f 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -7691,3 +7691,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: You can repair APC's cover (only if APC is not compleatly broken) by using APC frame on it - rscadd: closing APC's cover will lock it + bgobandit: + - rscadd: The creepy clown epidemic has arrived at Space Station 13. + - rscadd: Honk. diff --git a/html/changelogs/AutoChangeLog-pr-21164.yml b/html/changelogs/AutoChangeLog-pr-21164.yml deleted file mode 100644 index cb9e390f869..00000000000 --- a/html/changelogs/AutoChangeLog-pr-21164.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "bgobandit" -delete-after: True -changes: - - rscadd: "The creepy clown epidemic has arrived at Space Station 13." - - rscadd: "Honk." From 6b930dccaae5e2cb15d8f4e611ab4fa93f449de0 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Sun, 30 Oct 2016 11:20:03 -0400 Subject: [PATCH 14/15] Improves the Clockwork Slab's Recollection (#21242) * Improves the Clockwork Slab's Recollection * efficiency! * classesssss * are the right hands your hands? find out today! * clapping * -n * a bugfix --- .../clock_cult/clock_items/clockwork_slab.dm | 144 +++++++++++++----- .../scripture_applications.dm | 2 +- .../clock_scriptures/scripture_drivers.dm | 1 + .../clock_scriptures/scripture_judgement.dm | 4 +- .../clock_scriptures/scripture_scripts.dm | 10 +- .../clock_structures/interdiction_lens.dm | 1 + .../clock_structures/tinkerers_daemon.dm | 1 + 7 files changed, 115 insertions(+), 48 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index b2358e79dc7..a1236afccf5 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -11,6 +11,8 @@ var/no_cost = FALSE //If the slab is admin-only and needs no components and has no scripture locks var/nonhuman_usable = FALSE //if the slab can be used by nonhumans, defaults to off var/produces_components = TRUE //if it produces components at all + var/list/shown_scripture = list(SCRIPTURE_DRIVER = FALSE, SCRIPTURE_SCRIPT = FALSE, SCRIPTURE_APPLICATION = FALSE, SCRIPTURE_REVENANT = FALSE, SCRIPTURE_JUDGEMENT = FALSE) + var/text_hidden = FALSE var/obj/effect/proc_holder/slab/slab_ability //the slab's current bound ability, for certain scripture actions_types = list(/datum/action/item_action/clock/hierophant, /datum/action/item_action/clock/guvax, /datum/action/item_action/clock/vanguard) @@ -219,7 +221,8 @@ return recite_scripture(user) if("Recollection") - show_guide(user) + user.set_machine(src) + interact(user) if("Cancel") return return 1 @@ -261,7 +264,7 @@ return 1 //Guide to Serving Ratvar -/obj/item/clockwork/slab/proc/show_guide(mob/living/user) +/obj/item/clockwork/slab/interact(mob/living/user) var/text = "If you're seeing this, file a bug report." if(ratvar_awakens) text = "" @@ -269,56 +272,98 @@ text += "HONOR RATVAR " text += "" else - text = "
    Chetr nyy hagehguf-naq-ubabe Ratvar.


    \ + + text = "
    Chetr nyy hagehguf-naq-ubabe Ratvar.

    \ \ - First and foremost, you serve Ratvar, the Clockwork Justiciar, in any ways he sees fit. This is with no regard to your personal well-being, and you would do well to think of the larger \ - scale of things than your life. Through foul and unholy magics was the Celestial Derelict formed, and fouler still those which trapped your master within it for all eternity. The Justiciar \ - wishes retribution upon those who performed this terrible act upon him - the Nar-Sian cultists - and you are to help him obtain it.

    \ - \ - This is not a trivial task. Due to the nature of his prison, Ratvar is incapable of directly influencing the mortal plane. There is, however, a workaround - links between the perceptible \ - universe and Reebe (the Celestial Derelict) can be created and utilized. This is typically done via the creation of a slab akin to the one you are holding right now. The slabs tap into the \ - tidal flow of energy and information keeping Reebe sealed and presents it as meaningless images to preserve sanity. This slab can utilize the power in many different ways.

    \ - \ - This is done through Components - pieces of the Justiciar's body that have since fallen off in the countless years since his imprisonment. Ratvar's unfortunate condition results \ - in the fragmentation of his body. These components still house great power on their own, and can slowly be drawn from Reebe by links capable of doing so.
    \ - The most basic of these links lies in the clockwork slab, which will slowly generate components over time - one component of a random type is produced every 1 minute and 30 seconds, plus 30 seconds per each servant above 5, \ - which is obviously inefficient. There are other, more efficient, ways to create these components through scripture and certain structures.

    \ - \ - In addition to their ability to generate components, slabs also possess other functionalities...

    \ - \ - The first functionality of the slab is Recital. This allows you to consume components either from your slab or from the global cache (more on that in the scripture list) to perform \ - effects usually considered magical in nature.
    \ - Effects vary considerably, including mass conversion, construction of various structures, or causing a massive global hallucination. Nevertheless, scripture is extremely important to a successful takeover.

    \ - \ - The second functionality of the clockwork slab is Recollection, which will display this guide.

    \ - \ - The third to fifth functionalities are several buttons in the top left while holding the slab, from left to right, they are:
    \ - Hierophant Network, which allows communication to other servants.
    \ - Guvax, which simply allows you to quickly invoke the Guvax scripture.
    \ - Vanguard, which, like Guvax, simply allows you to quickly invoke the Vanguard scripture.

    \ - \ - Examine the slab for component amount information.

    \ - \ - A complete list of scripture, its effects, and its requirements can be found below.
    \ +
    [text_hidden ? "Show":"Hide"] Information

    " + if(!text_hidden) + var/servants = 0 + var/production_time = SLAB_PRODUCTION_TIME + for(var/mob/living/M in living_mob_list) + if(is_servant_of_ratvar(M) && (ishuman(M) || issilicon(M))) + servants++ + if(servants > 5) + servants -= 5 + production_time += min(SLAB_SERVANT_SLOWDOWN * servants, SLAB_SLOWDOWN_MAXIMUM) + var/production_text_addon = "" + if(production_time != SLAB_PRODUCTION_TIME+SLAB_SLOWDOWN_MAXIMUM) + production_text_addon = ", which increases for each human or silicon servant above 5" + production_time = production_time/600 + var/production_text = "[round(production_time)] minute\s" + if(production_time != round(production_time)) + production_time -= round(production_time) + production_time *= 60 + production_text += " and [round(production_time, 1)] second\s" + production_text += "" + production_text += production_text_addon + + text += "First and foremost, you serve Ratvar, the Clockwork Justicar, in any ways he sees fit. This is with no regard to your personal well-being, and you would do well to think of the larger \ + scale of things than your life. Ratvar wishes retribution upon those that trapped him in Reebe - the Nar-Sian cultists - and you are to help him obtain it.

    \ + \ + Ratvar, being trapped in Reebe, the Celestial Derelict, cannot directly affect the mortal plane. However, links, such as this Clockwork Slab, can be created to draw \ + Components, fragments of the Justicar, from Reebe, and those Components can be used to draw power and material from Reebe through arcane chants \ + known as Scripture.

    \ + \ + One component of a random type is produced in this slab every [production_text].
    \ + Components are stored either within slabs, where they can only be accessed by that slab, or in the Global Cache accessed by Tinkerer's Caches, which all slabs \ + can draw from to recite scripture.
    \ + There are five types of component, and in general, Belligerent Eyes are aggressive and judgemental, Vanguard Cogwheels are defensive and \ + repairing, Guvax Capacitors are for conversion and control, Replicant Alloy is for construction and fuel, and \ + Hierophant Ansibles are for transmission and power, though in combination their effects become more nuanced.

    \ + \ + There are also five tiers of Scripture; [SCRIPTURE_DRIVER], [SCRIPTURE_SCRIPT], [SCRIPTURE_APPLICATION], [SCRIPTURE_REVENANT], and [SCRIPTURE_JUDGEMENT].
    \ + Each tier has additional requirements, including Servants, Tinkerer's Caches, and Construction Value(CV). Construction Value is gained by creating structures or converting the \ + station, and everything too large to hold will grant some amount of it.

    \ + \ + This would be a massive amount of information to try and keep track of, but all Servants have the Global Records alert, which appears in the top right.
    \ + Mousing over that alert will display Servants, Caches, CV, and other information, such as the tiers of scripture that are unlocked.

    \ + \ + On that note, Scripture is recited through Recital, the first and most important function of the slab.
    \ + All scripture requires some amount of Components to recite, and only the weakest scripture does not consume any components when recited.
    \ + However, weak is relative when it comes to scripture; even the 'weakest' could be enough to dominate a station in the hands of cunning Servants, and higher tiers of scripture are even \ + stronger in the right hands.

    \ + \ + Some effects of scripture include granting the invoker a temporary complete immunity to stuns, summoning a turret that can attack anything that sets eyes on it, binding a powerful guardian \ + to the invoker, or even, at one of the highest tiers, granting all nearby Servants temporary invulnerability.
    \ + However, the most important scripture is Guvax, which allows you to convert heathens with relative ease.

    \ + \ + The second function of the clockwork slab is Recollection, which will display this guide.

    \ + \ + The third to fifth functions are three buttons in the top left while holding the slab.
    From left to right, they are:
    \ + Hierophant Network, which allows communication to other Servants.
    \ + Guvax, which simply allows you to quickly invoke the Guvax Driver.
    \ + Vanguard, which, like the Guvax button, simply allows you to quickly invoke the Vanguard Driver.

    \ + \ + Examine the slab to check the number of components it has available.

    \ + \ +
    Hide Above Information

    " + + text += "A complete list of scripture, its effects, and its requirements can be found below.
    \ Key:
    BE = Belligerent Eyes
    \ VC = Vanguard Cogwheels
    \ GC = Guvax Capacitors
    \ RA = Replicant Alloy
    \ HA = Hierophant Ansibles
    " var/text_to_add = "" - var/drivers = "
    [SCRIPTURE_DRIVER]
    These scriptures are always unlocked.
    " - var/scripts = "
    [SCRIPTURE_SCRIPT]
    These scriptures require at least five servants and a tinkerer's cache.
    " - var/applications = "
    [SCRIPTURE_APPLICATION]
    These scriptures require at least eight servants, three tinkerer's caches, and 100CV.
    " - var/revenant = "
    [SCRIPTURE_REVENANT]
    These scriptures require at least ten servants and 200CV.
    " - var/judgement = "
    [SCRIPTURE_JUDGEMENT]
    These scriptures require at least twelve servants and 300CV. In addition, there may not be any active non-servant AIs.
    " + var/drivers = "
    [SCRIPTURE_DRIVER]
    These scriptures are always unlocked.
    " + var/scripts = "
    [SCRIPTURE_SCRIPT]
    These scriptures require at least 5 Servants and \ + 1 Tinkerer's Cache.
    " + var/applications = "
    [SCRIPTURE_APPLICATION]
    These scriptures require at least 8 Servants, \ + 3 Tinkerer's Caches, and 100CV.
    " + var/revenant = "
    [SCRIPTURE_REVENANT]
    These scriptures require at least 10 Servants, \ + 4 Tinkerer's Caches, and 200CV.
    " + var/judgement = "
    [SCRIPTURE_JUDGEMENT]
    This scripture requires at least 12 Servants, \ + 5 Tinkerer's Caches, and 300CV.
    In addition, there may not be any active non-Servant AIs.

    " for(var/V in sortList(subtypesof(/datum/clockwork_scripture), /proc/cmp_clockscripture_priority)) var/datum/clockwork_scripture/S = V - if(initial(S.tier) != SCRIPTURE_PERIPHERAL) + var/initial_tier = initial(S.tier) + if(initial_tier != SCRIPTURE_PERIPHERAL && shown_scripture[initial_tier]) var/datum/clockwork_scripture/S2 = new V var/list/req_comps = S2.required_components var/list/cons_comps = S2.consumed_components qdel(S2) - var/scripture_text = "
    [initial(S.name)]:
    [initial(S.desc)]
    Invocation Time: [initial(S.channel_time) / 10] seconds
    \ + var/scripture_text = "
    [initial(S.name)]:
    [initial(S.desc)]
    Invocation Time: [initial(S.channel_time) / 10] second\s
    \ + [initial(S.invokers_required) > 1 ? "Invokers Required: [initial(S.invokers_required)]
    ":""]\ Component Requirement: \ [req_comps["belligerent_eye"] ? "[req_comps["belligerent_eye"]] BE" : ""] \ [req_comps["vanguard_cogwheel"] ? "[req_comps["vanguard_cogwheel"]] VC" : ""] \ @@ -335,7 +380,7 @@ [cons_comps["hierophant_ansible"] ? "[cons_comps["hierophant_ansible"]] HA" : ""]
    " break //we want this to only show up if the scripture has a cost of some sort scripture_text += "Tip: [initial(S.usage_tip)]
    " - switch(initial(S.tier)) + switch(initial_tier) if(SCRIPTURE_DRIVER) drivers += scripture_text if(SCRIPTURE_SCRIPT) @@ -353,3 +398,22 @@ popup.set_content(text) popup.open() return 1 + +/obj/item/clockwork/slab/Topic(href, href_list) + . = ..() + if(.) + return . + + if(!usr || !src || !(src in usr) || usr.incapacitated()) + if(usr && usr.machine == src) + usr.unset_machine() + return 0 + + if(href_list["hidetext"]) + text_hidden = !text_hidden + + for(var/i in shown_scripture) + if(href_list[i]) + shown_scripture[i] = !shown_scripture[i] + + interact(usr) diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm index d7993e1f68a..755f3578b24 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -159,7 +159,7 @@ observer_message = "A brass totem rises from the ground, a purple gem appearing in its center!" invokers_required = 2 multiple_invokers_used = TRUE - usage_tip = "If it fails to funnel power into a nearby Sigil of Transmission and fails to disable even one thing, it will disable itself for two minutes." + usage_tip = "If it fails to funnel power into a nearby Sigil of Transmission or the area's APC and fails to disable even one thing, it will disable itself for two minutes." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE sort_priority = 6 diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index e76712f992e..c93052a72dd 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -10,6 +10,7 @@ chant_invocations = list("Punish their blindness!", "Take time, make slow!") chant_amount = 15 chant_interval = 20 + channel_time = 20 required_components = list("belligerent_eye" = 1) usage_tip = "Useful for crowd control in a populated area and disrupting mass movement." tier = SCRIPTURE_DRIVER diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm index eca17084448..3356a4e2d41 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm @@ -6,8 +6,8 @@ /datum/clockwork_scripture/ark_of_the_clockwork_justiciar descname = "Win Condition" name = "Ark of the Clockwork Justiciar" - desc = "Pulls from the power of all of Ratvar's servants and generals to construct a massive machine used to tear apart a rift in spacetime to the Celestial Derelict. This gateway will \ - call forth Ratvar from his exile after some time." + desc = "Pulls from the power of all of Ratvar's servants and generals to construct a massive machine used to tear apart a rift in spacetime to Reebe, the Celestial Derelict.\n\ + This gateway will either call forth Ratvar from his exile if that is the task he has set you, or proselytize the entire station if it is not." invocations = list("ARMORER! FRIGHT! AMPERAGE! VANGUARD! I CALL UPON YOU!!", \ "THE TIME HAS COME FOR OUR MASTER TO BREAK THE CHAINS OF EXILE!!", \ "LEND US YOUR AID! ENGINE COMES!!") diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm index 21a198739d5..c73db11e929 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm @@ -14,7 +14,7 @@ object_path = /obj/structure/destructible/clockwork/ocular_warden creator_message = "You form an ocular warden, which will focus its searing gaze upon nearby unenlightened." observer_message = "A brass eye takes shape and slowly rises into the air, its red iris glaring!" - usage_tip = "Although powerful, the warden is very weak and should optimally be placed behind barricades." + usage_tip = "Although powerful, the warden is very fragile and should optimally be placed behind barricades." tier = SCRIPTURE_SCRIPT one_per_tile = TRUE space_allowed = TRUE @@ -51,7 +51,7 @@ desc = "Equips the invoker and any nearby servants with Ratvarian armor. This armor provides high melee resistance but a weakness to lasers. \ It grows faster to invoke with more nearby servants." invocations = list("Shield me...", "...with the...", "... fragments of Engine!") - channel_time = 110 //effectively 100 because it counts the invoker + channel_time = 100 required_components = list("vanguard_cogwheel" = 2, "replicant_alloy" = 1) consumed_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) usage_tip = "Before using, advise adjacent allies to remove their helmets, external suits, gloves, and shoes." @@ -61,7 +61,7 @@ sort_priority = 4 /datum/clockwork_scripture/fellowship_armory/run_scripture() - for(var/mob/living/L in range(1, invoker)) + for(var/mob/living/L in orange(1, invoker)) if(is_servant_of_ratvar(L) && L.can_speak_vocal()) channel_time = max(channel_time - 10, 0) return ..() @@ -109,7 +109,7 @@ whispered = TRUE object_path = /obj/item/device/mmi/posibrain/soul_vessel creator_message = "You form a soul vessel, which can be used in-hand to attract spirits, or used on an unconscious or dead human to extract their consciousness." - usage_tip = "The vessel can be used as a teleport target for Spatial Gateway, though it is generally better-used by placing it in a shell." + usage_tip = "The vessel can be used as a teleport target for Spatial Gateway, though it is generally better-used by placing it in a shell or cyborg body." tier = SCRIPTURE_SCRIPT space_allowed = TRUE sort_priority = 6 @@ -127,7 +127,7 @@ whispered = TRUE object_path = /obj/item/clockwork/clockwork_proselytizer/preloaded creator_message = "You form a clockwork proselytizer, which is already pre-loaded with a small amount of replicant alloy." - usage_tip = "Clockwork walls cause adjacent tinkerer's caches to generate components passively, making them a vital tool. Clockwork floors heal servants standing on them." + usage_tip = "Clockwork Walls cause adjacent tinkerer's caches to generate components passively, making them a vital tool. Clockwork Floors heal toxin damage in servants standing on them." tier = SCRIPTURE_SCRIPT space_allowed = TRUE sort_priority = 7 diff --git a/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm b/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm index e2f161b7122..1c0cac1267f 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm @@ -36,6 +36,7 @@ toggle(0, user) /obj/structure/destructible/clockwork/powered/interdiction_lens/process() + . = ..() if(recharging > world.time) return if(disabled) diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm index e15cf9eb1dd..503da4aa3ec 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm @@ -8,6 +8,7 @@ inactive_icon = "tinkerers_daemon" max_integrity = 100 obj_integrity = 100 + construction_value = 25 break_message = "The daemon shatters into millions of pieces!" debris = list(/obj/item/clockwork/alloy_shards/large = 2, \ /obj/item/clockwork/alloy_shards/medium = 4, \ From 235d8d8831611721432e9c19411402a456fdfdb4 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 30 Oct 2016 15:20:06 +0000 Subject: [PATCH 15/15] Automatic changelog generation for PR #21242 [ci skip] --- html/changelogs/AutoChangeLog-pr-21242.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-21242.yml diff --git a/html/changelogs/AutoChangeLog-pr-21242.yml b/html/changelogs/AutoChangeLog-pr-21242.yml new file mode 100644 index 00000000000..82f85d81c1c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-21242.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "The Recollection option in the Clockwork Slab has been significantly improved, with a better information to fluff ratio, and the ability to toggle which tiers of scripture that are visible in Recollection."