From 74d74aa7cb7fb07d66be0613614c0d7720870dba Mon Sep 17 00:00:00 2001
From: ThePooba <81843097+ThePooba@users.noreply.github.com>
Date: Thu, 3 Oct 2024 11:04:02 -0600
Subject: [PATCH] bugfixes#5 (#3645)
---
_maps/map_files/generic/CentCom.dmm | 157 +++++++++++-------
code/datums/components/omen.dm | 72 +++++---
code/game/machinery/_machinery.dm | 3 +
code/game/machinery/doors/door.dm | 36 ++--
code/game/objects/items/fireaxe.dm | 2 +-
code/game/objects/structures/mirror.dm | 4 +-
code/modules/admin/smites/bad_luck.dm | 12 +-
.../changeling/powers/lesserform.dm | 3 +-
code/modules/cargo/coupon.dm | 2 +-
code/modules/clothing/head/helmet.dm | 6 +-
code/modules/clothing/suits/armor.dm | 6 +-
.../carbon/human/species_types/zombies.dm | 3 +-
code/modules/mob/transform_procs.dm | 2 +
.../religion/sparring/sparring_datum.dm | 2 +-
code/modules/unit_tests/lesserform.dm | 4 +
.../carbon/human/species_type/teratoma.dm | 2 +-
.../spells/spell_types/pointed/smite.dm | 2 +-
17 files changed, 196 insertions(+), 122 deletions(-)
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 4005feeb5a66..bb2531712732 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -19375,12 +19375,13 @@
/turf/open/floor/sandy_dirt,
/area/centcom/central_command_areas/admin)
"blr" = (
-/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
-/obj/machinery/door/airlock/wood/glass{
- name = "Pooba's Bedroom"
+/obj/machinery/door/airlock/centcom{
+ name = "CentCom Supply"
},
-/turf/open/floor/carpet/orange,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/mapping_helpers/airlock/access/any/supply/general,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/indestructible/plating,
+/area/centcom/central_command_areas/admin)
"blD" = (
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/obj/machinery/door/airlock/sandstone{
@@ -19561,6 +19562,14 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"ccF" = (
+/obj/machinery/door/airlock/centcom{
+ name = "CentCom Supply"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/supply/general,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/indestructible/plating,
+/area/centcom/central_command_areas/supply)
"cdN" = (
/obj/machinery/light/directional/east{
dir = 1
@@ -19613,7 +19622,7 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/evacuation)
"cxr" = (
-/turf/open/misc/dirt,
+/turf/open/misc/dirt/station,
/area/centcom/central_command_areas/retirement_yard)
"cyj" = (
/obj/machinery/suit_storage_unit/industrial/assault_operative,
@@ -19731,11 +19740,12 @@
/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
"cSL" = (
-/obj/effect/turf_decal/siding/white{
- dir = 4
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/machinery/fax{
+ name = "Pooba's Fax Machine"
},
-/turf/open/misc/dirt,
-/area/centcom/central_command_areas/retirement_yard)
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"cTB" = (
/obj/structure/flora/bush/style_3,
/obj/effect/decal/cleanable/dirt/dust,
@@ -19899,6 +19909,15 @@
/area/centcom/central_command_areas/adminroom)
"dQc" = (
/obj/structure/table/reinforced/plastitaniumglass,
+/obj/machinery/coffeemaker/impressa,
+/obj/item/storage/box/coffeepack/robusta{
+ pixel_y = -2;
+ pixel_x = -6
+ },
+/obj/item/reagent_containers/cup/coffeepot/bluespace{
+ pixel_y = 9;
+ pixel_x = 5
+ },
/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
"dRD" = (
@@ -20068,11 +20087,9 @@
},
/area/centcom/central_command_areas/adminroom)
"eNq" = (
-/obj/structure/railing{
- dir = 8;
- layer = 4.1
- },
-/turf/open/floor/carpet/donk,
+/obj/machinery/door/airlock/vault,
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/adminroom)
"eNY" = (
/turf/open/floor/lowered/iron/pool/cobble/side{
@@ -20130,7 +20147,7 @@
/area/centcom/central_command_areas/evacuation)
"fan" = (
/obj/machinery/light/floor/has_bulb,
-/turf/open/floor/carpet/orange,
+/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/adminroom)
"fcP" = (
/obj/machinery/light/neon_lining{
@@ -20413,11 +20430,7 @@
/area/centcom/central_command_areas/prison)
"gzU" = (
/obj/effect/decal/cleanable/blood/innards,
-/obj/effect/decal/cleanable/blood/particle,
/obj/effect/decal/cleanable/blood/splatter,
-/obj/effect/decal/cleanable/blood/hitsplatter{
- dir = 8
- },
/obj/effect/turf_decal/sand/plating,
/turf/open/misc/asteroid,
/area/centcom/central_command_areas/admin)
@@ -20617,6 +20630,14 @@
},
/turf/open/floor/wood/tile,
/area/centcom/central_command_areas/adminroom)
+"hlg" = (
+/obj/machinery/button/door/directional/north{
+ name = "Emergency Assistants Fuck Off Button";
+ id = "donutstealthisid";
+ req_access = "cent_captain"
+ },
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"hnC" = (
/obj/effect/turf_decal/weather/dirt{
dir = 4;
@@ -20692,6 +20713,13 @@
/area/cruiser_dock)
"hAP" = (
/obj/machinery/light/directional/west,
+/obj/structure/closet/secure_closet/freezer/fridge/all_access,
+/obj/item/food/burger/cheese,
+/obj/item/food/cheese/firm_cheese,
+/obj/item/food/ready_donk/mac_n_cheese,
+/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla,
+/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla,
+/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla,
/turf/open/floor/carpet/orange,
/area/centcom/central_command_areas/adminroom)
"hAS" = (
@@ -21170,7 +21198,7 @@
/area/centcom/central_command_areas/admin)
"jUj" = (
/obj/structure/fake_stairs/wood/directional/north,
-/turf/open/misc/dirt,
+/turf/open/misc/dirt/station,
/area/centcom/central_command_areas/retirement_yard)
"jVm" = (
/obj/effect/turf_decal/weather/dirt{
@@ -21202,9 +21230,10 @@
/obj/item/storage/fancy/cigarettes/cigpack_syndicate,
/obj/item/lighter/skull,
/obj/item/storage/box/donkpockets/donkpocketteriyaki,
-/obj/item/radio/headset/syndicate/alt/leader,
/obj/item/clothing/under/costume/syndie_pajamas,
/obj/item/storage/backpack/duffelbag/syndie,
+/obj/item/clothing/mask/breath/poob_mask,
+/obj/item/mod/control/pre_equipped/elite/flamethrower,
/turf/open/floor/carpet/orange,
/area/centcom/central_command_areas/adminroom)
"kcm" = (
@@ -21530,11 +21559,8 @@
/turf/open/floor/sandy_dirt,
/area/centcom/central_command_areas/admin)
"mkj" = (
-/obj/structure/railing{
- dir = 1
- },
-/turf/open/floor/carpet/donk,
-/area/centcom/central_command_areas/adminroom)
+/turf/open/indestructible/plating,
+/area/centcom/central_command_areas/admin)
"mkD" = (
/obj/structure/flora/bush/fullgrass/style_random,
/obj/structure/flora/rock/pile/jungle/large/style_random,
@@ -21631,9 +21657,8 @@
/turf/open/floor/iron/dark/smooth_large,
/area/centcom/central_command_areas/admin)
"nbv" = (
-/obj/effect/turf_decal/siding/white,
-/turf/open/misc/dirt,
-/area/centcom/central_command_areas/retirement_yard)
+/turf/open/floor/iron/dark/herringbone,
+/area/centcom/central_command_areas/adminroom)
"ncQ" = (
/obj/effect/turf_decal/siding/thinplating_new/dark/corner,
/turf/open/floor/iron/smooth,
@@ -21806,8 +21831,9 @@
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
"odD" = (
-/obj/structure/railing,
-/obj/structure/chair/office/tactical,
+/obj/structure/chair/office/tactical{
+ dir = 1
+ },
/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
"ofy" = (
@@ -21993,6 +22019,11 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/adminroom)
+"oYA" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/machinery/microwave,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"oZB" = (
/obj/machinery/door/airlock/centcom{
name = "Admin Retirement Home"
@@ -22269,11 +22300,11 @@
/turf/open/floor/glass/plasma,
/area/centcom/central_command_areas/evacuation)
"qzu" = (
-/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/obj/machinery/door/airlock/vault{
- name = "Pooba's Lair"
+ name = "Pooba's Office"
},
-/turf/open/floor/carpet/orange,
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/adminroom)
"qCL" = (
/obj/structure/closet/crate/cardboard,
@@ -22651,9 +22682,12 @@
/turf/open/water,
/area/centcom/central_command_areas/admin)
"sxY" = (
-/turf/open/chasm{
- name = "Pooba's Hole of Dead Body Storage +1"
- },
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/item/paper/monitorkey,
+/obj/item/card/id/advanced/chameleon,
+/obj/item/clothing/mask/chameleon,
+/obj/item/radio/headset/syndicate/alt/leader,
+/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
"syU" = (
/obj/effect/turf_decal/sand/plating,
@@ -22756,7 +22790,6 @@
/area/centcom/central_command_areas/adminroom)
"tiz" = (
/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/clothing/mask/breath/poob_mask,
/obj/machinery/light/directional/east,
/turf/open/floor/carpet/orange,
/area/centcom/central_command_areas/adminroom)
@@ -22961,7 +22994,7 @@
/obj/machinery/door/airlock/hatch{
name = "Pooba's Observatory"
},
-/turf/open/floor/carpet/donk,
+/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/adminroom)
"tYX" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
@@ -23528,9 +23561,8 @@
/turf/open/floor/grass,
/area/centcom/central_command_areas/admin)
"xkv" = (
-/obj/structure/railing{
- dir = 4;
- layer = 4.1
+/obj/machinery/computer/message_monitor{
+ dir = 1
},
/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
@@ -23587,9 +23619,6 @@
/turf/open/floor/grass,
/area/centcom/central_command_areas/retirement_yard)
"xGe" = (
-/obj/effect/decal/cleanable/blood/hitsplatter{
- dir = 8
- },
/obj/effect/turf_decal/sand/plating,
/obj/effect/decal/cleanable/piss_stain,
/turf/open/misc/sandy_dirt,
@@ -50533,7 +50562,7 @@ kpH
cQL
aaW
xkv
-jAA
+cSL
kpH
aaa
aiF
@@ -50790,7 +50819,7 @@ kpH
dQc
odD
sxY
-mkj
+jAA
kpH
aaa
aiF
@@ -51046,7 +51075,7 @@ iOc
kpH
aKc
jth
-eNq
+jAA
jAA
kpH
aaa
@@ -51559,8 +51588,8 @@ yhF
yhF
qzu
fan
-ayR
-ayR
+eNq
+nbv
fan
kpH
aaa
@@ -51818,7 +51847,7 @@ kpH
kpH
kpH
kpH
-blr
+tYn
kpH
aaa
aiF
@@ -52074,7 +52103,7 @@ egP
kpH
rYm
hAP
-ayR
+oYA
ayR
kpH
aaa
@@ -52329,7 +52358,7 @@ mUv
yhF
dtE
kpH
-ayR
+hlg
ayR
ayR
ayR
@@ -52848,9 +52877,9 @@ kpH
kpH
kpH
kpH
-aaa
-aiF
+aOn
aiF
+ccF
aiN
aiF
aiF
@@ -53103,6 +53132,11 @@ kjO
erK
erK
erK
+blr
+mkj
+mkj
+mkj
+mkj
aOn
aaa
aaa
@@ -53122,11 +53156,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
akG
atj
atj
@@ -53879,8 +53908,8 @@ acd
acd
bjH
dwU
-cSL
-cSL
+cxr
+cxr
azQ
hxZ
azQ
@@ -56464,7 +56493,7 @@ aox
aSy
ayI
cxr
-nbv
+cxr
aYr
acv
aYr
diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm
index d7ea8b18c6f2..e0bc45cded17 100644
--- a/code/datums/components/omen.dm
+++ b/code/datums/components/omen.dm
@@ -7,29 +7,44 @@
* Omens are removed once the victim is either maimed by one of the possible injuries, or if they receive a blessing (read: bashing with a bible) from the chaplain.
*/
/datum/component/omen
- dupe_mode = COMPONENT_DUPE_UNIQUE
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
/// Whatever's causing the omen, if there is one. Destroying the vessel won't stop the omen, but we destroy the vessel (if one exists) upon the omen ending
var/obj/vessel
- /// If the omen is permanent, it will never go away
- var/permanent = FALSE
+ /// How many incidents are left. If 0 exactly, it will get deleted.
+ var/incidents_left = INFINITY
/// Base probability of negative events. Cursed are half as unlucky.
var/luck_mod = 1
/// Base damage from negative events. Cursed take 25% less damage.
var/damage_mod = 1
-/datum/component/omen/Initialize(obj/vessel, permanent, luck_mod, damage_mod)
+/datum/component/omen/Initialize(obj/vessel, incidents_left, luck_mod, damage_mod)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
if(istype(vessel))
src.vessel = vessel
RegisterSignal(vessel, COMSIG_QDELETING, PROC_REF(vessel_qdeleting))
- src.permanent = permanent
+ if(!isnull(incidents_left))
+ src.incidents_left = incidents_left
if(!isnull(luck_mod))
src.luck_mod = luck_mod
if(!isnull(damage_mod))
src.damage_mod = damage_mod
+/datum/component/omen/InheritComponent(obj/vessel, incidents_left, luck_mod, damage_mod)
+ // If we have more incidents left the new one gets deleted.
+ if(src.incidents_left > incidents_left)
+ return // make slimes get nurtiton from plasmer
+ // Otherwise we set our incidents remaining to the higher, newer value.
+ src.incidents_left = incidents_left
+ // The new omen is weaker than our current omen? Let's split the difference.
+ if(src.luck_mod > luck_mod)
+ src.luck_mod += luck_mod * 0.5
+ if(src.damage_mod > damage_mod)
+ src.luck_mod += luck_mod * 0.5
+ // This means that if you had a strong temporary omen and it was replaced by a weaker but permanent omen, the latter is made worse.
+ // Feature!
+
/datum/component/omen/Destroy(force)
var/mob/living/person = parent
to_chat(person, span_nicegreen("You feel a horrible omen lifted off your shoulders!"))
@@ -42,6 +57,11 @@
return ..()
+/datum/component/omen/proc/consume_omen()
+ incidents_left--
+ if(incidents_left < 1)
+ qdel(src)
+
/datum/component/omen/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(check_accident))
RegisterSignal(parent, COMSIG_ON_CARBON_SLIP, PROC_REF(check_slip))
@@ -64,9 +84,21 @@
return
var/mob/living/living_guy = our_guy
- if(!prob(15 * luck_mod))
- return
+ var/effective_luck = luck_mod
+ // If there's nobody to witness the misfortune, make it less likely.
+ // This way, we allow for people to be able to get into hilarious situations without making the game nigh unplayable most of the time.
+
+ var/has_watchers = FALSE
+ for(var/mob/viewer in viewers(our_guy, world.view))
+ if(viewer.client)
+ has_watchers = TRUE
+ break
+ if(!has_watchers)
+ effective_luck *= 0.5
+
+ if(!prob(15 * effective_luck))
+ return
var/our_guy_pos = get_turf(living_guy)
for(var/obj/machinery/door/airlock/darth_airlock in our_guy_pos)
if(darth_airlock.locked || !darth_airlock.hasPower())
@@ -80,8 +112,7 @@
if(istype(our_guy_pos, /turf/open/floor/noslip/tram_plate/energized))
var/turf/open/floor/noslip/tram_plate/energized/future_tram_victim = our_guy_pos
if(future_tram_victim.toast(living_guy))
- if(!permanent)
- qdel(src)
+ consume_omen()
return
for(var/turf/the_turf as anything in get_adjacent_open_turfs(living_guy))
@@ -90,8 +121,7 @@
if(living_guy.can_z_move(DOWN, the_turf, z_move_flags = ZMOVE_FALL_FLAGS))
to_chat(living_guy, span_warning("A malevolent force guides you towards the edge..."))
living_guy.throw_at(the_turf, 1, 10, force = MOVE_FORCE_EXTREMELY_STRONG)
- if(!permanent)
- qdel(src)
+ consume_omen()
return
for(var/obj/machinery/vending/darth_vendor in the_turf)
@@ -99,14 +129,13 @@
continue
to_chat(living_guy, span_warning("A malevolent force tugs at the [darth_vendor]..."))
INVOKE_ASYNC(darth_vendor, TYPE_PROC_REF(/obj/machinery/vending, tilt), living_guy)
- if(!permanent)
- qdel(src)
+ consume_omen()
return
/datum/component/omen/proc/slam_airlock(obj/machinery/door/airlock/darth_airlock)
. = darth_airlock.close(force_crush = TRUE)
- if(. && !permanent && !prob(66.6))
- qdel(src)
+ if(.)
+ consume_omen()
/// If we get knocked down, see if we have a really bad slip and bash our head hard
/datum/component/omen/proc/check_slip(mob/living/our_guy, amount)
@@ -124,8 +153,7 @@
our_guy.visible_message(span_danger("[our_guy] hits [our_guy.p_their()] head really badly falling down!"), span_userdanger("You hit your head really badly falling down!"))
the_head.receive_damage(75 * damage_mod)
our_guy.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100 * damage_mod)
- if(!permanent)
- qdel(src)
+ consume_omen()
return
@@ -133,7 +161,7 @@
/datum/component/omen/proc/check_bless(mob/living/our_guy, category)
SIGNAL_HANDLER
- if(permanent)
+ if(incidents_left == INFINITY)
return
if(!("blessing" in our_guy.mob_mood.mood_events))
@@ -145,7 +173,7 @@
/datum/component/omen/proc/check_death(mob/living/our_guy)
SIGNAL_HANDLER
- if(permanent)
+ if(incidents_left == INFINITY)
return
qdel(src)
@@ -170,7 +198,7 @@
/datum/component/omen/smite
/datum/component/omen/smite/check_death(mob/living/our_guy)
- if(!permanent)
+ if(incidents_left == INFINITY)
return ..()
death_explode(our_guy)
@@ -181,8 +209,8 @@
* Has only a 50% chance of bad things happening, and takes only 25% of normal damage.
*/
/datum/component/omen/quirk
- permanent = TRUE
- luck_mod = 0.5 // 50% chance of bad things happening
+ incidents_left = INFINITY
+ luck_mod = 0.4 // 30% chance of bad things happening
damage_mod = 0.25 // 25% of normal damage
/datum/component/omen/quirk/RegisterWithParent()
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 728df8ba25cc..0d14697b7624 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -410,6 +410,9 @@
/obj/machinery/proc/close_machine(atom/movable/target, density_to_set = TRUE)
state_open = FALSE
set_density(density_to_set)
+ if (!density)
+ update_appearance()
+ return
if(!target)
for(var/atom in loc)
if (!(can_be_occupant(atom)))
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index a0d432cefd9a..559461bf5f6a 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -483,25 +483,29 @@
open()
/obj/machinery/door/proc/crush()
- for(var/mob/living/L in get_turf(src))
- L.visible_message(span_warning("[src] closes on [L], crushing [L.p_them()]!"), span_userdanger("[src] closes on you and crushes you!"))
- SEND_SIGNAL(L, COMSIG_LIVING_DOORCRUSHED, src)
- if(isalien(L)) //For xenos
- L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans.
- L.emote("roar")
- else if(ishuman(L)) //For humans
- L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
- L.emote("scream")
- L.Paralyze(100)
+ for(var/mob/living/future_pancake in get_turf(src))
+ future_pancake.visible_message(span_warning("[src] closes on [future_pancake], crushing [future_pancake.p_them()]!"), span_userdanger("[src] closes on you and crushes you!"))
+ SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src)
+ if(isalien(future_pancake)) //For xenos
+ future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans.
+ future_pancake.emote("roar")
+ else if(ismonkey(future_pancake))
+ future_pancake.emote("screech")
+ future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
+ future_pancake.Paralyze(100)
+ else if(ishuman(future_pancake)) //For humans
+ future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
+ future_pancake.emote("scream")
+ future_pancake.Paralyze(100)
else //for simple_animals & borgs
- L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
+ future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
var/turf/location = get_turf(src)
//add_blood doesn't work for borgs/xenos, but add_blood_floor does.
- L.add_splatter_floor(location)
- log_combat(src, L, "crushed")
- for(var/obj/vehicle/sealed/mecha/M in get_turf(src))
- M.take_damage(DOOR_CRUSH_DAMAGE)
- log_combat(src, M, "crushed")
+ future_pancake.add_splatter_floor(location)
+ log_combat(src, future_pancake, "crushed")
+ for(var/obj/vehicle/sealed/mecha/mech in get_turf(src))
+ mech.take_damage(DOOR_CRUSH_DAMAGE)
+ log_combat(src, mech, "crushed")
/obj/machinery/door/proc/autoclose()
if(!QDELETED(src) && !density && !operating && !locked && !welded && autoclose)
diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm
index e6a9088fe1dc..391cfe06e2f2 100644
--- a/code/game/objects/items/fireaxe.dm
+++ b/code/game/objects/items/fireaxe.dm
@@ -85,7 +85,7 @@
name = "metallic hydrogen axe"
desc = "A lightweight crowbar with an extreme sharp fire axe head attached. It trades it's hefty as a weapon by making it easier to carry around when holstered to suits without having to sacrifice your backpack."
force_unwielded = 5
- force_wielded = 15
+ force_wielded = 20
demolition_mod = 2
tool_behaviour = TOOL_CROWBAR
toolspeed = 1
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index fbf2ad8e2815..b046313eff72 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -80,7 +80,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
. = ..()
if(broken) // breaking a mirror truly gets you bad luck!
to_chat(user, span_warning("A chill runs down your spine as [src] shatters..."))
- user.AddComponent(/datum/component/omen)
+ user.AddComponent(/datum/component/, incidents_left = 7)
/obj/structure/mirror/bullet_act(obj/projectile/P)
if(broken || !isliving(P.firer) || !P.damage)
@@ -90,7 +90,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
if(broken) // breaking a mirror truly gets you bad luck!
var/mob/living/unlucky_dude = P.firer
to_chat(unlucky_dude, span_warning("A chill runs down your spine as [src] shatters..."))
- unlucky_dude.AddComponent(/datum/component/omen)
+ unlucky_dude.AddComponent(/datum/component/omen, incidents_left = 7)
/obj/structure/mirror/atom_break(damage_flag, mapload)
. = ..()
diff --git a/code/modules/admin/smites/bad_luck.dm b/code/modules/admin/smites/bad_luck.dm
index c9f6a94b93a0..34592dd200d4 100644
--- a/code/modules/admin/smites/bad_luck.dm
+++ b/code/modules/admin/smites/bad_luck.dm
@@ -6,21 +6,23 @@
var/silent
/// Is this permanent?
- var/permanent
+ var/incidents
/datum/smite/bad_luck/configure(client/user)
silent = tgui_alert(user, "Do you want to apply the omen with a player notification?", "Notify Player?", list("Notify", "Silent")) == "Silent"
- permanent = tgui_alert(user, "Would you like this to be permanent or removed automatically after the first accident?", "Permanent?", list("Permanent", "Temporary")) == "Permanent"
+ incidents = tgui_input_number(user, "For how many incidents will the omen last? 0 means permanent.", "Duration?", default = 0, round_value = 1)
+ if(incidents == 0)
+ incidents = INFINITY
/datum/smite/bad_luck/effect(client/user, mob/living/target)
. = ..()
//if permanent, replace any existing omen
- if(permanent)
+ if(incidents == INFINITY)
var/existing_component = target.GetComponent(/datum/component/omen)
qdel(existing_component)
- target.AddComponent(/datum/component/omen/smite, permanent = permanent)
+ target.AddComponent(/datum/component/omen/smite, incidents_left = incidents)
if(silent)
return
to_chat(target, span_warning("You get a bad feeling..."))
- if(permanent)
+ if(incidents == INFINITY)
to_chat(target, span_warning("A very bad feeling... As if malevolent forces are watching you..."))
diff --git a/code/modules/antagonists/changeling/powers/lesserform.dm b/code/modules/antagonists/changeling/powers/lesserform.dm
index 854234af965f..62fa60e2b974 100644
--- a/code/modules/antagonists/changeling/powers/lesserform.dm
+++ b/code/modules/antagonists/changeling/powers/lesserform.dm
@@ -3,7 +3,7 @@
desc = "We debase ourselves and become lesser. We become a monkey. Costs 5 chemicals."
helptext = "The transformation greatly reduces our size, allowing us to slip out of cuffs and climb through vents."
button_icon_state = "lesser_form"
- chemical_cost = 5
+ chemical_cost = 20 // monkestation edit
dna_cost = 1
/// Whether to allow the transformation animation to play
var/transform_instantly = FALSE
@@ -25,6 +25,7 @@
..()
return ismonkey(user) ? unmonkey(user) : become_monkey(user)
+
/// Stop being a monkey
/datum/action/changeling/lesserform/proc/unmonkey(mob/living/carbon/human/user)
if(user.movement_type & VENTCRAWLING)
diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm
index fc1c3a6cc659..19be541f150c 100644
--- a/code/modules/cargo/coupon.dm
+++ b/code/modules/cargo/coupon.dm
@@ -35,7 +35,7 @@
to_chat(cursed, span_warning("The coupon reads 'fuck you' in large, bold text... is- is that a prize, or?"))
if(!cursed.GetComponent(/datum/component/omen))
- cursed.AddComponent(/datum/component/omen)
+ cursed.AddComponent(/datum/component/omen, incidents_left = 2)
return TRUE
if(HAS_TRAIT(cursed, TRAIT_CURSED))
to_chat(cursed, span_warning("What a horrible night... To have a curse!"))
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 2b304c631a76..6d532ef584c6 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -535,12 +535,12 @@
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
/datum/armor/helmet_elder_atmosian
- melee = 25
- bullet = 20
+ melee = 30
+ bullet = 30
laser = 30
energy = 30
bomb = 85
bio = 10
- fire = 65
+ fire = 100
acid = 40
wound = 15
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index b6a8add54370..0e8b74b4b107 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -561,13 +561,13 @@
)
/datum/armor/armor_elder_atmosian
- melee = 25
- bullet = 20
+ melee = 30
+ bullet = 30
laser = 30
energy = 30
bomb = 85
bio = 10
- fire = 65
+ fire = 100
acid = 40
wound = 15
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index b7f9b81de523..fe0307afdf52 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -92,7 +92,7 @@
mutanttongue = /obj/item/organ/internal/tongue/zombie
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
/// The rate the zombies regenerate at
- var/heal_rate = 0.5
+ var/heal_rate = 0.6
/// The cooldown before the zombie can start regenerating
COOLDOWN_DECLARE(regen_cooldown)
@@ -112,6 +112,7 @@
TRAIT_RESISTHIGHPRESSURE,
TRAIT_RESISTLOWPRESSURE,
TRAIT_TOXIMMUNE,
+ TRAIT_NO_PAIN_EFFECTS,
// INFECTIOUS UNIQUE
TRAIT_STABLEHEART, // Replacement for noblood. Infectious zombies can bleed but don't need their heart.
TRAIT_STABLELIVER, // Not necessary but for consistency with above
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index fe8b58c603a6..37360e77d7a4 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -32,6 +32,8 @@
icon = initial(icon)
invisibility = 0
set_species(/datum/species/monkey)
+ name = "monkey"
+ set_name()
SEND_SIGNAL(src, COMSIG_HUMAN_MONKEYIZE)
uncuff()
regenerate_icons()
diff --git a/code/modules/religion/sparring/sparring_datum.dm b/code/modules/religion/sparring/sparring_datum.dm
index 037b35c26f2f..91c8415c7e5b 100644
--- a/code/modules/religion/sparring/sparring_datum.dm
+++ b/code/modules/religion/sparring/sparring_datum.dm
@@ -208,7 +208,7 @@
switch(pick(possible_punishments))
if(PUNISHMENT_OMEN)
to_chat(interfering, span_warning("You get a bad feeling... for interfering with [chaplain]'s sparring match..."))
- interfering.AddComponent(/datum/component/omen)
+ interfering.AddComponent(/datum/component/omen, incidents_left = 10)
if(PUNISHMENT_LIGHTNING)
to_chat(interfering, span_warning("[GLOB.deity] has punished you for interfering with [chaplain]'s sparring match!"))
lightningbolt(interfering)
diff --git a/code/modules/unit_tests/lesserform.dm b/code/modules/unit_tests/lesserform.dm
index a719b11dc523..1c7e2bfdcc23 100644
--- a/code/modules/unit_tests/lesserform.dm
+++ b/code/modules/unit_tests/lesserform.dm
@@ -3,6 +3,7 @@
/datum/unit_test/lesserform/Run()
var/mob/living/carbon/human/changeling = allocate(/mob/living/carbon/human/consistent)
+ var/name = changeling.name
changeling.mind_initialize()
var/datum/mind/mind = changeling.mind
var/datum/antagonist/changeling/changeling_datum = mind.add_antag_datum(/datum/antagonist/changeling)
@@ -13,11 +14,14 @@
transform_ability.Trigger()
TEST_ASSERT(ismonkey(changeling), "Changeling failed to turn into a monkey after voluntarily transforming using lesser form.")
+ TEST_ASSERT_NOTEQUAL(name, changeling.name, "Monkeyisation failed to anonymise changeling's name.")
changeling.humanize(instant = TRUE)
transform_ability.Trigger()
+ changeling_datum.adjust_chemicals(INFINITY)
TEST_ASSERT(ismonkey(changeling), "Changeling failed to turn into a monkey after involuntarily being made into a human.")
transform_ability.Trigger()
TEST_ASSERT(!ismonkey(changeling), "Changeling failed to stop being a monkey after voluntarily transforming using lesser form.")
+ TEST_ASSERT_EQUAL(name, changeling.name, "Returning from monkey form failed to restore original name.")
changeling.monkeyize(instant = TRUE)
transform_ability.Trigger()
TEST_ASSERT(!ismonkey(changeling), "Changeling failed to stop being a monkey after being involuntarily turned into one.")
diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/teratoma.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/teratoma.dm
index a34c3c15b1cd..9b9f73d96eed 100644
--- a/monkestation/code/modules/mob/living/carbon/human/species_type/teratoma.dm
+++ b/monkestation/code/modules/mob/living/carbon/human/species_type/teratoma.dm
@@ -112,7 +112,7 @@
)
/datum/component/omen/teratoma
- permanent = TRUE
+ incidents_left = INFINITY
luck_mod = 0.75
damage_mod = 0.2
diff --git a/monkestation/code/modules/spells/spell_types/pointed/smite.dm b/monkestation/code/modules/spells/spell_types/pointed/smite.dm
index bf4bbc9be600..6ff0c3688d02 100644
--- a/monkestation/code/modules/spells/spell_types/pointed/smite.dm
+++ b/monkestation/code/modules/spells/spell_types/pointed/smite.dm
@@ -55,7 +55,7 @@
switch(picked_smite) //subtype vars moment, I really want a better way to do this
if(/datum/smite/bad_luck)
var/datum/smite/bad_luck/luck_smite = new picked_smite
- luck_smite.permanent = TRUE
+ luck_smite.incidents = 0
do_smite(luck_smite, cast_on)
if(/datum/smite/berforate)
var/datum/smite/berforate/shoot_smite = new picked_smite