diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 75574de1e3..537f77eee5 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -154,6 +154,12 @@ #define MAT_LOG "log" #define MAT_SIFWOOD "alien wood" #define MAT_SIFLOG "alien log" +#define MAT_STEELHULL "steel hull" +#define MAT_PLASTEEL "plasteel" +#define MAT_PLASTEELHULL "plasteel hull" +#define MAT_DURASTEEL "durasteel" +#define MAT_DURASTEELHULL "durasteel hull" +#define MAT_TITANIUMHULL "titanium hull" #define SHARD_SHARD "shard" #define SHARD_SHRAPNEL "shrapnel" diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 53707c98cd..8d5654c6fe 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -264,6 +264,7 @@ #define SPECIES_SHADOW "Shadow" #define SPECIES_SKELETON "Skeleton" #define SPECIES_GOLEM "Golem" +#define SPECIES_EVENT1 "X Occursus" // Used to seperate simple animals by ""intelligence"". #define SA_PLANT 1 diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 87f1f9b3ca..81a55f84d7 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -48,6 +48,7 @@ #define LANGUAGE_TERMINUS "Terminus" #define LANGUAGE_SKRELLIANFAR "High Skrellian" #define LANGUAGE_MINBUS "Minbus" +#define LANGUAGE_EVENT1 "Occursus" #define LANGUAGE_AKHANI "Akhani" // Language flags. diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index eae30c6cb4..294765e596 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -3,6 +3,23 @@ /turf/simulated/wall/r_wall/New(var/newloc) ..(newloc, "plasteel","plasteel") //3strong +/turf/simulated/wall/shull/New(var/newloc) //Spaaaace ship. + ..(newloc, MAT_STEELHULL, null, MAT_STEELHULL) +/turf/simulated/wall/rshull/New(var/newloc) + ..(newloc, MAT_STEELHULL, MAT_STEELHULL, MAT_STEELHULL) +/turf/simulated/wall/pshull/New(var/newloc) //Spaaaace-er ship. + ..(newloc, MAT_PLASTEELHULL, null, MAT_PLASTEELHULL) +/turf/simulated/wall/rpshull/New(var/newloc) + ..(newloc, MAT_PLASTEELHULL, MAT_PLASTEELHULL, MAT_PLASTEELHULL) +/turf/simulated/wall/dshull/New(var/newloc) //Spaaaace-est ship. + ..(newloc, MAT_DURASTEELHULL, null, MAT_DURASTEELHULL) +/turf/simulated/wall/rdshull/New(var/newloc) + ..(newloc, MAT_DURASTEELHULL, MAT_DURASTEELHULL, MAT_DURASTEELHULL) +/turf/simulated/wall/thull/New(var/newloc) + ..(newloc, MAT_TITANIUMHULL, null, MAT_TITANIUMHULL) +/turf/simulated/wall/rthull/New(var/newloc) + ..(newloc, MAT_TITANIUMHULL, MAT_TITANIUMHULL, MAT_TITANIUMHULL) + /turf/simulated/wall/cult icon_state = "cult" /turf/simulated/wall/cult/New(var/newloc) diff --git a/code/modules/materials/fifty_spawner_mats.dm b/code/modules/materials/fifty_spawner_mats.dm index ffd5e59f40..1b39b38d93 100644 --- a/code/modules/materials/fifty_spawner_mats.dm +++ b/code/modules/materials/fifty_spawner_mats.dm @@ -56,14 +56,26 @@ name = "stack of steel" type_to_spawn = /obj/item/stack/material/steel +/obj/fiftyspawner/steel/hull + name = "stack of steel hull" + type_to_spawn = /obj/item/stack/material/steel/hull + /obj/fiftyspawner/plasteel name = "stack of plasteel" type_to_spawn = /obj/item/stack/material/plasteel +/obj/fiftyspawner/plasteel/hull + name = "stack of plasteel hull" + type_to_spawn = /obj/item/stack/material/plasteel/hull + /obj/fiftyspawner/durasteel name = "stack of durasteel" type_to_spawn = /obj/item/stack/material/durasteel +/obj/fiftyspawner/durasteel/hull + name = "stack of durasteel hull" + type_to_spawn = /obj/item/stack/material/durasteel/hull + /obj/fiftyspawner/wood name = "stack of wood" type_to_spawn = /obj/item/stack/material/wood diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 54d56fd773..3caf8df28b 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -192,12 +192,20 @@ default_type = DEFAULT_WALL_MATERIAL no_variants = FALSE +/obj/item/stack/material/steel/hull + name = MAT_STEELHULL + default_type = MAT_STEELHULL + /obj/item/stack/material/plasteel name = "plasteel" icon_state = "sheet-plasteel" default_type = "plasteel" no_variants = FALSE +/obj/item/stack/material/plasteel/hull + name = MAT_PLASTEELHULL + default_type = MAT_PLASTEELHULL + /obj/item/stack/material/durasteel name = "durasteel" icon_state = "sheet-durasteel" @@ -205,6 +213,9 @@ default_type = "durasteel" no_variants = FALSE +/obj/item/stack/material/durasteel/hull + name = "MAT_DURASTEELHULL" + /obj/item/stack/material/wood name = "wooden plank" icon_state = "sheet-wood" diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index d0e53184e3..5a71af1bab 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -16,7 +16,17 @@ stone metal solid - cult + ONLY WALLS + cult + hull + curvy + jaggy + brick + REINFORCEMENT + reinf_over + reinf_mesh + reinf_cult + reinf_metal DOORS stone metal @@ -358,6 +368,18 @@ var/list/name_to_material icon_reinf = "reinf_over" icon_colour = "#666666" +/material/steel/hull + name = MAT_STEELHULL + stack_type = /obj/item/stack/material/steel/hull + integrity = 250 + explosion_resistance = 10 + icon_base = "hull" + icon_reinf = "reinf_mesh" + icon_colour = "#666677" + +/material/steel/hull/place_sheet(var/turf/target) //Deconstructed into normal steel sheets. + new /obj/item/stack/material/steel(target) + /material/diona name = "biomass" icon_colour = null @@ -394,6 +416,17 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 2) composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo +/material/plasteel/hull + name = MAT_PLASTEELHULL + stack_type = /obj/item/stack/material/plasteel/hull + integrity = 600 + icon_base = "hull" + icon_reinf = "reinf_mesh" + icon_colour = "#777788" + explosion_resistance = 40 + +/material/plasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets. + new /obj/item/stack/material/plasteel(target) // Very rare alloy that is reflective, should be used sparingly. /material/durasteel @@ -412,6 +445,14 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 8) composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug +/material/durasteel/hull //The 'Hardball' of starship hulls. + name = MAT_DURASTEELHULL + icon_base = "hull" + icon_reinf = "reinf_mesh" + icon_colour = "#45829a" + explosion_resistance = 90 + reflectivity = 0.9 + /material/plasteel/titanium name = "titanium" stack_type = null @@ -421,6 +462,12 @@ var/list/name_to_material icon_colour = "#D1E6E3" icon_reinf = "reinf_metal" +/material/plasteel/titanium/hull + name = MAT_TITANIUMHULL + stack_type = null + icon_base = "hull" + icon_reinf = "reinf_mesh" + /material/glass name = "glass" stack_type = /obj/item/stack/material/glass diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm index b1932bb3ba..fdd719df89 100644 --- a/code/modules/mob/language/outsider.dm +++ b/code/modules/mob/language/outsider.dm @@ -129,4 +129,16 @@ flags = RESTRICTED syllables = list("rus","zem","ave","groz","ski","ska","ven","konst","pol","lin","svy", "danya","da","mied","zan","das","krem","myka","cyka","blyat","to","st","no","na","ni", - "ko","ne","en","po","ra","li","on","byl","cto","eni","ost","ol","ego","ver","stv","pro") \ No newline at end of file + "ko","ne","en","po","ra","li","on","byl","cto","eni","ost","ol","ego","ver","stv","pro") + +//For your event purposes. +/datum/language/occursus + name = LANGUAGE_EVENT1 + desc = "The Powers That Be have seen it fit to grace you with a special language that sounds like... something. This description should be overridden by the time you see this." + speech_verb = "says" + ask_verb = "asks" + exclaim_verb = "shouts" + colour = "warning" + key = "]" + flags = RESTRICTED + syllables = list("chan","ange","thi","se") diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index e791d69749..367a00b5d5 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -51,3 +51,6 @@ /mob/living/carbon/human/stok/New(var/new_loc) ..(new_loc, SPECIES_MONKEY_UNATHI) + +/mob/living/carbon/human/event1/New(var/new_loc) + ..(new_loc, SPECIES_EVENT1) diff --git a/code/modules/mob/living/carbon/human/species/outsider/event.dm b/code/modules/mob/living/carbon/human/species/outsider/event.dm new file mode 100644 index 0000000000..3e75acae9c --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/outsider/event.dm @@ -0,0 +1,221 @@ +/* +This species is meant to be used both as a base for Event species and possible future per-round RNG'd species, hence the proc var-ization in some places. + +IF YOU ARE USING THIS SPECIES: + +Variables you may want to make use of are: + + icobase and deform Set both to the same thing, unless you have special deformed sprites. + mobtemplate The blank bounding box used by your species. + mob_size The size class of the species. 20 is human. + show_ssd What is shown when they're SSD? + virus_immune Immune to viruses? 1/0 + short_sighted Permanent weldervision. 1/0 + blood_volume Initial blood volume. + bloodloss_rate Multiplier for how fast a species bleeds out. Higher = Faster + hunger_factor Multiplier for hunger. + active_regen_mult Multiplier for 'Regenerate' power speed, in human_powers.dm + + scream_verb The text descriptor of the scream. Default screams. + male_scream_sound Sound played when a male *scream s. + female_scream_sound Sound played when a female *scream s. + male_cough_sounds List of cough sounds for males. + female_cough_sounds List of cough sounds for females. + male_sneeze_sound Sound played when a male *sneeze s.. + female_sneeze_sound Sound played when a female *sneeze s. + + speech_sounds A list of sounds used randomly when the species talks. + speech_chance Percentile chance to do the above. + + total_health How much damage can they take before entering crit? Default 100. + + brute_mod Physical damage multiplier. + burn_mod Burn damage multiplier. + oxy_mod Oxyloss modifier + toxins_mod Toxloss modifier + radiation_mod Radiation modifier + flash_mod Stun from blindness modifier. + sound_mod Stun from sounds, I.E. flashbangs. + chemOD_mod Damage modifier for overdose + siemens_coefficient The lower, the thicker the skin and better the insulation. + darksight Native darksight distance. + + meat_type The food given when they are turned into meat. + remains_type The effect left behind when they are ashed. + death_sound The sound played when they die. + death_message The deathgasp. + knockout_message The message when someone gets a lucky shot on the head. + cloning_modifier The modifier given when they are by chance cloned. + + Any 'heat' or 'pressure' vars. Environmental survivability. + + speech_bubble_appearance Part of icon_state to use for speech bubbles when talking. See talk.dmi for available icons. + + slowdown Passive movement speed malus (or boost, if negative) + move_trail What effect marks are left when walking + has_floating_eyes Whether the eyes can be shown above other icons + has_glowing_eyes Whether the eyes are shown above all lighting + water_movement How much faster or slower the species is in water + snow_movement How much faster or slower the species is on snow + item_slowdown_mod How affected by item slowdown the species is. Multiplier. + + */ + +/datum/species/event1 //Essentially, by default a 'better' human. + name = SPECIES_EVENT1 + name_plural = SPECIES_EVENT1 + primitive_form = SPECIES_MONKEY + unarmed_types = list(/datum/unarmed_attack/stomp/event1, /datum/unarmed_attack/kick/event1, /datum/unarmed_attack/punch/event1, /datum/unarmed_attack/bite/event1) + blurb = "We're not quite sure where these things came from. Are you?" + num_alternate_languages = 3 + species_language = LANGUAGE_GALCOM + secondary_langs = list() + name_language = null // Use the first-name last-name generator rather than a language scrambler + + min_age = 0 + max_age = 999 + + health_hud_intensity = 1.5 + + flags = NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT + + vision_flags = SEE_SELF + darksight = 7 + + brute_mod = 0.9 + burn_mod = 0.9 + oxy_mod = 0.9 + toxins_mod = 0.9 + radiation_mod = 0.9 + flash_mod = 0.9 + sound_mod = 0.9 + chemOD_mod = 0.9 + siemens_coefficient = 0.9 + + spawn_flags = SPECIES_IS_RESTRICTED + appearance_flags = HAS_SKIN_TONE | HAS_EYE_COLOR + + //Far more organs, due to the issues with adding them and their respective verbs mid round, I'll include them here. + //Colormatch organs will change to match the blood color of the species. + has_organ = list( + O_HEART = /obj/item/organ/internal/heart/grey/colormatch, + O_LUNGS = /obj/item/organ/internal/lungs/grey/colormatch, + O_LIVER = /obj/item/organ/internal/liver/grey/colormatch, + O_KIDNEYS = /obj/item/organ/internal/kidneys/grey/colormatch, + O_BRAIN = /obj/item/organ/internal/brain/grey/colormatch, + O_EYES = /obj/item/organ/internal/eyes/grey/colormatch, + O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/grey/colormatch, + O_ACID = /obj/item/organ/internal/xenos/acidgland/grey/colormatch, + O_HIVE = /obj/item/organ/internal/xenos/hivenode/grey/colormatch, + O_RESIN = /obj/item/organ/internal/xenos/resinspinner/grey/colormatch + ) + + var/use_bodyshape = SPECIES_HUMAN + var/waterbreathing = 0 + var/overcome_gravity = 0 + var/hover = 0 + +/datum/species/event1/proc/set_limbset(var/setnum = 1) //Will require existing ones to be respawned for changes to take effect. + switch(setnum) + if(1) //Normal. + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + if(2) //No broken bones. + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable), + BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable), + BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable), + BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable), + BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable) + ) + if(3) //No removing from the body. + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest/unseverable), + BP_GROIN = list("path" = /obj/item/organ/external/groin/unseverable), + BP_HEAD = list("path" = /obj/item/organ/external/head/unseverable), + BP_L_ARM = list("path" = /obj/item/organ/external/arm/unseverable), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unseverable), + BP_L_LEG = list("path" = /obj/item/organ/external/leg/unseverable), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unseverable), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/unseverable), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unseverable), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unseverable), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unseverable) + ) + if(4) //No breaking, OR removing from the body. For things that are more monsterous. + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest/indestructible), + BP_GROIN = list("path" = /obj/item/organ/external/groin/indestructible), + BP_HEAD = list("path" = /obj/item/organ/external/head/indestructible), + BP_L_ARM = list("path" = /obj/item/organ/external/arm/indestructible), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/indestructible), + BP_L_LEG = list("path" = /obj/item/organ/external/leg/indestructible), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/indestructible), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/indestructible), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/indestructible), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/indestructible), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/indestructible) + ) + return + +/datum/species/event1/proc/choose_limbset() + var/list/limb_sets = list("Normal" = 1, "Unbreakable" = 2, "Unseverable" = 3, "Indestructible" = 4) + var/choice = input("Choose limb set to use for future spawns.", "Limb types.") as null|anything in limb_sets + set_limbset(limb_sets[choice]) + return limb_sets[choice] + +/datum/species/event1/proc/toggle_thermal() + vision_flags ^= SEE_MOBS + +/datum/species/event1/proc/toggle_meson() + vision_flags ^= SEE_TURFS + +/datum/species/event1/proc/toggle_material() + vision_flags ^= SEE_OBJS + +/datum/species/event1/proc/toggle_infection() + flags ^= NO_INFECT + +/datum/species/event1/proc/toggle_noslip() + flags ^= NO_SLIP + +/datum/species/event1/proc/toggle_cloning() + flags ^= NO_SCAN + +/datum/species/event1/proc/toggle_pain() + flags ^= NO_PAIN + +/datum/species/event1/proc/toggle_embedding() + flags ^= NO_EMBED + +/datum/species/event1/proc/toggle_plant() //Maybe it's a distant cousin of the Venus Fly Trap. + flags ^= IS_PLANT + +/datum/species/event1/get_bodytype(var/mob/living/carbon/human/H) //Default to human sprites, if they're based on another species, var edit use_bodyshape to the correct thing in _defines/mobs.dm of the species you want to use. + return use_bodyshape + +/datum/species/event1/can_breathe_water() + return waterbreathing + +/datum/species/event1/can_overcome_gravity(var/mob/living/carbon/human/H) + return overcome_gravity + +/datum/species/event1/can_fall(var/mob/living/carbon/human/H) + return hover diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 1fe73897b4..1f2e55b99c 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -54,8 +54,8 @@ var/language = LANGUAGE_GALCOM // Default racial language, if any. var/species_language = LANGUAGE_GALCOM // Used on the Character Setup screen var/list/secondary_langs = list() // The names of secondary languages that are available to this species. - var/list/speech_sounds // A list of sounds to potentially play when speaking. - var/list/speech_chance // The likelihood of a speech sound playing. + var/list/speech_sounds = list() // A list of sounds to potentially play when speaking. + var/list/speech_chance = list() // The likelihood of a speech sound playing. var/num_alternate_languages = 0 // How many secondary languages are available to select at character creation var/name_language = LANGUAGE_GALCOM // The language to use when determining names for this species, or null to use the first name/last name generator @@ -153,7 +153,7 @@ var/health_hud_intensity = 1 // This modifies how intensely the health hud is colored. // Body/form vars. - var/list/inherent_verbs // Species-specific verbs. + var/list/inherent_verbs = list() // Species-specific verbs. var/has_fine_manipulation = 1 // Can use small items. var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation. var/darksight = 2 // Native darksight distance. diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index a7f80fb8f1..6ec4ce2954 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -113,6 +113,8 @@ var/global/list/sparring_attack_cache = list() sharp = 0 edge = 0 +/datum/unarmed_attack/bite/event1 + /datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if (user.is_muzzled()) @@ -128,6 +130,8 @@ var/global/list/sparring_attack_cache = list() eye_attack_text_victim = "digits" damage = 0 +/datum/unarmed_attack/punch/event1 + /datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) var/organ = affecting.name @@ -179,6 +183,8 @@ var/global/list/sparring_attack_cache = list() attack_sound = "swing_hit" damage = 0 +/datum/unarmed_attack/kick/event1 + /datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if (user.legcuffed) return 0 @@ -220,6 +226,8 @@ var/global/list/sparring_attack_cache = list() attack_sound = "swing_hit" damage = 0 +/datum/unarmed_attack/stomp/event1 + /datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if (user.legcuffed) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 0dc2fd1fc4..21807e2c22 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -146,3 +146,15 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) desc = "A tightly furled roll of paper, covered with indecipherable runes." icon = 'icons/obj/wizard.dmi' icon_state = "scroll" + +/obj/item/organ/internal/brain/grey + desc = "A piece of juicy meat found in a person's head. This one is strange." + icon_state = "brain_grey" + +/obj/item/organ/internal/brain/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index ec4ca77a92..0cdd062fc4 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -21,6 +21,17 @@ ..() robotize() +/obj/item/organ/internal/eyes/grey + icon_state = "eyes_grey" + +/obj/item/organ/internal/eyes/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color + /obj/item/organ/internal/eyes/proc/change_eye_color() set name = "Change Eye Color" set desc = "Changes your robotic eye color instantly." diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index 8ca68878e3..10fdcada69 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -20,3 +20,15 @@ if(prob(1)) owner.custom_pain("A stabbing pain rolls through your chest!",1) owner.apply_damage(damage = 25, damagetype = HALLOSS, def_zone = parent_organ) + +/obj/item/organ/internal/heart/grey + icon_state = "heart_grey-on" + dead_icon = "heart_grey-off" + +/obj/item/organ/internal/heart/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color diff --git a/code/modules/organs/internal/kidneys.dm b/code/modules/organs/internal/kidneys.dm index 19652a6376..571fe4f9e9 100644 --- a/code/modules/organs/internal/kidneys.dm +++ b/code/modules/organs/internal/kidneys.dm @@ -35,3 +35,14 @@ owner.custom_pain("You feel extremely tired, like you can't move!",1) owner.m_intent = "walk" owner.hud_used.move_intent.icon_state = "walking" + +/obj/item/organ/internal/kidneys/grey + icon_state = "kidneys_grey" + +/obj/item/organ/internal/kidneys/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm index 3b20f30214..a81c71895f 100644 --- a/code/modules/organs/internal/liver.dm +++ b/code/modules/organs/internal/liver.dm @@ -57,3 +57,14 @@ if(prob(1) && owner.getToxLoss() < owner.getMaxHealth()*0.3) //owner << "" //Toxins provide their own messages for pain owner.adjustToxLoss(5) //Not realistic to PA but there are basically no 'real' liver infections + +/obj/item/organ/internal/liver/grey + icon_state = "liver_grey" + +/obj/item/organ/internal/liver/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index c42167f131..9966e93aa7 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -39,3 +39,14 @@ if(prob(1)) owner.custom_pain("You suddenly feel short of breath and take a sharp, painful breath!",1) owner.adjustOxyLoss(30) //Look it's hard to simulate low O2 perfusion okay + +/obj/item/organ/internal/lungs/grey + icon_state = "lungs_grey" + +/obj/item/organ/internal/lungs/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index e26ea19374..5fc5c64ea1 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -27,6 +27,7 @@ var/list/organ_cache = list() var/min_bruised_damage = 10 // Damage before considered bruised var/min_broken_damage = 30 // Damage before becoming broken var/max_damage // Damage cap + var/can_reject = 1 // Can this organ reject? var/rejecting // Is this organ already being rejected? var/preserved = 0 // If this is 1, prevents organ decay. @@ -188,7 +189,7 @@ var/list/organ_cache = list() /obj/item/organ/proc/handle_rejection() // Process unsuitable transplants. TODO: consider some kind of // immunosuppressant that changes transplant data to make it match. - if(dna) + if(dna && can_reject) if(!rejecting) if(blood_incompatible(dna.b_type, owner.dna.b_type, species, owner.species)) rejecting = 1 diff --git a/code/modules/organs/subtypes/indestructible.dm b/code/modules/organs/subtypes/indestructible.dm new file mode 100644 index 0000000000..2f2e13400f --- /dev/null +++ b/code/modules/organs/subtypes/indestructible.dm @@ -0,0 +1,65 @@ +/obj/item/organ/external/chest/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/groin/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/arm/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/arm/right/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/leg/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/leg/right/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/foot/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/foot/right/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/hand/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/hand/right/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 + +/obj/item/organ/external/head/indestructible + cannot_gib = 1 + cannot_amputate = 1 + cannot_break = 1 + dislocated = -1 diff --git a/code/modules/organs/subtypes/unseverable.dm b/code/modules/organs/subtypes/unseverable.dm new file mode 100644 index 0000000000..370b659454 --- /dev/null +++ b/code/modules/organs/subtypes/unseverable.dm @@ -0,0 +1,43 @@ +/obj/item/organ/external/chest/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/groin/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/arm/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/arm/right/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/leg/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/leg/right/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/foot/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/foot/right/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/hand/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/hand/right/unseverable + cannot_gib = 1 + cannot_amputate = 1 + +/obj/item/organ/external/head/unseverable + cannot_gib = 1 + cannot_amputate = 1 diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm index 95024a6355..f573930489 100644 --- a/code/modules/organs/subtypes/xenos.dm +++ b/code/modules/organs/subtypes/xenos.dm @@ -1,23 +1,46 @@ //XENOMORPH ORGANS /obj/item/organ/internal/xenos name = "xeno organ" - icon = 'icons/effects/blood.dmi' + icon = 'icons/obj/surgery.dmi' desc = "It smells like an accident in a chemical factory." /obj/item/organ/internal/xenos/eggsac name = "egg sac" parent_organ = BP_GROIN - icon_state = "xgibmid1" + icon_state = "sac" organ_tag = O_EGG +/obj/item/organ/internal/xenos/eggsac/grey + icon_state = "sac_grey" + +/obj/item/organ/internal/xenos/eggsac/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color + /obj/item/organ/internal/xenos/plasmavessel name = "plasma vessel" parent_organ = BP_TORSO - icon_state = "xgibdown1" + icon_state = "plasma" organ_tag = O_PLASMA var/stored_plasma = 0 var/max_plasma = 500 +/obj/item/organ/internal/xenos/plasmavessel/grey + icon_state = "plasma_grey" + stored_plasma = 200 + +/obj/item/organ/internal/xenos/plasmavessel/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color + /obj/item/organ/internal/xenos/plasmavessel/queen name = "bloated plasma vessel" stored_plasma = 200 @@ -35,17 +58,51 @@ /obj/item/organ/internal/xenos/acidgland name = "acid gland" parent_organ = BP_HEAD - icon_state = "xgibtorso" + icon_state = "acidgland" organ_tag = O_ACID +/obj/item/organ/internal/xenos/acidgland/grey + icon_state = "acidgland_grey" + +/obj/item/organ/internal/xenos/acidgland/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color + /obj/item/organ/internal/xenos/hivenode name = "hive node" parent_organ = BP_TORSO - icon_state = "xgibmid2" + icon_state = "xenode" organ_tag = O_HIVE +/obj/item/organ/internal/xenos/hivenode/grey + icon_state = "xenode_grey" + +/obj/item/organ/internal/xenos/hivenode/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color + /obj/item/organ/internal/xenos/resinspinner name = "resin spinner" parent_organ = BP_HEAD - icon_state = "xgibmid2" + icon_state = "xenode" organ_tag = O_RESIN + + +/obj/item/organ/internal/xenos/resinspinner/grey + icon_state = "xenode_grey" + +/obj/item/organ/internal/xenos/resinspinner/grey/colormatch/New() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.blood_color diff --git a/html/changelogs/Mechoid - EventBox.yml b/html/changelogs/Mechoid - EventBox.yml new file mode 100644 index 0000000000..0cfd1dc7f1 --- /dev/null +++ b/html/changelogs/Mechoid - EventBox.yml @@ -0,0 +1,7 @@ + +author: Mechoid + +delete-after: True + +changes: + - rscadd: "Added some background things for Events." diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 3b88c088e9..1bd5df7f9a 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi index 64d17ff86b..bda615cd5c 100644 Binary files a/icons/turf/wall_masks.dmi and b/icons/turf/wall_masks.dmi differ diff --git a/polaris.dme b/polaris.dme index 87c6cc081d..8f03b9b57d 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1805,6 +1805,7 @@ #include "code\modules\mob\living\carbon\human\species\species_helpers.dm" #include "code\modules\mob\living\carbon\human\species\species_hud.dm" #include "code\modules\mob\living\carbon\human\species\species_shapeshift.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\event.dm" #include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" #include "code\modules\mob\living\carbon\human\species\outsider\skeleton.dm" #include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" @@ -1989,12 +1990,14 @@ #include "code\modules\organs\internal\lungs.dm" #include "code\modules\organs\internal\organ_internal.dm" #include "code\modules\organs\subtypes\diona.dm" +#include "code\modules\organs\subtypes\indestructible.dm" #include "code\modules\organs\subtypes\machine.dm" #include "code\modules\organs\subtypes\seromi.dm" #include "code\modules\organs\subtypes\slime.dm" #include "code\modules\organs\subtypes\standard.dm" #include "code\modules\organs\subtypes\unathi.dm" #include "code\modules\organs\subtypes\unbreakable.dm" +#include "code\modules\organs\subtypes\unseverable.dm" #include "code\modules\organs\subtypes\vox.dm" #include "code\modules\organs\subtypes\xenos.dm" #include "code\modules\overmap\_defines.dm"