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 7151f5499b..62226c3e16 100644 Binary files a/modular_chomp/icons/mob/spaceinvader.dmi and b/modular_chomp/icons/mob/spaceinvader.dmi differ diff --git a/modular_chomp/icons/obj/crafting.dmi b/modular_chomp/icons/obj/crafting.dmi new file mode 100644 index 0000000000..02ba9c0107 Binary files /dev/null and b/modular_chomp/icons/obj/crafting.dmi differ 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"