From d51c96852d2e649eb2e3ef5d40dc1406ef3a795f Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 15:17:34 -0700 Subject: [PATCH 1/9] Cult Manifest Bugfix / Tweaks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: 1) Summoned human-body ghosts are no longer invincible 'dummy' humans with godmode. They are now killable, like anything else. 2) The damage done by manifest rune is 0 for the first 30 cycles, then 1/cycle for the next 30 cycles, then 2/cycle thereafter. This is intended to allow cultists to do a quick summon for free, but prevent them from keeping ghosts summoned forever. 🆑 Kyep fix: Ghosts manifested by cultists are no longer invincible, and the amount of damage done to the person invoking manifest runes has been tweaked such that the rune is much harder to use for a long period of time. /🆑 Aims to fix: https://github.com/ParadiseSS13/Paradise/issues/6854 --- code/game/gamemodes/cult/runes.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 15fdfc6f61c..4bca684078e 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -968,7 +968,7 @@ var/list/teleport_runes = list() if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !jobban_isbanned(O, ROLE_SYNDICATE)) ghosts_on_rune |= O var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune) - var/mob/living/carbon/human/dummy/new_human = new(get_turf(src)) + var/mob/living/carbon/human/new_human = new(get_turf(src)) new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent new_human.color = "grey" //heh..cult greytide...litterly... @@ -985,10 +985,15 @@ var/list/teleport_runes = list() ticker.mode.add_cultist(new_human.mind, 0) to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") + var/i = 0 while(user in get_turf(src)) + i++ if(user.stat) break - user.apply_damage(0.1, BRUTE) + if(i > 60) + user.apply_damage(2, BRUTE) + else if(i > 30) + user.apply_damage(1, BRUTE) sleep(3) qdel(N) From b7300e3586ff0f7f06ad565f597498ba139fa04d Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 15:42:55 -0700 Subject: [PATCH 2/9] Fixes an exploit --- code/game/gamemodes/cult/runes.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 4bca684078e..eb0a69533d6 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -937,6 +937,7 @@ var/list/teleport_runes = list() icon_state = "6" construct_invoke = 0 color = rgb(200, 0, 0) + var/mob/living/summoned_guy = null /obj/effect/rune/manifest/New(loc) ..() @@ -983,6 +984,7 @@ var/list/teleport_runes = list() N.mouse_opacity = 0 new_human.key = ghost_to_spawn.key ticker.mode.add_cultist(new_human.mind, 0) + summoned_guy = new_human to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") var/i = 0 @@ -1003,3 +1005,10 @@ var/list/teleport_runes = list() for(var/obj/I in new_human) new_human.unEquip(I) new_human.dust() + summoned_guy = null + +/obj/effect/rune/manifest/Destroy() + if(summoned_guy) + var/mob/living/carbon/human/H = summoned_guy + H.dust() + ..() From b08ccdc3c591f1ea9bc3e547abd6c266838b2a1b Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 16:01:05 -0700 Subject: [PATCH 3/9] Stops people soulstoning manifested humans --- code/game/gamemodes/cult/runes.dm | 2 +- code/game/gamemodes/wizard/soulstone.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index eb0a69533d6..e61f7f379b8 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -969,7 +969,7 @@ var/list/teleport_runes = list() if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !jobban_isbanned(O, ROLE_SYNDICATE)) ghosts_on_rune |= O var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune) - var/mob/living/carbon/human/new_human = new(get_turf(src)) + var/mob/living/carbon/human/manifested/new_human = new(get_turf(src)) new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent new_human.color = "grey" //heh..cult greytide...litterly... diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 16c9b2f5857..5c110c44ff7 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -51,7 +51,7 @@ to_chat(user, "There is no power left in the shard.") return - if(!ishuman(M) || istype(M, /mob/living/carbon/human/dummy)) //If target is not a human or a dummy + if(!ishuman(M) || istype(M, /mob/living/carbon/human/dummy) || istype(M, /mob/living/carbon/human/manifested)) //If target is not a human or a dummy return ..() if(M.has_brain_worms()) //Borer stuff - RR diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f849185d9ff..ef696d2cfaa 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -74,6 +74,9 @@ real_name = "Test Dummy" status_flags = GODMODE|CANPUSH +/mob/living/carbon/human/manifested + real_name = "Cursed Human" + /mob/living/carbon/human/skrell/New(var/new_loc) ..(new_loc, "Skrell") From 979581c84955c618666ddedfb861d4608bed2901 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 16:02:23 -0700 Subject: [PATCH 4/9] CL request --- code/game/gamemodes/cult/runes.dm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index e61f7f379b8..80190ce59ae 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -987,15 +987,10 @@ var/list/teleport_runes = list() summoned_guy = new_human to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") - var/i = 0 while(user in get_turf(src)) - i++ if(user.stat) break - if(i > 60) - user.apply_damage(2, BRUTE) - else if(i > 30) - user.apply_damage(1, BRUTE) + user.apply_damage(0.1, BRUTE) sleep(3) qdel(N) From 1b5cfadd36b0a740e0e970e6194e53ab93b20393 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 19:49:36 -0700 Subject: [PATCH 5/9] Fox requests --- code/game/gamemodes/cult/runes.dm | 4 ++-- code/game/gamemodes/wizard/soulstone.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 80190ce59ae..b1388111f0f 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -969,7 +969,7 @@ var/list/teleport_runes = list() if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !jobban_isbanned(O, ROLE_SYNDICATE)) ghosts_on_rune |= O var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune) - var/mob/living/carbon/human/manifested/new_human = new(get_turf(src)) + var/mob/living/carbon/human/new_human = new(get_turf(src)) new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent new_human.color = "grey" //heh..cult greytide...litterly... @@ -1006,4 +1006,4 @@ var/list/teleport_runes = list() if(summoned_guy) var/mob/living/carbon/human/H = summoned_guy H.dust() - ..() + return ..() diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 5c110c44ff7..7fcd9c198b4 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -51,7 +51,7 @@ to_chat(user, "There is no power left in the shard.") return - if(!ishuman(M) || istype(M, /mob/living/carbon/human/dummy) || istype(M, /mob/living/carbon/human/manifested)) //If target is not a human or a dummy + if(!ishuman(M)) //If target is not a human return ..() if(M.has_brain_worms()) //Borer stuff - RR diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ef696d2cfaa..f849185d9ff 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -74,9 +74,6 @@ real_name = "Test Dummy" status_flags = GODMODE|CANPUSH -/mob/living/carbon/human/manifested - real_name = "Cursed Human" - /mob/living/carbon/human/skrell/New(var/new_loc) ..(new_loc, "Skrell") From 777a7aa5cb41be8daccfc305a66e9a35023d679e Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 19:52:48 -0700 Subject: [PATCH 6/9] More fox stuff. --- code/game/gamemodes/cult/runes.dm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index b1388111f0f..da306d199e6 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -937,7 +937,8 @@ var/list/teleport_runes = list() icon_state = "6" construct_invoke = 0 color = rgb(200, 0, 0) - var/mob/living/summoned_guy = null + var/mob/living/carbon/human/summoned_guy = null + var/is_busy = 0 /obj/effect/rune/manifest/New(loc) ..() @@ -946,6 +947,10 @@ var/list/teleport_runes = list() notify_ghosts("Manifest rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) /obj/effect/rune/manifest/can_invoke(mob/living/user) + if(is_busy) + to_chat(user,"The rune is already in use.") + fail_invoke() + return list() if(!(user in get_turf(src))) to_chat(user,"You must be standing on [src]!") fail_invoke() @@ -986,6 +991,7 @@ var/list/teleport_runes = list() ticker.mode.add_cultist(new_human.mind, 0) summoned_guy = new_human to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") + is_busy = 1 while(user in get_turf(src)) if(user.stat) @@ -994,6 +1000,7 @@ var/list/teleport_runes = list() sleep(3) qdel(N) + is_busy = 0 if(new_human) new_human.visible_message("[new_human] suddenly dissolves into bones and ashes.", \ "Your link to the world fades. Your form breaks apart.") @@ -1004,6 +1011,7 @@ var/list/teleport_runes = list() /obj/effect/rune/manifest/Destroy() if(summoned_guy) - var/mob/living/carbon/human/H = summoned_guy - H.dust() + summoned_guy.dust() + summoned_guy = null + is_busy = 0 return ..() From adf513b0bb026936cf833daba5a7d00ffeb09ede Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 21:55:13 -0700 Subject: [PATCH 7/9] CL request --- code/game/gamemodes/cult/runes.dm | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index da306d199e6..6710f19a726 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -937,8 +937,7 @@ var/list/teleport_runes = list() icon_state = "6" construct_invoke = 0 color = rgb(200, 0, 0) - var/mob/living/carbon/human/summoned_guy = null - var/is_busy = 0 + var/list/summoned_guys = list() /obj/effect/rune/manifest/New(loc) ..() @@ -947,10 +946,6 @@ var/list/teleport_runes = list() notify_ghosts("Manifest rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) /obj/effect/rune/manifest/can_invoke(mob/living/user) - if(is_busy) - to_chat(user,"The rune is already in use.") - fail_invoke() - return list() if(!(user in get_turf(src))) to_chat(user,"You must be standing on [src]!") fail_invoke() @@ -989,9 +984,8 @@ var/list/teleport_runes = list() N.mouse_opacity = 0 new_human.key = ghost_to_spawn.key ticker.mode.add_cultist(new_human.mind, 0) - summoned_guy = new_human + summoned_guys |= new_human to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") - is_busy = 1 while(user in get_turf(src)) if(user.stat) @@ -999,19 +993,17 @@ var/list/teleport_runes = list() user.apply_damage(0.1, BRUTE) sleep(3) + summoned_guys -= new_human qdel(N) - is_busy = 0 if(new_human) new_human.visible_message("[new_human] suddenly dissolves into bones and ashes.", \ "Your link to the world fades. Your form breaks apart.") for(var/obj/I in new_human) new_human.unEquip(I) new_human.dust() - summoned_guy = null /obj/effect/rune/manifest/Destroy() - if(summoned_guy) - summoned_guy.dust() - summoned_guy = null - is_busy = 0 + for(var/mob/living/carbon/human/guy in summoned_guys) + guy.dust() + summoned_guys = list() return ..() From b1cdaeea350342e4c3df169c24c8a3f39925b5e5 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Apr 2017 22:00:58 -0700 Subject: [PATCH 8/9] and Cut() --- code/game/gamemodes/cult/runes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 6710f19a726..a339c761162 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -1005,5 +1005,5 @@ var/list/teleport_runes = list() /obj/effect/rune/manifest/Destroy() for(var/mob/living/carbon/human/guy in summoned_guys) guy.dust() - summoned_guys = list() + summoned_guys.Cut() return ..() From 85f2d4141b717528a55e2f94bc3fe1d4fdb28f81 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 2 Apr 2017 02:58:27 -0700 Subject: [PATCH 9/9] Fox requests --- code/game/gamemodes/cult/runes.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index a339c761162..41b8178c6f3 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -993,17 +993,19 @@ var/list/teleport_runes = list() user.apply_damage(0.1, BRUTE) sleep(3) - summoned_guys -= new_human qdel(N) if(new_human) new_human.visible_message("[new_human] suddenly dissolves into bones and ashes.", \ "Your link to the world fades. Your form breaks apart.") for(var/obj/I in new_human) new_human.unEquip(I) + summoned_guys -= new_human new_human.dust() /obj/effect/rune/manifest/Destroy() for(var/mob/living/carbon/human/guy in summoned_guys) + for(var/obj/I in guy) + guy.unEquip(I) guy.dust() summoned_guys.Cut() return ..()