From 6f0fa34a57d05ffa10a5855f0df940808a4d7625 Mon Sep 17 00:00:00 2001 From: FluffMedic <109300046+FluffMedic@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:14:00 -0500 Subject: [PATCH] Christmas Gift (#7474) --- modular_chomp/code/datums/crafting/items.dm | 299 ++++++++++++ modular_chomp/code/datums/crafting/recipes.dm | 93 +++- modular_chomp/code/datums/supplypacks/misc.dm | 34 ++ .../structures/crate_lockers/largecrate.dm | 25 + .../code/modules/event/dangerinfestation.dm | 6 +- .../code/modules/event/event_container_ch.dm | 3 +- .../modules/event/heavydangerinfestation.dm | 124 +++++ .../code/modules/food/food/snacks/meat.dm | 28 +- .../living/simple_mob/subtypes/vore/event.dm | 279 ----------- .../simple_mob/subtypes/vore/spacecritters.dm | 436 ++++++++++++++++++ modular_chomp/icons/mob/spaceinvader.dmi | Bin 3317 -> 8429 bytes modular_chomp/icons/obj/crafting.dmi | Bin 0 -> 699 bytes vorestation.dme | 4 + 13 files changed, 1046 insertions(+), 285 deletions(-) create mode 100644 modular_chomp/code/datums/crafting/items.dm create mode 100644 modular_chomp/code/datums/supplypacks/misc.dm create mode 100644 modular_chomp/code/modules/event/heavydangerinfestation.dm create mode 100644 modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm create mode 100644 modular_chomp/icons/obj/crafting.dmi diff --git a/modular_chomp/code/datums/crafting/items.dm b/modular_chomp/code/datums/crafting/items.dm new file mode 100644 index 0000000000..5cfb323f93 --- /dev/null +++ b/modular_chomp/code/datums/crafting/items.dm @@ -0,0 +1,299 @@ +#define MAT_WISP "strange wisp" +#define MAT_FROSCALE "frost scale" +#define MAT_CRYSCALE "crystal scale" +#define MAT_DREAMSCALE "furred scale" +#define MAT_SHELLCHITIN "shell chitin" + +/datum/material/wisp + name = MAT_WISP + icon_colour = "#F13C00" + stack_type = /obj/item/stack/material/wisp + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 30 + weight = 10 + ignition_point = T0C+600 + melting_point = T0C+800 + protectiveness = 5 + conductive = 0 + opacity = 0.5 + reflectivity = 30 + supply_conversion_value = 6 + +/obj/item/stack/material/wisp + name = "Strange Wisp" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "wisp" + default_type = MAT_WISP + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + + +/datum/material/frostscale + name = MAT_FROSCALE + icon_colour = "#0000CC" + stack_type = /obj/item/stack/material/frostscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 250 + weight = 50 + ignition_point = T0C+20 + melting_point = T0C+40 + protectiveness = 30 + conductive = 0 + opacity = 0.5 + reflectivity = 0 + supply_conversion_value = 8 + +/obj/item/stack/material/frostscale + name = "Frost Scale" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "scale" + color = "#0000CC" + default_type = MAT_FROSCALE + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +/datum/material/crystalscale + name = MAT_CRYSCALE + icon_colour = "#006633" + stack_type = /obj/item/stack/material/crystalscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 250 + weight = 10 + radiation_resistance = 25 //less then lead because it's lighter then lead. + protectiveness = 30 + conductive = 0 + opacity = 0.25 + reflectivity = 60 + supply_conversion_value = 4 + +/obj/item/stack/material/crystalscale + name = "Crystak Scale" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "scale" + color = "#006633" + default_type = MAT_CRYSCALE + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +/datum/material/dreamscale + name = MAT_DREAMSCALE + icon_colour = "#006633" + stack_type = /obj/item/stack/material/dreamscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 200 + weight = 30 + ignition_point = T0C+200 + melting_point = T0C+400 + protectiveness = 60 + reflectivity = 30 + supply_conversion_value = 1 + +/obj/item/stack/material/dreamscale + name = "Dream Scale" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "scale" + default_type = MAT_DREAMSCALE + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +/datum/material/shellchitin + name = MAT_SHELLCHITIN + icon_colour = "#006633" + stack_type = /obj/item/stack/material/dreamscale + stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4) + icon_base = "solid" + icon_reinf = "reinf_mesh" + integrity = 250 + weight = 100 + ignition_point = T0C+300 + melting_point = T0C+600 + protectiveness = 50 + reflectivity = 0 + supply_conversion_value = 1 + +/obj/item/stack/material/shellchitin + name = "Shell Chitin" + desc = "The by-product of mob grinding." + icon = 'modular_chomp/icons/obj/crafting.dmi' + icon_state = "shell" + default_type = MAT_SHELLCHITIN + no_variants = FALSE + pass_color = TRUE + strict_color_stacking = TRUE + +//Putting this here for now because in intial PRs, I enjoy making/altering as few files as possible. +//Solar ray stuff +/obj/item/clothing/suit/armor/firecloak + name = "solar cloak" + desc = "A strange cloak made from remnants of solar rays." + icon = 'icons/inventory/accessory/item.dmi' + icon_state = "seccloak" + color = "#F13C00" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/firecloak/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(istype(damage_source, /obj/item/projectile)) + return FALSE + if(attacker && attacker != user) + shoot_fire(attacker) + else + return FALSE + +/obj/item/clothing/suit/armor/firecloak/proc/shoot_fire(mob/target) + var/obj/item/projectile/P = new /obj/item/projectile/fire(get_turf(src)) + P.launch_projectile(target, BP_TORSO, src) + +/obj/item/weapon/material/sword/rapier/solar + name = "solar rapier" + desc = "A slender, fancy and sharply pointed sword, wisps of fire swirling around it." + icon_state = "rapier" + item_state = "rapier" + slot_flags = SLOT_BELT + applies_material_colour = 0 + force_divisor = 0.50 + color = "#F13C00" + +/obj/item/weapon/material/sword/rapier/solar/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + . = ..() + target.add_modifier(/datum/modifier/fire/weak, 12 SECONDS) //should be 12 damage? + +//Icicle +/obj/item/weapon/gun/energy/icelauncher + name = "Strange Pistol" + desc = "A homemade and somehow functional icicle launcher." + icon = 'icons/obj/gun_ch.dmi' + icon_state = "ziplas" + item_state = "ziplas" + color = "#0000CC" + w_class = ITEMSIZE_SMALL + slot_flags = SLOT_BELT|SLOT_BACK + charge_cost = 300 //You got 5 shot + battery_lock = 1 + projectile_type = /obj/item/projectile/icicle //But it hurts a lot + cell_type = /obj/item/weapon/cell/device/weapon + +/obj/item/clothing/shoes/boots/frost + name = "frost boots" + desc = "Handmade boots of scavanged bits." + icon_state = "winterboots" + color = "#0000CC" + cold_protection = FEET + min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = FEET + max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE + snow_speed = -1 + rock_climbing = TRUE + item_flags = NOSLIP + +//Turtle +/obj/item/weapon/material/twohanded/sledgehammer/gravity + name = "Gravity Sledgehammer" + desc = "A sledgehammer in bits of a gravity turtle's shell." + unwielded_force_divisor = 0.25 + force_divisor = 0.40 // + dulled_divisor = 0.80 //Still metal on a stick + w_class = ITEMSIZE_LARGE + slot_flags = SLOT_BACK + force_wielded = 25 + applies_material_colour = 1 + +/obj/item/weapon/material/twohanded/sledgehammer/gravity/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + . = ..() + var/atom/target_zone = get_edge_target_turf(user,get_dir(user, target)) + if(!target.anchored) + target.throw_at(target_zone, 6, 2, user, FALSE) + user.visible_message("\The [src] discharges with a thunderous boom!") + playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1) + +//Eel stuff +/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester + name = "Scaled Scythe" + desc = "A scythe cladded in dream eel scales, allowing for better defense at the cost of offense." + force_wielded = 18 + force_divisor = 0.3 // 18 with hardness 60 (steel) + unwielded_force_divisor = 0.10 + var/defend_chance = 50 + var/projectile_parry_chance = 50 + +/obj/item/clothing/suit/armor/alien/dreamercloak + name = "Dreamer Cloak" + desc = "A strange cloak, something about it feels off." + icon = 'icons/inventory/accessory/item.dmi' + icon_state = "seccloak" //custom sprite for this for sure. + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + block_chance = 35 + slowdown = -0.5 + +//uggg, why isnt this apart of the base material melee weapons +/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(.) + return . + if(default_parry_check(user, attacker, damage_source) && prob(defend_chance)) + user.visible_message("\The [user] parries [attack_text] with \the [src]!") + return 1 + if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance)) + user.visible_message("\The [user] deflects [attack_text] with \the [src]!") + return 1 + + return 0 + +/obj/item/clothing/gloves/toxinregen + name = "purging gloves" + desc = "A pair of gloves with a small storage of green liquid on the outside. On the inside, a a hypodermic needle can be seen \ + on each glove." + icon_state = "regen" + item_state = "graygloves" + siemens_coefficient = 0 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE + +/obj/item/clothing/gloves/toxinregen/equipped(var/mob/living/carbon/human/H) + if(H && H.gloves == src) + wearer = H + if(wearer.can_feel_pain()) + to_chat(H, "You feel a stabbing sensation in your hands as you slide \the [src] on!") + wearer.custom_pain("You feel a sharp pain in your hands!",1) + ..() + +/obj/item/clothing/gloves/toxinregen/dropped(var/mob/living/carbon/human/H) + ..() + if(wearer) + if(wearer.can_feel_pain()) + to_chat(wearer, "You feel the hypodermic needles as you slide \the [src] off!") + wearer.custom_pain("Your hands hurt like hell!",1) + wearer = null + +/obj/item/clothing/gloves/toxinregen/New() + START_PROCESSING(SSobj, src) + ..() + +/obj/item/clothing/gloves/toxinregen/Destroy() + wearer = null + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/clothing/gloves/toxinregen/process() + if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD || wearer.nutrition <= 10) + return + if(wearer.getToxLoss()) + wearer.adjustToxLoss(-0.5) \ No newline at end of file diff --git a/modular_chomp/code/datums/crafting/recipes.dm b/modular_chomp/code/datums/crafting/recipes.dm index 63736b1ea7..cfbf18b849 100644 --- a/modular_chomp/code/datums/crafting/recipes.dm +++ b/modular_chomp/code/datums/crafting/recipes.dm @@ -31,4 +31,95 @@ list(/obj/item/stack/material/leather = 1) ) time = 240 - category = CAT_MISC \ No newline at end of file + category = CAT_MISC + + +/datum/crafting_recipe/solarcloak + name = "solar cloak" + result = /obj/item/clothing/suit/armor/firecloak + reqs = list( + list(/obj/item/stack/material/cloth = 10), + list(/obj/item/stack/material/wisp = 2) + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/dreamcloak + name = "solar cloak" + result = /obj/item/clothing/suit/armor/alien/dreamercloak + reqs = list( + list(/obj/item/stack/material/cloth = 10), + list(/obj/item/stack/material/dreamscale = 2) + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/toxinregengloves + name = "purging gloves" + result = /obj/item/clothing/gloves/toxinregen + reqs = list( + list(/obj/item/stack/material/cloth = 10), + list(/obj/item/stack/material/crystalscale = 2), + list(/obj/item/stack/material/resin = 8), + /obj/item/weapon/stock_parts/capacitor = 1 + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/iceboots + name = "frost boots" + result = /obj/item/clothing/shoes/boots/frost + reqs = list( + list(/obj/item/stack/material/frostscale = 2), + /obj/item/clothing/shoes/boots/winter = 1 + ) + time = 60 + category = CAT_CLOTHING + +/datum/crafting_recipe/strangepistol + name = "Strange Weapon" + result = /obj/item/weapon/gun/energy/icelauncher + reqs = list( + list(/obj/item/stack/material/steel = 8), + list(/obj/item/stack/material/plastic = 3), + list(/obj/item/weapon/cell/device = 1), + list(/obj/item/stack/material/frostscale = 2) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/solarrapier + name = "Solar Rapier" + result = /obj/item/weapon/material/sword/rapier/solar + reqs = list( + list(/obj/item/stack/material/steel = 15), + list(/obj/item/stack/material/leather = 3), + list(/obj/item/stack/material/wisp = 2) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/gravityhammer + name = "Gravity Hammer" + result = /obj/item/weapon/material/twohanded/sledgehammer/gravity + reqs = list(list(/obj/item/stack/material/steel = 15), + list(/obj/item/stack/material/leather = 3), + list(/obj/item/stack/material/shellchitin = 2), + list(/obj/item/weapon/cell/high = 1) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/harvester + name = "Harvester" + result = /obj/item/weapon/material/twohanded/fireaxe/scythe/harvester + reqs = list(list(/obj/item/stack/material/steel = 15), + list(/obj/item/stack/material/leather = 3), + list(/obj/item/stack/material/dreamscale = 2) + ) + time = 60 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON \ No newline at end of file diff --git a/modular_chomp/code/datums/supplypacks/misc.dm b/modular_chomp/code/datums/supplypacks/misc.dm new file mode 100644 index 0000000000..9641fc496a --- /dev/null +++ b/modular_chomp/code/datums/supplypacks/misc.dm @@ -0,0 +1,34 @@ +/datum/supply_pack/misc/solarray + name = "Exotic crate - Solar Ray" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/solarray + containername = "Exotic crate" + +/datum/supply_pack/misc/livingice + name = "Exotic crate - Living Ice" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/livingice + containername = "Exotic crate" + +/datum/supply_pack/misc/radcrab + name = "Exotic crate - Crystaline Crab" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/radcrab + containername = "Exotic crate" + +/datum/supply_pack/misc/dreameel + name = "Exotic crate - Dream Eel" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/dreameel + containername = "Exotic crate" + +/datum/supply_pack/misc/gravityshell + name = "Exotic crate - Gravity Shell" + contains = list() + cost = 100 + containertype = /obj/structure/largecrate/animal/gravityshell + containername = "Exotic crate" \ No newline at end of file diff --git a/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm b/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm index 034459d944..9920576c9f 100644 --- a/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm +++ b/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm @@ -23,3 +23,28 @@ name = "SWOOPIE XL CleanBot Starter Kit" desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION. Consult spiritual observer intervention to avoid rogue units. (That means ghosts. Ominous.)" starts_with = list(/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie) + +/obj/structure/largecrate/animal/solarray + name = "Exotic crate" + desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION" + starts_with = list(/mob/living/simple_mob/vore/spacecritter/solarray) + +/obj/structure/largecrate/animal/livingice + name = "Exotic crate" + desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION" + starts_with = list(/mob/living/simple_mob/vore/spacecritter/livingice) + +/obj/structure/largecrate/animal/radcrab + name = "Exotic crate" + desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION" + starts_with = list(/mob/living/simple_mob/vore/spacecritter/radcrab) + +/obj/structure/largecrate/animal/dreameel + name = "Exotic crate" + desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION" + starts_with = list(/mob/living/simple_mob/vore/spacecritter/dreameel) + +/obj/structure/largecrate/animal/gravityshell + name = "Exotic crate" + desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION" + starts_with = list(/mob/living/simple_mob/vore/spacecritter/gravityshell) \ No newline at end of file diff --git a/modular_chomp/code/modules/event/dangerinfestation.dm b/modular_chomp/code/modules/event/dangerinfestation.dm index 21905d5887..862995d913 100644 --- a/modular_chomp/code/modules/event/dangerinfestation.dm +++ b/modular_chomp/code/modules/event/dangerinfestation.dm @@ -57,18 +57,18 @@ danger = rand(0,2) switch(danger) if(DANGER_CRAB) - spawn_types = list(/mob/living/simple_mob/vore/radcrab) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab) min_number = 1 max_number = 4 dangerstring = "crystaline crabs" if(DANGER_ICE) - spawn_types = list(/mob/living/simple_mob/vore/livingice) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice) min_number = 1 max_number = 4 dangerstring = "strange entities" if(DANGER_RAY) - spawn_types = list(/mob/living/simple_mob/vore/solarray) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray) min_number = 1 max_number = 4 dangerstring = "solar rays" diff --git a/modular_chomp/code/modules/event/event_container_ch.dm b/modular_chomp/code/modules/event/event_container_ch.dm index 8321a41c01..c0e867e6e8 100644 --- a/modular_chomp/code/modules/event/event_container_ch.dm +++ b/modular_chomp/code/modules/event/event_container_ch.dm @@ -111,6 +111,7 @@ //Spacedust doesn't work, commenting this out. //new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Exotic Infestation", /datum/event/dangerinfestation, -30, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SCIENCE = 5, ASSIGNMENT_ANY = 2)), //Check if wormhole code is good and then move to enabled. // new /datum/event_meta(EVENT_LEVEL_MODERATE, "Wormholes", /datum/event/wormholes, 20, list(ASSIGNMENT_ANY = 5)), // new /datum/event_meta(EVENT_LEVEL_MODERATE, "Lost Spiders", /datum/event/spider_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1), //YW EDIT //CHOMPStation Edit: Moved to disabled. This is a YW feature that spawns spiders on carp spawns. @@ -130,7 +131,7 @@ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 15), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, -50, list(ASSIGNMENT_MEDICAL = 25), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 2)), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Excotic Infestation", /datum/event/dangerinfestation, -60, list(ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENCE = 5, ASSIGNMENT_ANY = 1)), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Exotic Horde Infestation", /datum/event/highdangerinfestation, -50, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SCIENCE = 5, ASSIGNMENT_ANY = 2)), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meaty Ores Wave", /datum/event/meteor_wave/meatyores, -90, list(ASSIGNMENT_ENGINEER = 50, ASSIGNMENT_MEDICAL = 10, ASSIGNMENT_ANY = 1), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)), ) add_disabled_events(list( diff --git a/modular_chomp/code/modules/event/heavydangerinfestation.dm b/modular_chomp/code/modules/event/heavydangerinfestation.dm new file mode 100644 index 0000000000..cc9b648850 --- /dev/null +++ b/modular_chomp/code/modules/event/heavydangerinfestation.dm @@ -0,0 +1,124 @@ +#define LOC_RIOT 0 +#define LOC_ATMOS 1 +#define LOC_DISPOSAL 2 +#define LOC_TECH 3 +#define LOC_VAULT 4 +#define LOC_VIRO 5 +#define LOC_BRIDGE 6 +#define LOC_BRIG 7 + +#define DANGER_CRAB 0 +#define DANGER_ICE 1 +#define DANGER_RAY 2 +#define DANGER_EEL 3 +#define DANGER_TURTLE 4 + +//infestation event of a diffrent variety +//meant for engineering and science to exploit +/datum/event/highdangerinfestation + announceWhen = 10 + endWhen = 11 + var/location + var/locstring + var/danger + var/dangerstring + +/datum/event/highdangerinfestation/start() + location = rand(0,7) + var/list/turf/simulated/floor/turfs = list() + var/spawn_area_type + switch(location) + if(LOC_RIOT) + spawn_area_type = /area/security/riot_control + locstring = "riot control" + if(LOC_ATMOS) + spawn_area_type = /area/engineering/atmos + locstring = "atmospherics" + if(LOC_DISPOSAL) + spawn_area_type = /area/maintenance/disposal + locstring = "the disposal" + if(LOC_TECH) + spawn_area_type = /area/storage/tech + locstring = "technical storage" + if(LOC_VAULT) + spawn_area_type = /area/security/nuke_storage + locstring = "the vault" + if(LOC_VIRO) + spawn_area_type = /area/medical/virology + locstring = "the virogoly" + if(LOC_BRIDGE) + spawn_area_type = /area/bridge + locstring = "the bridge" + if(LOC_BRIG) + spawn_area_type = /area/security/prison + locstring = "the brig" + + for(var/areapath in typesof(spawn_area_type)) + var/area/A = locate(areapath) + for(var/turf/simulated/floor/F in A.contents) + //VOREStation Edit - Fixes event + var/blocked = FALSE + for(var/atom/movable/AM in F) + if(AM.density) + blocked = TRUE + if(!blocked) + turfs += F + + var/list/spawn_types = list() + var/min_number + var/max_number + danger = rand(0,4) + switch(danger) + if(DANGER_CRAB) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab) + min_number = 2 + max_number = 6 + dangerstring = "crystaline crabs" + if(DANGER_ICE) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice) + min_number = 2 + max_number = 6 + dangerstring = "strange entities" + + if(DANGER_RAY) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray) + min_number = 2 + max_number = 6 + dangerstring = "solar rays" + if(DANGER_EEL) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/dreameel) + min_number = 2 + max_number = 6 + dangerstring = "strange entities" + if(DANGER_TURTLE) + spawn_types = list(/mob/living/simple_mob/vore/spacecritter/gravityshell) + min_number = 2 + max_number = 6 + dangerstring = "strange entities" + + spawn(0) + var/num = rand(min_number,max_number) + while(turfs.len > 0 && num > 0) + var/turf/simulated/floor/T = pick(turfs) + turfs.Remove(T) + num-- + var/spawn_type = pick(spawn_types) + new spawn_type(T) + +/datum/event/highdangerinfestation/announce() + command_announcement.Announce("Bioscans indicate that [dangerstring] have been entered [locstring]. Contain them before they start causing damage.", "Alien infestation") + +#undef LOC_RIOT +#undef LOC_ATMOS +#undef LOC_DISPOSAL +#undef LOC_TECH +#undef LOC_VAULT +#undef LOC_VIRO +#undef LOC_BRIDGE +#undef LOC_BRIG + +#undef DANGER_CRAB +#undef DANGER_ICE +#undef DANGER_RAY +#undef DANGER_EEL +#undef DANGER_TURTLE \ No newline at end of file diff --git a/modular_chomp/code/modules/food/food/snacks/meat.dm b/modular_chomp/code/modules/food/food/snacks/meat.dm index 4c809a662d..be6c3ddf0a 100644 --- a/modular_chomp/code/modules/food/food/snacks/meat.dm +++ b/modular_chomp/code/modules/food/food/snacks/meat.dm @@ -53,4 +53,30 @@ /obj/item/weapon/reagent_containers/food/snacks/metroidmeat/Initialize() . = ..() reagents.add_reagent("protein", 3) - reagents.add_reagent("liquidlife", 3) \ No newline at end of file + reagents.add_reagent("liquidlife", 3) + +/obj/item/weapon/reagent_containers/food/snacks/meat/raymeat + name = "Solar Ray Meat" + desc = "You aren't sure how ediable this is" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 3, "capsaicin" = 8, "condensedcapsaicin" = 8) + + +/obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat + name = "Eel Meat" + desc = "A slice from an eel" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 3, "shockchem" = 1) + + +/obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell + name = "Gravity Shell Meat" + desc = "A slice from a gravity shell" + icon_state = "meat" + center_of_mass = list("x"=17, "y"=16) + nutriment_amt = 3 + nutriment_desc = list("protein" = 24) \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm index 3a87d30b07..5246ca6523 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm @@ -1,282 +1,3 @@ -/mob/living/simple_mob/vore/solarray //solar moth lite, dies to water - name = "solar ray" - desc = "A sting ray of fire, drifting around" - icon = 'modular_chomp/icons/mob/spaceinvader.dmi' - icon_state = "solarray" - icon_living = "solarray" - icon_dead = "solarray-dead" - health = 30 - maxHealth = 30 - - movement_cooldown = 3 // Lower is faster. - aquatic_movement = 0 // If set, the mob will move through fluids with no hinderance. - - minbodytemp = 0 // Minimum "okay" temperature in kelvin - maxbodytemp = 10000 // Maximum of above - heat_damage_per_tick = 3 // Amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 2 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - - min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' - max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' - min_tox = 0 // Phoron min - max_tox = 0 // Phoron max - min_co2 = 0 // CO2 min - max_co2 = 0 // CO2 max - min_n2 = 0 // N2 min - max_n2 = 0 // N2 max - unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above - - melee_damage_lower = 12 // Lower bound of randomized melee damage - melee_damage_upper = 12 // Upper bound of randomized melee damage - attacktext = list("incinerate") // "You are [attacktext] by the mob!" - melee_miss_chance = 0 // percent chance to miss a melee attack. - attack_armor_type = "energy" // What armor does this check? - attack_armor_pen = 30 // How much armor pen this attack has. - attack_sharp = FALSE // Is the attack sharp? - attack_edge = FALSE // Does the attack have an edge? - - melee_attack_delay = 1.5 // If set, the mob will do a windup animation and can miss if the target moves out of the way. - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - hovering = TRUE - - //Damage resistances - grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure. - resistance = 0 // Damage reduction for all types - armor = list( // Values for normal getarmor() checks - "melee" = 90, - "bullet" = 95, - "laser" = 100, - "energy" = 100, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - armor_soak = list( // Values for getsoak() checks. - "melee" = 7, - "bullet" = 7, - "laser" = 7, - "energy" = 7, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - heat_resist = 1.0 - cold_resist = 1.0 - shock_resist = 0.0 - water_resist = 0.0 - taser_kill = 0 - - var/mycolour = COLOR_RED //Variable Lighting colours - var/original_temp = null //Value to remember temp - var/set_temperature = T0C + 5000 //Sets the target point of 10k degrees celsius - var/heating_power = 50000 - -/mob/living/simple_mob/vore/solarray/Life() - . = ..() - if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark - var/turf/moth_loc = get_turf(src) - if(isturf(moth_loc) && moth_loc.air) - var/datum/gas_mixture/env = moth_loc.return_air() //Gets all the information on the local air. - var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room. - var/datum/gas_mixture/removed = env.remove(transfer_moles) - var/heat_transfer = removed.get_thermal_energy_change(set_temperature) - if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius. - heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater - removed.add_thermal_energy(heat_transfer) - - else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C. - heating_power = original_temp*100 //Changed to work variable -shark //FLAME ON! This will make the moth heat up the room at an incredible rate. - heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah. - removed.add_thermal_energy(heat_transfer) - - else - return - - env.merge(removed) - - - - //Since I'm changing hyper mode to be variable we need to store old power - original_temp = heating_power - -/mob/living/simple_mob/vore/livingice //frost solar moth or blue slime on crack. Dies to lasers or slighly toasty rooms - name = "living icicle" - desc = "A strange creature, a floating shard of ice" - icon = 'modular_chomp/icons/mob/spaceinvader.dmi' - icon_state = "hermitcrab" - icon_living = "hermitcrab" - icon_dead = "hermitcrab-dead" - health = 30 - maxHealth = 30 - - movement_cooldown = 3 //VOREStation Edit - 1 is slower than normal human speed // Lower is faster. - aquatic_movement = 0 // If set, the mob will move through fluids with no hinderance. - - minbodytemp = 0 // Minimum "okay" temperature in kelvin - maxbodytemp = 300 // Maximum of above - heat_damage_per_tick = 15 // Amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 15 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - - min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' - max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' - min_tox = 0 // Phoron min - max_tox = 6 // Phoron max - min_co2 = 0 // CO2 min - max_co2 = 0 // CO2 max - min_n2 = 0 // N2 min - max_n2 = 0 // N2 max - unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above - - melee_damage_lower = 30 // Lower bound of randomized melee damage - melee_damage_upper = 30 // Upper bound of randomized melee damage - attacktext = list("attacked") // "You are [attacktext] by the mob!" - melee_miss_chance = 0 // percent chance to miss a melee attack. - attack_armor_type = "melee" // What armor does this check? - attack_armor_pen = 0 // How much armor pen this attack has. - attack_sharp = FALSE // Is the attack sharp? - attack_edge = FALSE // Does the attack have an edge? - - melee_attack_delay = 3 // If set, the mob will do a windup animation and can miss if the target moves out of the way.. - - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - hovering = TRUE - - //Damage resistances - grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure. - resistance = 0 // Damage reduction for all types - armor = list( // Values for normal getarmor() checks - "melee" = 100, - "bullet" = 100, - "laser" = 0, - "energy" = 0, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - armor_soak = list( // Values for getsoak() checks. - "melee" = 7, - "bullet" = 7, - "laser" = 0, - "energy" = 0, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - heat_resist = 0.0 - cold_resist = 0.0 - shock_resist = 0.0 - water_resist = 1.0 - -/mob/living/simple_mob/vore/livingice/proc/cold_aura() - for(var/mob/living/L in view(2, src)) - var/turf/T = get_turf(src) - var/datum/gas_mixture/env = T.return_air() - if(env) - env.add_thermal_energy(-5 * 1000) - -/mob/living/simple_mob/vore/radcrab //bullets, melee, and cold all crack the poor thing's shell - name = "crystaline crab" - desc = "A largeish hermit crab glowing green, irradting the nearby area" - icon = 'modular_chomp/icons/mob/spaceinvader.dmi' - icon_state = "hermitcrab" - icon_living = "hermitcrab" - icon_dead = "hermitcrab-dead" - health = 30 - maxHealth = 30 - - movement_cooldown = 3 //VOREStation Edit - 1 is slower than normal human speed // Lower is faster. - aquatic_movement = 1 // If set, the mob will move through fluids with no hinderance. - - minbodytemp = 260 // Minimum "okay" temperature in kelvin - maxbodytemp = 10000 // Maximum of above - heat_damage_per_tick = 15 // Amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 15 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - - min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum' - max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' - min_tox = 0 // Phoron min - max_tox = 0 // Phoron max - min_co2 = 0 // CO2 min - max_co2 = 5 // CO2 max - min_n2 = 0 // N2 min - max_n2 = 0 // N2 max - unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above - - melee_damage_lower = 2 // Lower bound of randomized melee damage - melee_damage_upper = 2 // Upper bound of randomized melee damage - attacktext = list("pinches") // "You are [attacktext] by the mob!" - melee_miss_chance = 0 // percent chance to miss a melee attack. - attack_armor_type = "melee" // What armor does this check? - attack_armor_pen = 100 // How much armor pen this attack has. - attack_sharp = TRUE // Is the attack sharp? - attack_edge = TRUE // Does the attack have an edge? - - melee_attack_delay = 0 // If set, the mob will do a windup animation and can miss if the target moves out of the way. - ai_holder_type = /datum/ai_holder/simple_mob/retaliate - hovering = TRUE - - //Damage resistances - grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure. - resistance = 0 // Damage reduction for all types - armor = list( // Values for normal getarmor() checks - "melee" = -50, - "bullet" = 0, - "laser" = 100, - "energy" = 100, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - armor_soak = list( // Values for getsoak() checks. - "melee" = 0, - "bullet" = 0, - "laser" = 7, - "energy" = 7, - "bomb" = 0, - "bio" = 0, - "rad" = 0 - ) - - heat_resist = 0.0 - cold_resist = 0.0 - shock_resist = 0.0 - water_resist = 1.0 - taser_kill = 0 - var/rads = 75 - -/mob/living/simple_mob/vore/radcrab/handle_special() - if(stat != DEAD) - irradiate() - ..() - -/mob/living/simple_mob/vore/radcrab/proc/irradiate() - SSradiation.radiate(src, rads) - -/mob/living/simple_mob/vore/solarray - vore_bump_chance = 80 - vore_bump_emote = "devours" - vore_active = 1 - vore_capacity = 1 - vore_pounce_chance = 0 - vore_default_mode = DM_DIGEST - -/mob/living/simple_mob/vore/livingice - vore_bump_chance = 0 - vore_bump_emote = "devours" - vore_active = 1 - vore_capacity = 1 - vore_pounce_chance = 0 - vore_default_mode = DM_DIGEST - -/mob/living/simple_mob/vore/radcrab - vore_bump_chance = 40 - vore_bump_emote = "devours" - vore_active = 1 - vore_capacity = 1 - vore_pounce_chance = 0 - vore_default_mode = DM_DIGEST /mob/living/simple_mob/vore/aggressive/rat maxHealth = 75 diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm new file mode 100644 index 0000000000..5506462924 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm @@ -0,0 +1,436 @@ +/mob/living/simple_mob/vore/spacecritter + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + health = 30 + maxHealth = 30 + movement_cooldown = 3 + aquatic_movement = 0 + + minbodytemp = 0 + maxbodytemp = 10000 // Maximum of above + heat_damage_per_tick = 3 + cold_damage_per_tick = 2 + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + unsuitable_atoms_damage = 2 + + melee_damage_lower = 12 + melee_damage_upper = 12 + melee_miss_chance = 0 + melee_attack_delay = 1.5 + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + hovering = TRUE + + heat_resist = 1.0 + cold_resist = 1.0 + shock_resist = 0.0 + water_resist = 1.0 + taser_kill = 0 + var/evolve = "/mob/living/simple_mob/vore/solarray/galaxyray" + var/feed = "/obj/item/weapon/ore/phoron" + var/evolvekey = "/obj/item/stack/material/tritium" + var/copy = "/mob/living/simple_mob/vore/solarray" + + +/mob/living/simple_mob/vore/spacecritter/attackby(var/obj/item/O, var/mob/user) + if(istype(O, evolvekey)) + user.drop_from_inventory(O) + qdel(O) + evolve() + if(istype(O, feed)) + user.drop_from_inventory(O) + qdel(O) + duplicate() + else + .=..() + +/mob/living/simple_mob/vore/spacecritter/proc/evolve() + var/mob/living/L + L = new evolve(get_turf(src)) + if(mind) + src.mind.transfer_to(L) + visible_message("\The [src] suddenly evolves!") + qdel(src) + +/mob/living/simple_mob/vore/spacecritter/proc/duplicate() + visible_message("\The [src] splits into two!") + new copy (src.loc) + + +/mob/living/simple_mob/vore/spacecritter/solarray //solar moth lite, dies to water + name = "solar ray" + desc = "A sting ray of fire, drifting around" + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + icon_state = "solarray" + icon_living = "solarray" + icon_dead = "solarray-dead" + attacktext = list("incinerate") + attack_armor_type = "energy" + attack_armor_pen = 30 + water_resist = 0 + + var/mycolour = COLOR_RED //Variable Lighting colours + var/original_temp = null //Value to remember temp + var/set_temperature = T0C + 5000 //Sets the target point of 10k degrees celsius + var/heating_power = 50000 + + evolve = "/mob/living/simple_mob/vore/solarray/galaxyray" + feed = "/obj/item/weapon/ore/phoron" + evolvekey = "/obj/item/stack/material/tritium" + copy = "/mob/living/simple_mob/vore/spacecritter/solarray" + + +/mob/living/simple_mob/vore/spacecritter/solarray/Life() + . = ..() + if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark + var/turf/moth_loc = get_turf(src) + if(isturf(moth_loc) && moth_loc.air) + var/datum/gas_mixture/env = moth_loc.return_air() //Gets all the information on the local air. + var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room. + var/datum/gas_mixture/removed = env.remove(transfer_moles) + var/heat_transfer = removed.get_thermal_energy_change(set_temperature) + if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius. + heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater + removed.add_thermal_energy(heat_transfer) + + else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C. + heating_power = original_temp*100 //Changed to work variable -shark //FLAME ON! This will make the moth heat up the room at an incredible rate. + heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah. + removed.add_thermal_energy(heat_transfer) + + else + return + + env.merge(removed) + + + + //Since I'm changing hyper mode to be variable we need to store old power + original_temp = heating_power + +/mob/living/simple_mob/vore/spacecritter/solarray/galaxyray + name = "galaxy ray" + icon_state = "galaxyray" + icon_living = "galaxyray" + health = 75 + maxHealth = 75 + set_temperature = T0C + 15000 + heating_power = 150000 + size_multiplier = 1.5 + +/mob/living/simple_mob/vore/spacecritter/livingice //dark blue slime but more chilly. Dies to lasers or slighly toasty rooms + name = "living icicle" + desc = "A strange creature, a crab like creature seemingly made of ice" + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + icon_state = "livingice" + icon_living = "livingice" + icon_dead = "livingice-dead" + minbodytemp = 0 // Minimum "okay" temperature in kelvin + maxbodytemp = 300 // Maximum of above + hovering = FALSE + heat_resist = 0.2 + cold_resist = 1.0 + + evolve = "/mob/living/simple_mob/vore/spacecritter/livingice/iceberg" + feed = "/obj/item/stack/material/snow" + evolvekey = "/obj/item/weapon/reagent_containers/food/snacks/coldchili" + copy = "/mob/living/simple_mob/vore/spacecritter/livingice" + + var/chilltemp = -20 + +/mob/living/simple_mob/vore/spacecritter/livingice/handle_special() + if(stat != DEAD) + cold_aura() + ..() + +/mob/living/simple_mob/vore/spacecritter/livingice/proc/cold_aura() + for(var/mob/living/L in view(2, src)) + var/turf/T = get_turf(src) + var/datum/gas_mixture/env = T.return_air() + if(env) + env.add_thermal_energy(chilltemp * 1000) + +/mob/living/simple_mob/vore/spacecritter/livingice/iceberg + name = "living iceberg" + desc = "A giant strange creature, a crab like creature seemingly made of ice" + size_multiplier = 3.0 + health = 75 + maxHealth = 75 + chilltemp = -50 + +/mob/living/simple_mob/vore/spacecritter/radcrab //bullets, melee, and cold all crack the poor thing's shell + name = "crystaline crab" + desc = "A largeish hermit crab glowing green, irradting the nearby area" + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + icon_state = "hermitcrab" + icon_living = "hermitcrab" + icon_dead = "hermitcrab-dead" + aquatic_movement = 1 // If set, the mob will move through fluids with no hinderance. + + minbodytemp = 260 // Minimum "okay" temperature in kelvin + maxbodytemp = 10000 // Maximum of above + melee_damage_lower = 2 // Lower bound of randomized melee damage + melee_damage_upper = 2 // Upper bound of randomized melee damage + attacktext = list("pinches") // "You are [attacktext] by the mob!" + attack_armor_type = "melee" // What armor does this check? + attack_armor_pen = 100 // How much armor pen this attack has. + var/rads = 50 + evolve = "/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab" + feed = "/obj/item/weapon/ore/uranium" + evolvekey = "/obj/item/stack/material/uranium" + copy = "/mob/living/simple_mob/vore/spacecritter/radcrab" + +/mob/living/simple_mob/vore/spacecritter/radcrab/handle_special() + if(stat != DEAD) + irradiate() + ..() + +/mob/living/simple_mob/vore/spacecritter/radcrab/proc/irradiate() + SSradiation.radiate(src, rads) + +/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab + size_multiplier = 1.5 + health = 75 + maxHealth = 75 + rads = 150 + name = "energized crystaline crab" + icon_state = "superhermitcrab" + icon_living = "superhermitcrab" + icon_dead = "hermitcrab-dead" + +/mob/living/simple_mob/vore/spacecritter/dreameel + name = "dream eel" + desc = "A eel floating through it's own thick cloud" + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + icon_state = "dreameel" + icon_living = "dreameel" + icon_dead = "dreameel-dead" + movement_cooldown = -1 // Lower is faster. + attacktext = list("bitten") // "You are [attacktext] by the mob!" + var/artifact_master = /datum/component/artifact_master/dreameel + evolve = "/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare" + feed = "/obj/item/weapon/reagent_containers/food/snacks/carpmeat" + evolvekey = "/obj/item/stack/material/phoron" + copy = "/mob/living/simple_mob/vore/spacecritter/dreameel" + +/datum/component/artifact_master/dreameel + make_effects = list( + /datum/artifact_effect/gassleeping + ) + +/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare + name = "dream eel" + desc = "A eel floating through it's own thick cloud" + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + icon_state = "dreameel" + icon_living = "dreameel" + movement_cooldown = -5 + color = "#9933FF" + + artifact_master = /datum/component/artifact_master/nightmare + +/datum/component/artifact_master/nightmare + make_effects = list( + /datum/artifact_effect/gasphoron + ) + +/mob/living/simple_mob/vore/spacecritter/gravityshell + name = "Gravity Shell" + desc = "A metallic turtle" + icon = 'modular_chomp/icons/mob/spaceinvader.dmi' + icon_state = "gravityshell" + icon_living = "gravityshell" + icon_dead = "gravityshell-dead" + movement_cooldown = 5 // Lower is faster. + armor_soak = list( // Values for getsoak() checks. + "melee" = 7, + "bullet" = 7, + "laser" = 7, + "energy" = 7, + "bomb" = 0, + "bio" = 0, + "rad" = 0 + ) + var/artifact_master = /datum/component/artifact_master/gravity + + evolve = "/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse" + feed = "/obj/item/stack/material/concrete" + evolvekey = "/obj/item/stack/material/tritium" + copy = "/mob/living/simple_mob/vore/spacecritter/gravityshell" + +/datum/component/artifact_master/gravity + make_effects = list( + /datum/artifact_effect/extreme/gravity_wave + ) + +/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse + size_multiplier = 0.5 + health = 75 + maxHealth = 75 + artifact_master = /datum/component/artifact_master/gasoxy + icon_state = "cleanseshell" + icon_living = "cleanseshell" + icon_dead = "cleanseshell-dead" + +/datum/component/artifact_master/gasoxy + make_effects = list( + /datum/artifact_effect/gasoxy + ) + + +/mob/living/simple_mob/vore/spacecritter/solarray + vore_bump_chance = 80 + vore_bump_emote = "devours" + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 0 + vore_default_mode = DM_DIGEST + +/mob/living/simple_mob/vore/spacecritter/livingice + vore_bump_chance = 0 + vore_bump_emote = "devours" + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 0 + vore_default_mode = DM_DIGEST + +/mob/living/simple_mob/vore/spacecritter/radcrab + vore_bump_chance = 40 + vore_bump_emote = "devours" + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 0 + vore_default_mode = DM_DIGEST + +/mob/living/simple_mob/vore/spacecritter/dreameel + vore_bump_chance = 40 + vore_bump_emote = "devours" + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 0 + vore_default_mode = DM_DIGEST + +/mob/living/simple_mob/vore/spacecritter/gravityshell + vore_bump_chance = 40 + vore_bump_emote = "devours" + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 0 + vore_default_mode = DM_DIGEST + + +/mob/living/simple_mob/vore/solarray + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/raymeat + meat_amount = 8 + + tame_items = list( + /obj/item/stack/tile/grass = 50 + ) + + butchery_loot = list(\ + /obj/item/stack/material/wisp = 3\ + ) + + harvest_tool = /obj/item/weapon/weldingtool + harvest_cooldown = 10 MINUTES + harvest_delay = 30 SECONDS + harvest_recent = 0 + harvest_per_hit = 1 + harvest_verb = "harvested" + harvest_results = list( + /obj/item/stack/material/wisp = 1 + ) + +/mob/living/simple_mob/vore/livingice + meat_type = /obj/item/stack/material/snow + meat_amount = 18 + + tame_items = list( + /obj/item/stack/material/snow = 10 + ) + + butchery_loot = list(\ + /obj/item/stack/material/frostscale = 3\ + ) + + harvest_tool = /obj/item/weapon/tool/wirecutters + harvest_cooldown = 10 MINUTES + harvest_delay = 30 SECONDS + harvest_recent = 0 + harvest_per_hit = 1 + harvest_verb = "harvested" + harvest_results = list( + /obj/item/stack/material/frostscale = 1 + ) + +/mob/living/simple_mob/vore/radcrab + meat_type = /obj/item/weapon/reagent_containers/food/snacks/crabmeat + meat_amount = 8 + + tame_items = list( + /obj/item/weapon/ore/uranium = 50 + ) + + butchery_loot = list(\ + /obj/item/stack/material/crystalscale = 3\ + ) + + harvest_tool = /obj/item/weapon/tool/crowbar + harvest_cooldown = 10 MINUTES + harvest_delay = 30 SECONDS + harvest_recent = 0 + harvest_per_hit = 1 + harvest_verb = "harvested" + harvest_results = list( + /obj/item/stack/material/crystalscale = 1 + ) + +/mob/living/simple_mob/vore/dreameel + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat + meat_amount = 2 + + tame_items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell = 40 + ) + + butchery_loot = list(\ + /obj/item/stack/material/dreamscale = 3\ + ) + + harvest_tool = /obj/item/weapon/tool/wirecutters + harvest_cooldown = 10 MINUTES + harvest_delay = 30 SECONDS + harvest_recent = 0 + harvest_per_hit = 1 + harvest_verb = "harvested" + harvest_results = list( + /obj/item/stack/material/dreamscale = 1 + ) + +/mob/living/simple_mob/vore/gravityshell + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell + meat_amount = 8 + + tame_items = list( + /obj/item/weapon/reagent_containers/food/snacks/crabmeat = 50 + ) + + butchery_loot = list(\ + /obj/item/stack/material/shellchitin = 3\ + ) + + harvest_tool = /obj/item/weapon/tool/crowbar + harvest_cooldown = 10 MINUTES + harvest_delay = 30 SECONDS + harvest_recent = 0 + harvest_per_hit = 1 + harvest_verb = "harvested" + harvest_results = list( + /obj/item/stack/material/shellchitin = 1 + ) diff --git a/modular_chomp/icons/mob/spaceinvader.dmi b/modular_chomp/icons/mob/spaceinvader.dmi index 7151f5499be9009f0c2099aab3f080bf5f93801a..62226c3e165fe689410d319c47dd17591fa040d0 100644 GIT binary patch literal 8429 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 literal 3317 zcmbVPXHXMdvredjgd!zEXbDOY)F1*10@4C1y@)80B2}6o0hAUHkY1D~Arz&CBJk2d z5UENDp$kfoC{=n12?TE5Z|Mmv{HCM0;7!y*6=sxtH2ik= zR4RBLBcic?bG1Qh;sK3mm+A3FXPhTJY7X8zI+_-NIqO(sSK%p+mtADlUR! zgsnQ5A1pa#n87GU+i86b1b_g|Lm?BquYG;mjVI8pd>UeB34t6KL@=dfQ=1&55#rs= z)D!g;wYdRm`>~PuaepmM(dZIPTp=TXj95OJ4mC$q&?A+X@Pjog9|(Rr>|UN~3V;Bz zXY~b`pRX4$L>M{y*!yC2bCt<;qD`E>D z0{LCr@j|{Fba)0A1ije3d{u)HV33TT_XuIXX*W=4nkodBV_?>8tS)u=7TNMWXUds% zn5%k|;b9PQ-Od!g;)p#Sn?j!Q z_T!v)aIEh^Z>nk%T>X9nob@=ns(*1>^EoGm$uF=JF@Bc)xUYxHn9+@vwuC2p_=$5? z2s@gZc=&H&VOT}O{q6!AH?OZGiP`T|zT!R?Kmr4xx6iic`;j@fgi~7XGY7^U=Eq^U z4iQNOC~;Qyib2&sPxTCzhIl4|O?SH+bVdA+YoRb?e{?pW_0#-)-Y+igP5R~Y^kk37 z3h9lbvc#W4TSZ}%Lz)V^>i7q-4@&Z?dyBat(tlI96u;-cTre@398(Jl!}SEu^a9_p zIU&+Oto@_YOK)?}WV~*&x}i`oyxceD_7Bvj&&~4d=3M((L=HIV-t0T>d=x@!at_!~ z4mDTc)}+*aZ}nG{C6xUG1)Rf20C;B6?f&5TwVmDRYq_#2mv>^T^<8nt6wW)0)9nz+ z0tz|{%T0(mwt;sLVO+Bvx>rwWl&e}~4DO%{!4gbui2}VX17{T4KB-5ik4dkfyX~@DAVi-OwcExne5~08iBEC+AJ4xwEi#7 znU`5O%cg&;_!f`?WGnd>g&~rW&*FDxQuzK`V8U-un%|~=LHG6-89rdF$))sfDuA?s zKT!D)C#R@SHks?0Ax4ofaUT65Gi&1X^yk&p)r^Aop6 zZNae;^Wi$Sgfu?!zJijbqqSI*^z+T8NzJ-zXA`~k_fIE;1(2)%il?=-u(Jup&+ zk4ARer`Ojj^0A-ni?8jgAP|UPw+a_wrSsS(P}b1~yL#tbq1e>jjaJ#xg;LZI?GQEK zpJCU_lPH~SY!L5o3*o_-F)ZSCAJwJmv+@f6@L=;~#^cH1Eb$~L2!fgIQf=I^R14`` zhWBTjY#FUItdIi2U3I+JhxLR>@(zO4ej72be_?0Yjt?ZQ)TzQ96e^cbyV5l}Z-e`~ zR76+P>&<2A8_&0Wn?l16)FqM<6Jw7gc$-1f4()I+4T5NF3sU2*>WI#fLPDvsa3oI| zSh#!(Xq#TjI7$x7^cXZY7%LOgX|@qHlNaOeMAw|nD_FUZ5^8=rTC&twJo{yNeWkC+ z81LS3#(?J`b0go$y429Arj$;DZGj4mcAsW^a-z3lAzba&&ZRz9?EUKV8EMtS)s?f& zA_2MH;OqExscE037rS;88rw&m(ag0l%A}y%g}-#Gnci4Jv3IGTPG??ab=EaJ9+hUA@8ey}ZQEFqEu)|Ran_duhe=Mm?=c+++tS)3kQ z*$T-DBlh>AY!(i9R~jesnyFHnrwM`~U3H#}asM&D>8t$a|*NHvz?b55?2uW zc-G{4!oByG9{9Rc@JmDsepZyTO}|^@R3Hk=dceZba&fkp=T+|L5*Y*699J~0GlL88d}>bd=$mZLVR$@S6$4-vswDz0^q!1gdWTkE(4;J4-B*5G4#uMT?kZBQQ=B(lnqy+vz3)A{jko| zKyj5kd?PaVo^o43_odW7x(6e5SJ_Og0&(W1oo8Ab6&rSJ{@VFTCIUbGPg z6nms9X1JG~SOJPoi_E#&g2`AiKe(?6848tf=R|6^5rDEfbBpWuvPuq9JU=;%881;frN1 zF_DUV#!jCv|38S^(Y~YNb=Lql(9wWpouXQ6u0&fP8=d+ln6mF_ZqW-oBix(mC)H2; zsg|RAx7&av#PGXBxZF=ib(=Mp)Nyt2pg@m(wH{Neu7>P|ICRTYOnkXubXjoIB>qy_ zU*>p%l=S6tsx_V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex7wuvIWN;^NFm z%}mcIfpCgT5=&AQY!#HsGm8t9xHwZXi;5L&6%4sJ(~1&vQz2})qT=MloK%9U2pf}; znv;V|m9m1XpNoQvuO}A(_J23Xt({Nq0005@Nklb;@5JkVEBtilyZ~;nc zI?}Cg5h*Q2j*v5OgEVPUMB)~9N4nH5Y1~o-34$W0Kqihc;90W_gXc+GU@z9p+wpiY zUJwMRGgsUJaH9ga1K>sla0kGR3g8Za8x=sAY)1aXjQokKU^uX0QKKo@XVFd$cgJ_RU~H>=z!7?4>7^a|(@k2}PeR$@#m zsd9~L((FS?o=8GI>GX3LetFbu+4q2EbFdjFWZ#P0RD(7_((IoS!y#o>m|6w2o#10; zCpe#fY(~*}2gLCbalEuXUj(fQVx6RU-+tV=PCg4Y$$faz{u%1^ZuXXV6s<^4g4#Dh z@-4tk6s^2QBS`?D+r0$r1(CNv(MsE_J|MUPY!l8SvI35Y z3g8Za8x_DE05>XtI{1;@ zE<8>ZA?B^{uEg_vVg{hR2oXJC><^PZ+6R*d)`I$IZ`~rhIC}wU@>I%7IC}xWUs=2O zj<_BG?Ct~Eq|5dIF#@vW8zQywWf3VLB^5El3QxhC)jmM9fMXz{3A#iDa0kGR3g8Za h8x_DE05`Q4@C%&arE@NVsvZCU002ovPDHLkV1fphCjI~b literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index 415884089a..af488b0bae 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4615,6 +4615,7 @@ #include "modular_chomp\code\datums\components\gargoyle.dm" #include "modular_chomp\code\datums\components\squeak.dm" #include "modular_chomp\code\datums\components\xenoqueen.dm" +#include "modular_chomp\code\datums\crafting\items.dm" #include "modular_chomp\code\datums\crafting\recipes.dm" #include "modular_chomp\code\datums\interfaces\appearance.dm" #include "modular_chomp\code\datums\outfits\jobs\cargo.dm" @@ -4622,6 +4623,7 @@ #include "modular_chomp\code\datums\outfits\jobs\noncrew.dm" #include "modular_chomp\code\datums\supplypacks\contraband.dm" #include "modular_chomp\code\datums\supplypacks\medical.dm" +#include "modular_chomp\code\datums\supplypacks\misc.dm" #include "modular_chomp\code\datums\supplypacks\science.dm" #include "modular_chomp\code\datums\supplypacks\security.dm" #include "modular_chomp\code\datums\underwear\socks.dm" @@ -4716,6 +4718,7 @@ #include "modular_chomp\code\modules\emotes\definitions\audible_pain.dm" #include "modular_chomp\code\modules\event\dangerinfestation.dm" #include "modular_chomp\code\modules\event\event_container_ch.dm" +#include "modular_chomp\code\modules\event\heavydangerinfestation.dm" #include "modular_chomp\code\modules\events\meatyores.dm" #include "modular_chomp\code\modules\exploration\lootsafe.dm" #include "modular_chomp\code\modules\food\drinkgglass\metaglass.dm" @@ -4839,6 +4842,7 @@ #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\smokestar.dm" +#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\spacecritters.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\swoopie.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\wolf.dm"