From 64abde83eb3cf4a86fdccda12426a616d8477181 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 12 Mar 2018 07:01:54 -0500 Subject: [PATCH] [MIRROR] Cult Fixes and Minor Balance Tweaks (#5913) * Cult Fixes and Minor Balance Tweaks (#36092) * Fixes and Balance Tweaks * Faster deconversions * Shade nerf * Cult Fixes and Minor Balance Tweaks --- code/game/gamemodes/cult/cult.dm | 6 ++--- code/game/machinery/doors/airlock_types.dm | 15 ++++++++++- .../game/turfs/simulated/floor/reinf_floor.dm | 1 + code/modules/antagonists/cult/blood_magic.dm | 25 ++++++++--------- code/modules/antagonists/cult/runes.dm | 27 ++++--------------- .../modules/mob/living/simple_animal/shade.dm | 7 +++-- .../chemistry/reagents/other_reagents.dm | 11 +++++--- 7 files changed, 47 insertions(+), 45 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index d343bb35ab..2affa9ee2c 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -26,8 +26,8 @@ return FALSE else return FALSE - if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M)) - return FALSE //can't convert machines, shielded, or ratvar's dogs + if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M) || !M.client) + return FALSE //can't convert machines, shielded, braindead, or ratvar's dogs return TRUE /datum/game_mode/cult @@ -80,7 +80,7 @@ cultist.special_role = ROLE_CULTIST cultist.restricted_roles = restricted_jobs log_game("[cultist.key] (ckey) has been selected as a cultist") - + return (cultists_to_cult.len>=required_enemies) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index f6d80bca49..28fdded5d1 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -418,6 +418,19 @@ /obj/machinery/door/airlock/cult/canAIControl(mob/user) return (iscultist(user) && !isAllPowerCut()) +/obj/machinery/door/airlock/cult/obj_break(damage_flag) + if(!(flags_1 & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) + stat |= BROKEN + if(!panel_open) + panel_open = TRUE + update_icon() + +/obj/machinery/door/airlock/cult/isElectrified() + return FALSE + +/obj/machinery/door/airlock/cult/hasPower() + return TRUE + /obj/machinery/door/airlock/cult/allowed(mob/living/L) if(!density) return 1 @@ -487,7 +500,7 @@ /obj/machinery/door/airlock/cult/weak name = "brittle cult airlock" desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state." - normal_integrity = 180 + normal_integrity = 150 damage_deflection = 5 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 71887fa08e..9c2495f858 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -114,6 +114,7 @@ desc = "The air hangs heavy over this sinister flooring." icon_state = "plating" CanAtmosPass = ATMOS_PASS_NO + floor_tile = null var/obj/effect/clockwork/overlay/floor/bloodcult/realappearance diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 36bd8fb826..acf516259f 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -72,10 +72,10 @@ else to_chat(owner, "You are already invoking blood magic!") return - if(do_after(owner, 100 - rune*65, target = owner)) + if(do_after(owner, 100 - rune*60, target = owner)) if(ishuman(owner)) var/mob/living/carbon/human/H = owner - H.bleed(30 - rune*25) + H.bleed(40 - rune*32) var/datum/action/innate/cult/blood_spell/new_spell = new BS(owner) new_spell.Grant(owner, src) spells += new_spell @@ -177,6 +177,7 @@ desc = "A sinister spell used to convert:
Plasteel into runed metal
25 metal into a construct shell
Cyborgs directly into constructs
Cyborg shells into construct shells
Airlocks into runed airlocks (harm intent)" button_icon_state = "transmute" magic_path = "/obj/item/melee/blood_magic/construction" + health_cost = 10 /datum/action/innate/cult/blood_spell/equipment name = "Summon Equipment" @@ -414,7 +415,7 @@ target.visible_message("[L]'s holy weapon absorbs the light!", \ "Your holy weapon absorbs the blinding light!") else - L.Knockdown(180) + L.Knockdown(160) L.flash_act(1,1) if(issilicon(target)) var/mob/living/silicon/S = L @@ -733,11 +734,11 @@ to_chat(user, "You decide against conducting a greater blood rite.") return switch(choice) - if("Blood Spear (200)") - if(uses < 200) + if("Blood Spear (150)") + if(uses < 150) to_chat(user, "You need 200 charges to perform this rite.") else - uses -= 200 + uses -= 150 var/turf/T = get_turf(user) qdel(src) var/datum/action/innate/cult/spear/S = new(user) @@ -749,24 +750,24 @@ else user.visible_message("A [rite.name] appears at [user]'s feet!", \ "A [rite.name] materializes at your feet.") - if("Blood Bolt Barrage (400)") - if(uses < 400) + if("Blood Bolt Barrage (300)") + if(uses < 300) to_chat(user, "You need 400 charges to perform this rite.") else var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood() - uses -= 400 + uses -= 300 qdel(src) if(user.put_in_hands(rite)) to_chat(user, "Your hands glow with power!") else to_chat(user, "You need a free hand for this rite!") qdel(rite) - if("Blood Beam (600)") - if(uses < 600) + if("Blood Beam (500)") + if(uses < 500) to_chat(user, "You need 600 charges to perform this rite.") else var/obj/rite = new /obj/item/blood_beam() - uses -= 600 + uses -= 500 qdel(src) if(user.put_in_hands(rite)) to_chat(user, "Your hands glow with POWER OVERWHELMING!!!") diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 14787fb30e..eacf4fb518 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -32,8 +32,6 @@ Runes can either be invoked by one's self or with many different cultists. Each var/scribe_delay = 40 //how long the rune takes to create var/scribe_damage = 0.1 //how much damage you take doing it - - var/allow_excess_invokers = FALSE //if we allow excess invokers when being invoked var/invoke_damage = 0 //how much damage invokers take when invoking it var/construct_invoke = TRUE //if constructs can invoke it @@ -109,12 +107,9 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/proc/can_invoke(var/mob/living/user=null) //This proc determines if the rune can be invoked at the time. If there are multiple required cultists, it will find all nearby cultists. var/list/invokers = list() //people eligible to invoke the rune - var/list/chanters = list() //people who will actually chant the rune when passed to invoke() if(user) - chanters += user invokers += user - - if(req_cultists > 1 || allow_excess_invokers) + if(req_cultists > 1 || istype(src, /obj/effect/rune/convert)) var/list/things_in_range = range(1, src) var/obj/item/toy/plush/narplush/plushsie = locate() in things_in_range if(istype(plushsie) && plushsie.is_invoker) @@ -130,17 +125,7 @@ structure_check() searches for nearby cultist structures required for the invoca if(L.stat) continue invokers += L - if(allow_excess_invokers) - chanters += invokers - else - shuffle_inplace(invokers) - for(var/i in 1 to req_cultists) - var/C = pick_n_take(invokers) - if(!C) - break - if(C != user) - chanters += C - return chanters + return invokers /obj/effect/rune/proc/invoke(var/list/invokers) //This proc contains the effects of the rune as well as things that happen afterwards. If you want it to spawn an object and then delete itself, have both here. @@ -160,9 +145,9 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/proc/do_invoke_glow() set waitfor = FALSE var/oldtransform = transform - animate(src, transform = matrix()*2, alpha = 0, time = 5) //fade out + animate(src, transform = matrix()*2, alpha = 0, time = 5, flags = ANIMATION_END_NOW) //fade out sleep(5) - animate(src, transform = oldtransform, alpha = 255, time = 0) + animate(src, transform = oldtransform, alpha = 255, time = 0, flags = ANIMATION_END_NOW) /obj/effect/rune/proc/fail_invoke() //This proc contains the effects of a rune if it is not invoked correctly, through either invalid wording or not enough cultists. By default, it's just a basic fizzle. @@ -197,7 +182,6 @@ structure_check() searches for nearby cultist structures required for the invoca icon_state = "3" color = RUNE_COLOR_OFFER req_cultists = 1 - allow_excess_invokers = TRUE rune_in_use = FALSE /obj/effect/rune/convert/do_invoke_glow() @@ -247,7 +231,7 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers) if(invokers.len < 2) for(var/M in invokers) - to_chat(M, "You need more invokers to convert [convertee]!") + to_chat(M, "You need at least two invokers to convert [convertee]!") log_game("Offer rune failed - tried conversion with one invoker") return 0 if(convertee.anti_magic_check(TRUE, TRUE)) @@ -938,7 +922,6 @@ structure_check() searches for nearby cultist structures required for the invoca icon_state = "apoc" pixel_x = -32 pixel_y = -32 - allow_excess_invokers = TRUE color = RUNE_COLOR_DARKRED req_cultists = 3 scribe_delay = 100 diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index ab2126e7b9..edca0c5535 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -6,8 +6,8 @@ icon = 'icons/mob/mob.dmi' icon_state = "shade" icon_living = "shade" - maxHealth = 50 - health = 50 + maxHealth = 40 + health = 40 spacewalk = TRUE healable = 0 speak_emote = list("hisses") @@ -17,12 +17,11 @@ response_harm = "punches" speak_chance = 1 melee_damage_lower = 5 - melee_damage_upper = 15 + melee_damage_upper = 12 attacktext = "metaphysically strikes" minbodytemp = 0 maxbodytemp = INFINITY atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - speed = -1 stop_automated_movement = 1 status_flags = 0 faction = list("cult") diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 1ecf22627a..0e6be47893 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -222,13 +222,18 @@ to_chat(M, "Your blood rites falter as holy water scours your body!") for(var/datum/action/innate/cult/blood_spell/BS in BM.spells) qdel(BS) - if(data >= 30) // 12 units, 54 seconds @ metabolism 0.4 units & tick rate 1.8 sec + if(data >= 25) // 10 units, 45 seconds @ metabolism 0.4 units & tick rate 1.8 sec if(!M.stuttering) M.stuttering = 1 M.stuttering = min(M.stuttering+4, 10) M.Dizzy(5) - if(iscultist(M) && prob(5)) + if(iscultist(M) && prob(8)) M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","R'ge Na'sie","Diabo us Vo'iscum","Eld' Mon Nobis")) + if(prob(20)) + M.visible_message("[M] starts having a seizure!", "You have a seizure!") + M.Unconscious(120) + to_chat(M, "[pick("Your blood is your bond - you are nothing without it", "Do not forget your place", \ + "All that power, and you still fail?", "If you cannot scour this poison, I shall scour your meager life!")].") else if(is_servant_of_ratvar(M) && prob(8)) switch(pick("speech", "message", "emote")) if("speech") @@ -1839,4 +1844,4 @@ var/datum/antagonist/changeling/changeling = L.mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) changeling.chem_charges = max(changeling.chem_charges-2, 0) - return ..() \ No newline at end of file + return ..()