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