diff --git a/code/datums/mapgen/biomes/beach_biomes.dm b/code/datums/mapgen/biomes/beach_biomes.dm index a36703712f34..04a3c3999c14 100644 --- a/code/datums/mapgen/biomes/beach_biomes.dm +++ b/code/datums/mapgen/biomes/beach_biomes.dm @@ -24,50 +24,35 @@ mob_spawn_list = list( /mob/living/simple_animal/butterfly = 1, // /mob/living/simple_animal/butterfly/beach = 1, -// /mob/living/simple_animal/slime/pet/beach = 1, -// /mob/living/simple_animal/chicken/rabbit/normal/beach = 1, + /mob/living/simple_animal/chicken/rabbit/normal = 1, // /mob/living/simple_animal/chicken/beach = 1, // /mob/living/simple_animal/chick/beach = 1, -// /mob/living/simple_animal/mouse/beach = 1, -// /mob/living/simple_animal/cow/beach = 1, -// /mob/living/simple_animal/deer/beach = 1 + /mob/living/simple_animal/mouse = 1, + /mob/living/simple_animal/cow = 1, + /mob/living/simple_animal/deer = 1 ) mob_spawn_chance = 1 /datum/biome/grass/dense - flora_spawn_chance = 65 + flora_spawn_chance = 70 mob_spawn_list = list( -// /mob/living/simple_animal/pet/cat/cak/beach = 1, -// /mob/living/simple_animal/butterfly/beach = 4, -// /mob/living/simple_animal/hostile/retaliate/poison/snake/beach = 5, -// /mob/living/simple_animal/slime/random/beach = 3, -// /mob/living/simple_animal/hostile/poison/bees/toxin/beach = 3 - /mob/living/simple_animal/slime/random = 3, + + /mob/living/simple_animal/butterfly = 4, + /mob/living/simple_animal/hostile/retaliate/poison/snake = 5, + /mob/living/simple_animal/hostile/poison/bees/toxin = 3, ) mob_spawn_chance = 2 feature_spawn_chance = 0.1 -// feature_spawn_list = list(/obj/structure/spawner/cave/beach = 1) /datum/biome/beach open_turf_types = list(/turf/open/floor/plating/asteroid/sand/lit = 1) -// mob_spawn_list = list(/mob/living/simple_animal/crab/beach = 7, /mob/living/simple_animal/turtle/beach = 4, /mob/living/simple_animal/hostile/retaliate/gator/steppy = 1) - mob_spawn_list = list(/mob/living/simple_animal/crab = 7, /mob/living/simple_animal/turtle = 4, /mob/living/simple_animal/hostile/retaliate/gator = 1) + mob_spawn_list = list(/mob/living/simple_animal/crab = 7, /mob/living/simple_animal/hostile/asteroid/lobstrosity/beach = 5) mob_spawn_chance = 1 - feature_spawn_chance = 3 - feature_spawn_list = list( - /obj/structure/chair/plastic = 7, - /obj/item/toy/beach_ball = 12, - /obj/structure/fluff/beach_umbrella = 20, - /obj/structure/fluff/beach_umbrella/engine = 18, - /obj/item/storage/cans/sixbeer = 2, - /obj/item/clothing/mask/cigarette/rollie/cannabis = 2, - /obj/item/clothing/under/shorts/purple = 4, - /obj/item/clothing/under/shorts/red = 4 - ) flora_spawn_list = list( - /obj/structure/flora/tree/palm = 1 + /obj/structure/flora/tree/palm = 1, + /obj/structure/flora/rock/beach = 3, ) - flora_spawn_chance = 1 + flora_spawn_chance = 3 /datum/biome/beach/dense open_turf_types = list(/turf/open/floor/plating/asteroid/sand/dense/lit = 1) diff --git a/code/datums/mapgen/biomes/jungle_biomes.dm b/code/datums/mapgen/biomes/jungle_biomes.dm index 255e4601a5e6..331e52d6b0d0 100644 --- a/code/datums/mapgen/biomes/jungle_biomes.dm +++ b/code/datums/mapgen/biomes/jungle_biomes.dm @@ -3,34 +3,52 @@ flora_spawn_list = list( /obj/structure/flora/grass/jungle = 1, /obj/structure/flora/grass/jungle/b = 1, - /obj/structure/flora/tree/jungle = 1, + /obj/structure/flora/tree/jungle = 3, /obj/structure/flora/rock/jungle = 1, /obj/structure/flora/junglebush = 1, /obj/structure/flora/junglebush/b = 1, /obj/structure/flora/junglebush/c = 1, - /obj/structure/flora/junglebush/large = 1 + /obj/structure/flora/junglebush/large = 1, + /obj/structure/spacevine/dense = 5, + /obj/structure/spacevine/dense = 2, ) - flora_spawn_chance = 20 + flora_spawn_chance = 90 mob_spawn_chance = 0.3 mob_spawn_list = list(/mob/living/carbon/monkey = 5) /datum/biome/jungle/dense - flora_spawn_chance = 30 + flora_spawn_chance = 100 open_turf_types = list(/turf/open/floor/plating/grass/jungle = 1, /turf/open/floor/plating/dirt/jungle/dark = 9) + flora_spawn_list = list( + /obj/structure/flora/grass/jungle = 1, + /obj/structure/flora/grass/jungle/b = 1, + /obj/structure/flora/tree/jungle = 5, + /obj/structure/flora/rock/jungle = 1, + /obj/structure/flora/junglebush = 1, + /obj/structure/flora/junglebush/b = 1, + /obj/structure/flora/junglebush/c = 1, + /obj/structure/flora/junglebush/large = 1, + /obj/structure/spacevine/dense = 20, + ) mob_spawn_chance = 0.6 //mob_spawn_list = list(/mob/living/simple_animal/hostile/gorilla/beach = 1, /mob/living/carbon/monkey = 3) mob_spawn_list = list(/mob/living/simple_animal/hostile/gorilla = 1, /mob/living/carbon/monkey = 3) /datum/biome/jungle/plains open_turf_types = list(/turf/open/floor/plating/grass/jungle/lit = 1) - flora_spawn_chance = 7 + flora_spawn_chance = 50 mob_spawn_chance = 1 mob_spawn_list = list(/mob/living/carbon/monkey = 1) /datum/biome/mudlands open_turf_types = list(/turf/open/floor/plating/dirt/jungle/dark/lit = 1) - flora_spawn_list = list(/obj/structure/flora/grass/jungle = 1, /obj/structure/flora/grass/jungle/b = 1, /obj/structure/flora/rock/jungle = 1) - flora_spawn_chance = 3 + flora_spawn_list = list( + /obj/structure/flora/grass/jungle = 1, + /obj/structure/flora/grass/jungle/b = 1, + /obj/structure/flora/rock/jungle = 1, + /obj/structure/spacevine = 5, + ) + flora_spawn_chance = 20 mob_spawn_chance = 0.05 mob_spawn_list = list(/mob/living/simple_animal/hostile/poison/giant_spider/tarantula = 1) @@ -78,7 +96,7 @@ /datum/biome/cave/lush open_turf_types = list(/turf/open/floor/plating/grass/jungle = 1) closed_turf_types = list(/turf/closed/mineral/random/jungle = 1) - flora_spawn_chance = 25 + flora_spawn_chance = 50 flora_spawn_list = list( /obj/structure/flora/tree/jungle/small = 1, /obj/structure/flora/ausbushes/brflowers = 1, @@ -98,7 +116,8 @@ /obj/structure/flora/ausbushes/stalkybush = 1, /obj/structure/flora/ausbushes/sunnybush = 1, /obj/structure/flora/ausbushes/ywflowers = 1, - /obj/structure/spacevine = 1, + /obj/structure/spacevine/dense = 20, + /obj/structure/spacevine/dense = 20, /obj/structure/flora/rock/jungle = 1, /obj/structure/flora/ash/space/voidmelon = 1 ) diff --git a/code/datums/mapgen/biomes/snow_biomes.dm b/code/datums/mapgen/biomes/snow_biomes.dm index 77d3207f3c2b..f1d897d80773 100644 --- a/code/datums/mapgen/biomes/snow_biomes.dm +++ b/code/datums/mapgen/biomes/snow_biomes.dm @@ -17,8 +17,9 @@ /mob/living/simple_animal/hostile/asteroid/polarbear/random = 30, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10, - /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 20, - /mob/living/simple_animal/hostile/asteroid/ice_whelp = 20, + /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 10, + /mob/living/simple_animal/hostile/asteroid/ice_whelp = 10, + /mob/living/simple_animal/hostile/asteroid/lobstrosity = 10, ) feature_spawn_chance = 0.1 feature_spawn_list = list( @@ -72,8 +73,9 @@ /mob/living/simple_animal/hostile/asteroid/polarbear/random = 30, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10, - /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 15, - /mob/living/simple_animal/hostile/asteroid/ice_whelp = 15, + /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 5, + /mob/living/simple_animal/hostile/asteroid/ice_whelp = 5, + /mob/living/simple_animal/hostile/asteroid/lobstrosity = 5, ) mob_spawn_chance = 1 @@ -92,8 +94,9 @@ /mob/living/simple_animal/hostile/asteroid/polarbear/random = 30, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10, - /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 15, - /mob/living/simple_animal/hostile/asteroid/ice_whelp = 15, + /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 5, + /mob/living/simple_animal/hostile/asteroid/ice_whelp = 5, + /mob/living/simple_animal/hostile/asteroid/lobstrosity = 5, ) feature_spawn_chance = 0.2 feature_spawn_list = list( @@ -113,7 +116,7 @@ flora_spawn_chance = 6 flora_spawn_list = list( /obj/structure/flora/grass/both = 5, - /obj/structure/flora/rock/pile = 1, + /obj/structure/flora/rock/pile/icy = 1, /obj/structure/flora/rock/icy = 1, /obj/structure/flora/ash/space = 1, /obj/structure/flora/ash/leaf_shroom = 1, @@ -130,8 +133,9 @@ /mob/living/simple_animal/hostile/asteroid/polarbear/random = 30, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10, - /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 15, - /mob/living/simple_animal/hostile/asteroid/ice_whelp = 15 + /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 5, + /mob/living/simple_animal/hostile/asteroid/ice_whelp = 5, + /mob/living/simple_animal/hostile/asteroid/lobstrosity = 10, ) feature_spawn_chance = 0.1 feature_spawn_list = list( @@ -159,8 +163,9 @@ /mob/living/simple_animal/hostile/asteroid/polarbear/random = 30, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10, - /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 15, - /mob/living/simple_animal/hostile/asteroid/ice_whelp = 15, + /mob/living/simple_animal/hostile/asteroid/ice_demon/random = 10, + /mob/living/simple_animal/hostile/asteroid/ice_whelp = 10, + /mob/living/simple_animal/hostile/asteroid/lobstrosity = 10, ) flora_spawn_chance = 3 flora_spawn_list = list( diff --git a/code/datums/mapgen/planets/jungle.dm b/code/datums/mapgen/planets/jungle.dm index c04e6ed97f39..dc3016703138 100644 --- a/code/datums/mapgen/planets/jungle.dm +++ b/code/datums/mapgen/planets/jungle.dm @@ -11,13 +11,13 @@ "cold" = list( "biome_lowest_humidity" = /datum/biome/jungle_wasteland, "biome_low_humidity" = /datum/biome/jungle/plains, - "biome_medium_humidity" = /datum/biome/jungle/plains, + "biome_medium_humidity" = /datum/biome/jungle, "biome_high_humidity" = /datum/biome/mudlands, "biome_highest_humidity" = /datum/biome/mudlands ), "warm" = list( - "biome_lowest_humidity" = /datum/biome/jungle/plains, - "biome_low_humidity" = /datum/biome/jungle/plains, + "biome_lowest_humidity" = /datum/biome/jungle, + "biome_low_humidity" = /datum/biome/jungle, "biome_medium_humidity" = /datum/biome/mudlands, "biome_high_humidity" = /datum/biome/mudlands, "biome_highest_humidity" = /datum/biome/jungle @@ -30,9 +30,9 @@ "biome_highest_humidity" = /datum/biome/mudlands ), "hot" = list( - "biome_lowest_humidity" = /datum/biome/jungle/plains, + "biome_lowest_humidity" = /datum/biome/jungle, "biome_low_humidity" = /datum/biome/jungle, - "biome_medium_humidity" = /datum/biome/jungle, + "biome_medium_humidity" = /datum/biome/jungle/dense, "biome_high_humidity" = /datum/biome/jungle/dense, "biome_highest_humidity" = /datum/biome/jungle/dense ), diff --git a/code/datums/mapgen/planets/lava.dm b/code/datums/mapgen/planets/lava.dm index 950e493432cc..77b02abe3c4d 100644 --- a/code/datums/mapgen/planets/lava.dm +++ b/code/datums/mapgen/planets/lava.dm @@ -68,7 +68,7 @@ "hot_cave" = list( "biome_lowest_humidity" = /datum/biome/cave/lavaland/rocky, "biome_low_humidity" = /datum/biome/cave/lavaland/mossy, - "biome_medium_humidity" = /datum/biome/cave/lavaland/lava, + "biome_medium_humidity" = /datum/biome/cave/lavaland/mossy, "biome_high_humidity" = /datum/biome/cave/lavaland/lava, "biome_highest_humidity" = /datum/biome/cave/lavaland/lava ) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index e751e1f2be2f..24f9a777361e 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -741,3 +741,26 @@ /datum/status_effect/metab_frozen/on_remove() . = ..() REMOVE_TRAIT(owner, TRAIT_NOMETABOLISM, "[STATUS_EFFECT_TRAIT]_[id]") + +/datum/status_effect/stagger + id = "stagger" + status_type = STATUS_EFFECT_REFRESH + duration = 30 SECONDS + tick_interval = 1 SECONDS + alert_type = null + +/datum/status_effect/stagger/on_apply() + owner.next_move_modifier *= 1.5 + if(ishostile(owner)) + var/mob/living/simple_animal/hostile/simple_owner = owner + simple_owner.ranged_cooldown_time *= 2.5 + return TRUE + +/datum/status_effect/stagger/on_remove() + . = ..() + if(QDELETED(owner)) + return + owner.next_move_modifier /= 1.5 + if(ishostile(owner)) + var/mob/living/simple_animal/hostile/simple_owner = owner + simple_owner.ranged_cooldown_time /= 2.5 diff --git a/code/game/turfs/open/floor/plating/asteroid.dm b/code/game/turfs/open/floor/plating/asteroid.dm index e69abd9580cd..2f6d5c7e102b 100644 --- a/code/game/turfs/open/floor/plating/asteroid.dm +++ b/code/game/turfs/open/floor/plating/asteroid.dm @@ -314,6 +314,8 @@ icon_state = "[environment_type][rand(1,8)]" /turf/open/floor/plating/asteroid/iceberg/lit + light_range = 2 + light_power = 1 /turf/open/floor/plating/asteroid/snow/icemoon diff --git a/code/game/turfs/open/floor/plating/planet.dm b/code/game/turfs/open/floor/plating/planet.dm index 8ae9aeec47ce..036fc68b7379 100644 --- a/code/game/turfs/open/floor/plating/planet.dm +++ b/code/game/turfs/open/floor/plating/planet.dm @@ -12,9 +12,6 @@ clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE - light_range = 2 - light_power = 0.6 - light_color = COLOR_VERY_LIGHT_GRAY /turf/open/floor/plating/dirt/dark icon_state = "greenerdirt" @@ -56,6 +53,10 @@ baseturfs = /turf/open/floor/plating/dirt/jungle smooth_icon = 'icons/turf/floors/junglegrass.dmi' +/turf/open/floor/plating/grass/jungle/lit + light_range = 2 + light_power = 1 + /turf/closed/mineral/random/jungle turf_type = /turf/open/floor/plating/grass/jungle baseturfs = /turf/open/floor/plating/grass/jungle @@ -63,9 +64,6 @@ /obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40, /obj/item/stack/ore/titanium = 11, /obj/item/stack/ore/bluespace_crystal = 1) -/turf/open/floor/plating/grass/jungle/lit - light_range = 2 - light_power = 1 /turf/open/floor/plating/dirt/jungle/dark/lit light_range = 2 diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 17493ae6f1e3..0e2a47a5cc02 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -920,3 +920,16 @@ . += "[icon_state]_uncharged" if(wielded) . += "[icon_state]_lit" + +/obj/item/crusher_trophy/lobster_claw + name = "lobster claw" + icon_state = "lobster_claw" + desc = "A lobster claw." + denied_type = /obj/item/crusher_trophy/lobster_claw + bonus_value = 1 + +/obj/item/crusher_trophy/lobster_claw/effect_desc() + return "mark detonation to briefly stagger the target for [bonus_value] seconds" + +/obj/item/crusher_trophy/lobster_claw/on_mark_detonation(mob/living/target, mob/living/user) + target.apply_status_effect(/datum/status_effect/stagger, bonus_value SECONDS) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index e9ac7e464e5f..bd12d1c60b14 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -599,6 +599,8 @@ if(!can_charge_target(target)) return FALSE Shake(15, 15, 1 SECONDS) + var/obj/effect/temp_visual/decoy/new_decoy = new /obj/effect/temp_visual/decoy(loc,src) + animate(new_decoy, alpha = 0, color = "#5a5858", transform = matrix()*2, time = 3) target.visible_message("[src] prepares to pounce!") addtimer(CALLBACK(src, .proc/handle_charge_target, target), 1.5 SECONDS, TIMER_STOPPABLE) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm new file mode 100644 index 000000000000..606cf856d4d3 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm @@ -0,0 +1,43 @@ +/** + * Lobstrosities, the poster boy of charging AI mobs. Drops crab meat and bones. + * Outside of charging, it's intended behavior is that it is generally slow moving, but makes up for that with a knockdown attack to score additional hits. + */ +/mob/living/simple_animal/hostile/asteroid/lobstrosity + name = "arctic lobstrosity" + desc = "A marvel of evolution gone wrong, the frosty ice produces underground lakes where these ill tempered seafood gather. Beware its charge." + icon = 'icons/mob/icemoon/icemoon_monsters.dmi' + icon_state = "arctic_lobstrosity" + icon_living = "arctic_lobstrosity" + icon_dead = "arctic_lobstrosity_dead" + mob_biotypes = MOB_ORGANIC|MOB_BEAST + mouse_opacity = MOUSE_OPACITY_ICON + friendly_verb_continuous = "chitters at" + friendly_verb_simple = "chits at" + speak_emote = list("chitters") + speed = 3 + move_to_delay = 10 + maxHealth = 150 + health = 150 + obj_damage = 15 + melee_damage_lower = 15 + melee_damage_upper = 19 + attack_verb_continuous = "snips" + attack_verb_simple = "snip" + attack_sound = 'sound/weapons/bite.ogg' + //attack_vis_effect = ATTACK_EFFECT_BITE //the closest we have to a crustacean pinching attack effect rn. + weather_immunities = list("snow") + vision_range = 5 + aggro_vision_range = 7 + charger = TRUE + charge_distance = 4 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 2, /obj/item/stack/sheet/bone = 2) + robust_searching = TRUE + footstep_type = FOOTSTEP_MOB_CLAW + crusher_loot = /obj/item/crusher_trophy/lobster_claw + +/mob/living/simple_animal/hostile/asteroid/lobstrosity/beach + name = "tropical lobstrosity" + desc = "A marvel of evolution gone wrong, on the tropical beaches, it's diet of crabs makes it have a red hued shell. Beware its charge." + icon_state = "lobstrosity" + icon_living = "lobstrosity" + icon_dead = "lobstrosity_dead" diff --git a/shiptest.dme b/shiptest.dme index 6805ec2d727b..5a4cd1ac29a3 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2619,6 +2619,7 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice demon.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice whelp.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\lobstrosity.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\polarbear.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\wolf.dm"