diff --git a/_maps/map_files/hyper/Diner.dmm b/_maps/map_files/hyper/Diner.dmm
index c067d0e0..260d1316 100644
--- a/_maps/map_files/hyper/Diner.dmm
+++ b/_maps/map_files/hyper/Diner.dmm
@@ -70,8 +70,8 @@
"br" = (/obj/effect/turf_decal/loading_area{dir = 6; icon_state = "steel_panel"; name = "steel pannel"},/turf/open/floor/plasteel/cafeteria,/area/diner)
"bs" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "diner shutters"; tag = dshutters},/turf/open/floor/plating,/area/diner)
"bt" = (/obj/structure/table/plasmaglass,/obj/effect/turf_decal/loading_area{dir = 8; icon_state = "drain"; name = "drain"},/obj/item/reagent_containers/food/drinks/drinkingglass,/turf/open/floor/plasteel/dark,/area/diner)
-"bu" = (/obj/structure/table/plasmaglass,/obj/machinery/chem_dispenser/drinks{dir = 8},/obj/machinery/light{dir = 4; pixel_x = 7; pixel_y = 0},/turf/open/floor/plasteel/dark,/area/diner)
-"bv" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/open/floor/plasteel/dark,/area/diner)
+"bu" = (/obj/structure/table/plasmaglass,/obj/machinery/chem_dispenser/drinks{dir = 8},/obj/machinery/light{dir = 4; pixel_x = 7; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/dark,/area/diner)
+"bv" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/reagent_containers/food/condiment/flour,/obj/item/reagent_containers/food/condiment/flour,/obj/item/reagent_containers/food/condiment/flour,/turf/open/floor/plasteel/dark,/area/diner)
"bw" = (/obj/structure/table/plasmaglass,/obj/effect/turf_decal/loading_area{dir = 8; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel/dark,/area/diner)
"bx" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plasteel/dark,/area/diner)
"by" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/plasteel/dark,/area/diner)
@@ -104,7 +104,7 @@
"kS" = (/turf/open/floor/plasteel{dir = 1; icon_state = "floor_trim"},/area/diner)
"lm" = (/obj/structure/table/plasmaglass,/turf/open/floor/carpet/black,/area/diner)
"mb" = (/obj/structure/lattice/catwalk,/obj/structure/railing{dir = 4},/obj/structure/railing{dir = 1},/turf/open/space/basic,/area/space/nearstation)
-"mn" = (/obj/machinery/vending/boozeomat,/turf/closed/wall,/area/diner)
+"mn" = (/obj/machinery/vending/boozeomat{req_access = null},/turf/closed/wall,/area/diner)
"mV" = (/turf/open/floor/plasteel{dir = 4; icon_state = "floor_plate"},/area/diner)
"nQ" = (/obj/structure/table/plasmaglass,/obj/item/reagent_containers/food/condiment/saltshaker{pixel_y = 10},/obj/item/reagent_containers/food/condiment/peppermill{pixel_x = 5; pixel_y = 4},/turf/open/floor/carpet/black,/area/diner)
"op" = (/obj/structure/table/plasmaglass,/obj/item/ashtray,/turf/open/floor/carpet/black,/area/diner)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
index 665ed2b8..e6b99497 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
@@ -478,6 +478,7 @@
//property_weights = list("extended" = 1)
//always_max_weight = TRUE
occurances_max = 0
+ map_blacklist = list("LayeniaStation.dmm")
/datum/dynamic_ruleset/event/major_dust
name = "Major Space Dust"
@@ -493,6 +494,7 @@
repeatable = TRUE
//property_weights = list("extended" = 1)
occurances_max = 3
+ map_blacklist = list("LayeniaStation.dmm")
/datum/dynamic_ruleset/event/electrical_storm
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 82f86749..f4ebd218 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -470,7 +470,7 @@
desc = "You wanted ORANGE. It gave you Lemon Lime."
icon_state = "lemon-lime"
list_reagents = list(/datum/reagent/consumable/lemon_lime = 30)
- foodtype = FRUIT
+ foodtype = SUGAR | FRUIT
/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime/Initialize()
. = ..()
@@ -481,35 +481,35 @@
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up"
list_reagents = list(/datum/reagent/consumable/space_up = 30)
- foodtype = SUGAR | JUNKFOOD
+ foodtype = SUGAR
/obj/item/reagent_containers/food/drinks/soda_cans/starkist
name = "Star-kist"
desc = "The taste of a star in liquid form. And, a bit of tuna...?"
icon_state = "starkist"
list_reagents = list(/datum/reagent/consumable/space_cola = 15, /datum/reagent/consumable/orangejuice = 15)
- foodtype = SUGAR | FRUIT | JUNKFOOD
+ foodtype = SUGAR | FRUIT
/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind
name = "Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind"
list_reagents = list(/datum/reagent/consumable/spacemountainwind = 30)
- foodtype = SUGAR | JUNKFOOD
+ foodtype = SUGAR
/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko
name = "Thirteen Loko"
desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly."
icon_state = "thirteen_loko"
list_reagents = list(/datum/reagent/consumable/ethanol/thirteenloko = 30)
- foodtype = SUGAR | JUNKFOOD
+ foodtype = SUGAR
/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb
name = "Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
icon_state = "dr_gibb"
list_reagents = list(/datum/reagent/consumable/dr_gibb = 30)
- foodtype = SUGAR | JUNKFOOD
+ foodtype = SUGAR
/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game
name = "Pwr Game"
@@ -522,14 +522,14 @@
desc = "~Shake me up some of that Shambler's Juice!~"
icon_state = "shamblers"
list_reagents = list(/datum/reagent/consumable/shamblers = 30)
- foodtype = SUGAR | JUNKFOOD
+ foodtype = SUGAR
/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull
name = "Grey Bull"
desc = "Grey Bull, it gives you gloves!"
icon_state = "energy_drink"
- list_reagents = list(/datum/reagent/consumable/grey_bull = 20)
- foodtype = SUGAR | JUNKFOOD
+ list_reagents = list(/datum/reagent/consumable/grey_bull = 30)
+ foodtype = SUGAR
/obj/item/reagent_containers/food/drinks/soda_cans/air
name = "canned air"
@@ -542,5 +542,5 @@
desc = "Unleash the ape!"
icon_state = "menergy"
list_reagents = list(/datum/reagent/consumable/monkey_energy = 50)
- foodtype = SUGAR | JUNKFOOD
+ foodtype = SUGAR
price = 3
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 752094a3..2c20a22f 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -300,17 +300,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
succumb()
if(stat == DEAD)
ghostize(1)
- else
- //Low RP, removing.
- /*
+ else if(!(ishuman(src)) && !(issilicon(src)))
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst still alive you won't be able to re-enter this round! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
if(response != "Ghost")
return //didn't want to ghost after-all
ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
suicide_log(TRUE)
- */
+ else
to_chat(usr, "You cannot ghost, if you wish to remove yourself from the round, please locate a cryogenic freezer.")
- message_admins("[usr] attempted to ghost.")
+ message_admins("[src] attempted to ghost.")
/mob/camera/verb/ghost()
set category = "OOC"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index bffdbac4..223a1a88 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -369,7 +369,7 @@
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress())
return
- next_scan_time = world.time + 2000 //Please stop making it so they multiply like rabbits
+ next_scan_time = world.time + 6000 //Please stop making it so they multiply like rabbits
var/alone = 1
var/mob/living/simple_animal/partner
var/children = 0
diff --git a/hyperstation/code/mobs/mimic.dm b/hyperstation/code/mobs/mimic.dm
index 0723949a..14d40cc2 100644
--- a/hyperstation/code/mobs/mimic.dm
+++ b/hyperstation/code/mobs/mimic.dm
@@ -12,7 +12,8 @@
turns_per_move = 5
move_to_delay = 1
speed = 0
- see_in_dark = 6
+ see_in_dark = 8
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
pass_flags = PASSTABLE
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 2)
response_help = "prods"
@@ -20,8 +21,8 @@
response_harm = "smacks"
melee_damage_lower = 8
melee_damage_upper = 12
- attacktext = "slams"
- attack_sound = 'sound/weapons/punch1.ogg'
+ attacktext = "glomps"
+ attack_sound = 'sound/effects/blobattack.ogg'
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)
ventcrawler = VENTCRAWLER_ALWAYS
blood_volume = 0
@@ -33,12 +34,19 @@
minbodytemp = 250 //weak to cold
maxbodytemp = 1500
pressure_resistance = 600
+ sight = SEE_MOBS
var/unstealth = FALSE
var/knockdown_people = 1
+ var/playerTransformCD = 50
+ var/playerTfTime
var/static/mimic_blacklisted_transform_items = typecacheof(list(
/obj/item/projectile,
/obj/item/radio/intercom))
- var/turns_since_notarget
+ var/warned
+ var/playstyle_string = "You are a mimic, a tricky creature that can take the form of \
+ almost any items nearby by shift-clicking it. While morphed, you move slowly and do less damage. \
+ Finally, you can restore yourself to your original form while morphed by shift-clicking yourself. \
+ Attacking carbon lifeforms will heal you at the cost of destructuring their DNA."
/mob/living/simple_animal/hostile/hs13mimic/Initialize()
. = ..()
@@ -52,20 +60,29 @@
/mob/living/simple_animal/hostile/hs13mimic/Life()
. = ..()
- turns_since_notarget++
- if(turns_since_notarget >= 5)
- turns_since_notarget = 0
- if(unstealth && (!target || isdead(target)))
- target = null
- trytftorandomobject()
+ if(src.mind && !warned)
+ SEND_SOUND(src, sound('sound/ambience/antag/ling_aler.ogg'))
+ to_chat(src, src.playstyle_string)
+ warned = TRUE
/mob/living/simple_animal/hostile/hs13mimic/AttackingTarget()
. = ..()
- if(knockdown_people && . && prob(15) && iscarbon(target))
+ if(iscarbon(target))
var/mob/living/carbon/C = target
- C.Knockdown(40)
- C.visible_message("\The [src] knocks down \the [C]!", \
+ if(unstealth == FALSE && knockdown_people && .) //Guaranteed knockdown if we get the first hit while disguised. Typically, only players can do this since NPC mimics transform first before attacking.
+ unstealth = TRUE
+ restore()
+ C.Knockdown(40)
+ C.visible_message("\The [src] knocks down \the [C]!", \
"\The [src] knocks you down!")
+ else if(knockdown_people && . && prob(15))
+ C.Knockdown(40)
+ C.visible_message("\The [src] knocks down \the [C]!", \
+ "\The [src] knocks you down!")
+ if(C.nutrition >= 15)
+ C.nutrition -= (rand(7,15)) //They lose 7-15 nutrition
+ adjustBruteLoss(-3) //We heal 3 damage
+ C.adjustCloneLoss(rand(2,4)) //They also take a bit of cellular damage.
/mob/living/simple_animal/hostile/hs13mimic/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
trigger()
@@ -175,11 +192,12 @@
icon = 'hyperstation/icons/mobs/mimic.dmi'
icon_state = "mimic"
desc = initial(desc)
+ speed = initial(speed)
wander = TRUE
vision_range = 9
/mob/living/simple_animal/hostile/hs13mimic/proc/trigger()
- if(unstealth == FALSE)
+ if(unstealth == FALSE && !stat)
unstealth = TRUE
visible_message("The [src] Reveals itself to be a Mimic!")
Mimictransform()
@@ -197,7 +215,7 @@
medhudupdate()
var/list/obj/item/listItems = list()
for(var/obj/item/I in oview(9,src.loc))
- if(!(is_type_in_typecache(I, mimic_blacklisted_transform_items)))
+ if(allowed(I))
listItems += I
if(LAZYLEN(listItems))
var/obj/item/changedReference = pick(listItems)
@@ -210,6 +228,26 @@
else
Mimictransform()
+/mob/living/simple_animal/hostile/hs13mimic/proc/allowed(atom/movable/A)
+ return !is_type_in_typecache(A, mimic_blacklisted_transform_items) && (isitem(A))
+
+/mob/living/simple_animal/hostile/hs13mimic/ShiftClickOn(atom/movable/A) //if by any chance a player takes control of them
+ if(playerTfTime <= world.time && !stat)
+ if(A == src)
+ restore()
+ playerTfTime = world.time + playerTransformCD
+ return
+ if(istype(A) && allowed(A))
+ unstealth = FALSE
+ name = A.name
+ icon = A.icon
+ icon_state = A.icon_state
+ desc = A.desc
+ speed = 5
+ playerTfTime = world.time + playerTransformCD
+ else
+ to_chat(src, "You need to wait a little longer before you can shift into something else!")
+ ..()
//Event control
diff --git a/hyperstation/code/modules/events/crystalline_reentry.dm b/hyperstation/code/modules/events/crystalline_reentry.dm
index 034e5ce3..bcdb01c5 100644
--- a/hyperstation/code/modules/events/crystalline_reentry.dm
+++ b/hyperstation/code/modules/events/crystalline_reentry.dm
@@ -14,6 +14,7 @@
/datum/round_event/crystalline_reentry
announceWhen = 0
+ startWhen = 10
fakeable = FALSE
/datum/round_event/crystalline_reentry/announce(fake)
@@ -177,7 +178,6 @@
if(asteroidhealth <= 0)
collision_effect()
atmos_spawn_air("water_vapor=1000;TEMP=0") //brr
- make_debris()
switch(rand(1,100))
if(1 to 20)
var/obj/structure/spawner/crystalline/M = new(src.loc)
@@ -205,6 +205,7 @@
new thing_to_spawn(get_turf(src))
/obj/effect/crystalline_reentry/proc/collision_effect()
+ make_debris()
explosion(src.loc, 0, 0, 5, 3, 1, 0, 0, 0, 0)
var/sound/meteor_sound = sound(meteorsound)
var/random_frequency = get_rand_frequency()
@@ -267,8 +268,8 @@
/obj/structure/spawner/crystalline/proc/delayedInitialize()
//Why is this needed? Simple, because apparently explosion is so slow that it triggers after the spawner spawns and kills it on the spot. This just makes it killable.
resistance_flags = FIRE_PROOF | LAVA_PROOF
- max_integrity = 250
- obj_integrity = 250
+ max_integrity = 225
+ obj_integrity = 225
/obj/effect/light_emitter/crystalline
set_luminosity = 4
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index b0fc76df..61ad164d 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/tools/mapmerge2/requirements.txt b/tools/mapmerge2/requirements.txt
index ce5a9546..999167e9 100644
--- a/tools/mapmerge2/requirements.txt
+++ b/tools/mapmerge2/requirements.txt
@@ -1,3 +1,3 @@
pygit2==0.27.2
bidict==0.13.1
-Pillow==8.1.1
+Pillow==8.2.0