GAS: Giant Armored Serpentids (Snake Bugs) (#5139)
## About The Pull Request **The majority of the work was done by Ozzo in #1471.** GAS are snake bugs hailing from Baystation 12. - They hate the heat, but are durable against low-pressure environments and the cold. - They cannot wear suits and most clothes, but have built in armor (it's in their name). - It is harder to grab GAS. - They are taller than the average spaceman. https://github.com/user-attachments/assets/f9ac1078-0d41-4a26-850f-26a2cd7bbf01 They currently have no lore or species description, but plans are in the works for both to be made. ## Why It's Good For The Game It's a new species that was well-recieved when it was tested the first time around, before being lost due to a lack of work on it. I am here to continue work on it and add new features to it if they are requested by the person that wanted them. ## Proof Of Testing It compiled and ran, hence me being able to take the video. There were no runtimes. I attached an image of a stylish GAS as further proof of testing. <details> <summary>Screenshots/Videos</summary> <img width="137" height="111" alt="image" src="https://github.com/user-attachments/assets/4b2ddd78-9312-4f0e-bbac-37bd51290490" /> </details> ## Changelog 🆑 add: Added a new species: Giant Armored Serpentids (GAS)! /🆑
@@ -138,6 +138,7 @@
|
||||
#define SPECIES_HEMOPHAGE "hemophage"
|
||||
#define SPECIES_FELINE_PRIMITIVE "primitive_felinid"
|
||||
#define SPECIES_PROTEAN "protean"
|
||||
#define SPECIES_GAS "serpentid"
|
||||
|
||||
#define SPECIES_MUTANT "mutant"
|
||||
#define SPECIES_MUTANT_INFECTIOUS "infectious_mutant"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#define SERPENTID_ACCESSORIES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/accessories.dmi'
|
||||
#define SERPENTID_BACK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/back.dmi'
|
||||
#define SERPENTID_BELT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/belt.dmi'
|
||||
#define SERPENTID_EYES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/eyes.dmi'
|
||||
#define SERPENTID_HANDS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/hands.dmi'
|
||||
#define SERPENTID_HEAD_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/head.dmi'
|
||||
#define SERPENTID_MASK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/mask.dmi'
|
||||
#define SERPENTID_NECK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/neck.dmi'
|
||||
#define SERPENTID_SUIT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/suit.dmi'
|
||||
#define SERPENTID_UNIFORM_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/uniform.dmi'
|
||||
#define SERPENTID_EARS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/serpentid/ears.dmi'
|
||||
@@ -41,3 +41,5 @@
|
||||
#define AI_HOLOGRAM_BEE "Bee"
|
||||
#define AI_HOLOGRAM_REDPANDA "Red Panda"
|
||||
#define AI_HOLOGRAM_FENNEC "Fennec"
|
||||
|
||||
#define BODYPART_ICON_GAS 'modular_skyrat/modules/bodyparts/icons/serpentid_parts_greyscale.dmi'
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#define isprotean(A) (is_species(A, /datum/species/protean))
|
||||
#define iscursekin(A) (is_species(A, /datum/species/human/cursekin))
|
||||
#define islycan(A) (is_species(A, /datum/species/lycan))
|
||||
#define isgas(A) (is_species(A, /datum/species/gas))
|
||||
//Antags
|
||||
#define ishorrorling(A) (istype(A, /mob/living/simple_animal/hostile/true_changeling))
|
||||
#define iscorticalborer(A) (istype(A, /mob/living/basic/cortical_borer))
|
||||
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -425,6 +425,7 @@ ROUNDSTART_RACES lesser_abductor
|
||||
ROUNDSTART_RACES zombie
|
||||
ROUNDSTART_RACES protean
|
||||
ROUNDSTART_RACES cursekin
|
||||
ROUNDSTART_RACES serpentid
|
||||
|
||||
##-------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 636 B |
@@ -1502,6 +1502,41 @@ TREK
|
||||
name = "Teshari Hardsuit"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json'
|
||||
|
||||
/**
|
||||
* Serpentid fallbacks.
|
||||
* In case what we have another species with specials Json config file. We use this for our case.
|
||||
* Check teshari fasllbacks .json config files for more datails.
|
||||
*/
|
||||
|
||||
/datum/greyscale_config/serpentid
|
||||
name = "Serpentid clothing"
|
||||
icon_file = 'modular_skyrat/modules/GAGS/icons/serpentid_fallbacks.dmi'
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/uniform.json'
|
||||
|
||||
/datum/greyscale_config/serpentid/cloak
|
||||
name = "Serpentid Poncho"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/neck.json'
|
||||
|
||||
/datum/greyscale_config/serpentid/tie
|
||||
name = "Serpentid Tie"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/neck.json'
|
||||
|
||||
/datum/greyscale_config/serpentid/scarf
|
||||
name = "Serpentid Scarf"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/neck.json'
|
||||
|
||||
/datum/greyscale_config/serpentid/gloves
|
||||
name = "Serpentid Gloves"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/gloves.json'
|
||||
|
||||
/datum/greyscale_config/serpentid/eyes
|
||||
name = "Serpentid Eyes"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/eyes.json'
|
||||
|
||||
/datum/greyscale_config/serpentid/belt
|
||||
name = "Serpentid Belt"
|
||||
json_config = 'modular_skyrat/modules/GAGS/json_configs/serpentid_fallbacks/belt.json'
|
||||
|
||||
/*
|
||||
* CIN SURPLUS ARMOR
|
||||
*/
|
||||
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "belt",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "eyes",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "gloves",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "poncho",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "uniform",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
#define GAS_PUNCH_LOW 3 // Humanoid pair of hands is extremely weak and deals reduced damage.
|
||||
#define GAS_PUNCH_HIGH 5
|
||||
//GAS
|
||||
|
||||
/obj/item/bodypart/head/mutant/serpentid
|
||||
icon_greyscale = BODYPART_ICON_GAS
|
||||
bodytype = BODYTYPE_ORGANIC
|
||||
limb_id = SPECIES_GAS
|
||||
bodyshape = parent_type::bodyshape | BODYSHAPE_CUSTOM
|
||||
head_flags = HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN
|
||||
|
||||
/obj/item/bodypart/head/mutant/serpentid/Initialize(mapload)
|
||||
worn_ears_offset = new(
|
||||
attached_part = src,
|
||||
feature_key = OFFSET_EARS,
|
||||
offset_y = list("north" = 9, "south" = 9, "east" = 9, "west" = 9),
|
||||
)
|
||||
worn_head_offset = new(
|
||||
attached_part = src,
|
||||
feature_key = OFFSET_HEAD,
|
||||
offset_y = list("north" = 8, "south" = 8, "east" = 8, "west" = 8),
|
||||
)
|
||||
worn_mask_offset = new(
|
||||
attached_part = src,
|
||||
feature_key = OFFSET_FACEMASK,
|
||||
offset_y = list("north" = 7, "south" = 7, "east" = 7, "west" = 7),
|
||||
)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/bodypart/chest/mutant/serpentid
|
||||
icon_greyscale = BODYPART_ICON_GAS
|
||||
bodytype = BODYTYPE_ORGANIC
|
||||
bodyshape = parent_type::bodyshape | BODYSHAPE_CUSTOM
|
||||
limb_id = SPECIES_GAS
|
||||
|
||||
/obj/item/bodypart/chest/mutant/serpentid/Initialize(mapload)
|
||||
worn_back_offset = new(
|
||||
attached_part = src,
|
||||
feature_key = OFFSET_BACK,
|
||||
offset_y = list("north" = 5, "south" = 5, "east" = 5, "west" = 5),
|
||||
)
|
||||
worn_accessory_offset = new(
|
||||
attached_part = src,
|
||||
feature_key = OFFSET_ACCESSORY,
|
||||
offset_y = list("north" = 5, "south" = 5, "east" = 5, "west" = 5),
|
||||
)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/bodypart/arm/left/mutant/serpentid
|
||||
icon_greyscale = BODYPART_ICON_GAS
|
||||
bodytype = BODYTYPE_ORGANIC
|
||||
limb_id = SPECIES_GAS
|
||||
bodyshape = parent_type::bodyshape | BODYSHAPE_CUSTOM
|
||||
unarmed_damage_low = GAS_PUNCH_LOW
|
||||
unarmed_damage_high = GAS_PUNCH_HIGH
|
||||
|
||||
|
||||
brute_modifier = 0.8
|
||||
burn_modifier = 1.4
|
||||
|
||||
|
||||
/obj/item/bodypart/arm/right/mutant/serpentid
|
||||
icon_greyscale = BODYPART_ICON_GAS
|
||||
bodytype = BODYTYPE_ORGANIC
|
||||
limb_id = SPECIES_GAS
|
||||
bodyshape = parent_type::bodyshape | BODYSHAPE_CUSTOM
|
||||
unarmed_damage_low = GAS_PUNCH_LOW
|
||||
unarmed_damage_high = GAS_PUNCH_HIGH
|
||||
|
||||
brute_modifier = 0.8
|
||||
burn_modifier = 1.4
|
||||
|
||||
|
||||
/obj/item/bodypart/leg/left/mutant/serpentid
|
||||
icon_greyscale = BODYPART_ICON_GAS
|
||||
bodytype = BODYTYPE_ORGANIC
|
||||
bodyshape = parent_type::bodyshape | BODYSHAPE_CUSTOM
|
||||
limb_id = SPECIES_GAS
|
||||
|
||||
brute_modifier = 0.8
|
||||
burn_modifier = 1.4
|
||||
|
||||
|
||||
/obj/item/bodypart/leg/right/mutant/serpentid
|
||||
icon_greyscale = BODYPART_ICON_GAS
|
||||
bodytype = BODYTYPE_ORGANIC
|
||||
bodyshape = parent_type::bodyshape | BODYSHAPE_CUSTOM
|
||||
limb_id = SPECIES_GAS
|
||||
brute_modifier = 0.8
|
||||
burn_modifier = 1.4
|
||||
|
||||
|
||||
|
||||
#undef GAS_PUNCH_LOW
|
||||
#undef GAS_PUNCH_HIGH
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -71,6 +71,9 @@
|
||||
/mob/living/carbon/human/species/skrell
|
||||
race = /datum/species/skrell
|
||||
|
||||
/mob/living/carbon/human/species/serpentid
|
||||
race = /datum/species/gas
|
||||
|
||||
/mob/living/carbon/human/verb/toggle_undies()
|
||||
set category = "IC"
|
||||
set name = "Toggle underwear visibility"
|
||||
|
||||
@@ -0,0 +1,296 @@
|
||||
#define BASE_CLOTH_X_1 1
|
||||
#define BASE_CLOTH_Y_1 1
|
||||
|
||||
#define SERPENTID_COLD_THRESHOLD_1 180
|
||||
#define SERPENTID_COLD_THRESHOLD_2 140
|
||||
#define SERPENTID_COLD_THRESHOLD_3 100
|
||||
|
||||
#define SERPENTID_HEAT_THRESHOLD_1 300
|
||||
#define SERPENTID_HEAT_THRESHOLD_2 440
|
||||
#define SERPENTID_HEAT_THRESHOLD_3 600
|
||||
|
||||
/datum/species/gas
|
||||
name = "Giant Armored Serpentid"
|
||||
id = SPECIES_GAS
|
||||
eyes_icon = 'modular_skyrat/modules/organs/icons/serpentid_eyes.dmi'
|
||||
can_augment = FALSE
|
||||
|
||||
inherent_traits = list(
|
||||
TRAIT_ADVANCEDTOOLUSER,
|
||||
TRAIT_CHUNKYFINGERS_IGNORE_BATON,
|
||||
TRAIT_PUSHIMMUNE,
|
||||
TRAIT_RESISTHIGHPRESSURE,
|
||||
TRAIT_RESISTLOWPRESSURE,
|
||||
TRAIT_MUTANT_COLORS,
|
||||
TRAIT_NO_UNDERWEAR,
|
||||
TRAIT_NO_SLIP_ALL,
|
||||
)
|
||||
|
||||
no_equip_flags = ITEM_SLOT_FEET | ITEM_SLOT_OCLOTHING | ITEM_SLOT_SUITSTORE
|
||||
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID
|
||||
no_gender_shaping = TRUE
|
||||
mutanttongue = /obj/item/organ/tongue/insect
|
||||
|
||||
always_customizable = FALSE
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
|
||||
bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 10)
|
||||
bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 25)
|
||||
|
||||
mutantbrain = /obj/item/organ/brain/serpentid
|
||||
mutanteyes = /obj/item/organ/eyes/serpentid
|
||||
mutantlungs = /obj/item/organ/lungs/serpentid
|
||||
mutantheart = /obj/item/organ/heart/serpentid
|
||||
mutantliver = /obj/item/organ/liver/serpentid
|
||||
mutantears = /obj/item/organ/ears/serpentid
|
||||
mutanttongue = /obj/item/organ/tongue/synth
|
||||
bodypart_overrides = list(
|
||||
BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/serpentid,
|
||||
BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/serpentid,
|
||||
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/serpentid,
|
||||
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/serpentid,
|
||||
BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/serpentid,
|
||||
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/serpentid,
|
||||
)
|
||||
custom_worn_icons = list(
|
||||
LOADOUT_ITEM_HEAD = SERPENTID_HEAD_ICON,
|
||||
LOADOUT_ITEM_MASK = SERPENTID_MASK_ICON,
|
||||
LOADOUT_ITEM_UNIFORM = SERPENTID_UNIFORM_ICON,
|
||||
LOADOUT_ITEM_HANDS = SERPENTID_HANDS_ICON,
|
||||
LOADOUT_ITEM_GLASSES = SERPENTID_EYES_ICON,
|
||||
LOADOUT_ITEM_BELT = SERPENTID_BELT_ICON,
|
||||
LOADOUT_ITEM_MISC = SERPENTID_BACK_ICON,
|
||||
LOADOUT_ITEM_EARS = SERPENTID_EARS_ICON
|
||||
)
|
||||
|
||||
/datum/species/gas/randomize_features()
|
||||
var/list/features = ..()
|
||||
var/main_color
|
||||
var/random = rand(1, 6)
|
||||
switch(random)
|
||||
if(1)
|
||||
main_color = "#44FF77"
|
||||
if(2)
|
||||
main_color = "#227900"
|
||||
if(3)
|
||||
main_color = "#c40000"
|
||||
if(4)
|
||||
main_color = "#660000"
|
||||
if(5)
|
||||
main_color = "#c0ad00"
|
||||
if(6)
|
||||
main_color = "#e6ff03"
|
||||
features[FEATURE_MUTANT_COLOR] = main_color
|
||||
features[FEATURE_MUTANT_COLOR_TWO] = main_color
|
||||
features[FEATURE_MUTANT_COLOR_THREE] = main_color
|
||||
return features
|
||||
|
||||
/datum/species/gas/prepare_human_for_preview(mob/living/carbon/human/serpentid)
|
||||
var/serpentid_color = "#00ac1d"
|
||||
serpentid.dna.features[FEATURE_MUTANT_COLOR] = serpentid_color
|
||||
serpentid.dna.features[FEATURE_MUTANT_COLOR_TWO] = serpentid_color
|
||||
serpentid.dna.features[FEATURE_MUTANT_COLOR_THREE] = serpentid_color
|
||||
regenerate_organs(serpentid, src, visual_only = TRUE)
|
||||
serpentid.update_body(TRUE)
|
||||
|
||||
/datum/species/gas/create_pref_unique_perks()
|
||||
var/list/perk_descriptions = list()
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
|
||||
SPECIES_PERK_ICON = FA_ICON_SHIELD,
|
||||
SPECIES_PERK_NAME = "Durable Chitin",
|
||||
SPECIES_PERK_DESC = "The Giant Armored Serpentid chitin is very robust and protects them from pressure and low temperature hazards, while also providing decent brute resistance."
|
||||
))
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
|
||||
SPECIES_PERK_ICON = FA_ICON_WEIGHT_HANGING,
|
||||
SPECIES_PERK_NAME = "Heavy Skeleton",
|
||||
SPECIES_PERK_DESC = "Giant Armored Serpentid are large and heavy, this makes them excellent at avoiding slipping and being grabbed."
|
||||
))
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
|
||||
SPECIES_PERK_ICON = FA_ICON_USER_NINJA,
|
||||
SPECIES_PERK_NAME = "Active Camouflage",
|
||||
SPECIES_PERK_DESC = "The cells in a Giant Armored Serpentid's body are able to camouflage themselves to an extent, making the GAS appear translucent to the naked eye."
|
||||
))
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK,
|
||||
SPECIES_PERK_ICON = FA_ICON_EYE,
|
||||
SPECIES_PERK_NAME = "Shielded Eyes",
|
||||
SPECIES_PERK_DESC = "Giant Armored Serpentid have sensitive eyes, luckily they have eyeshields that can be used to make up for this."
|
||||
))
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK,
|
||||
SPECIES_PERK_ICON = FA_ICON_FACE_ANGRY,
|
||||
SPECIES_PERK_NAME = "Threat Display",
|
||||
SPECIES_PERK_DESC = "Giant Armored Serpentid are not good at communication, however, they can perform a threat display to show when they want to attack someone."
|
||||
))
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
|
||||
SPECIES_PERK_ICON = "star-of-life",
|
||||
SPECIES_PERK_NAME = "Custom Body",
|
||||
SPECIES_PERK_DESC = "Giant Armored Serpentid have a non-humanoid body and can't wear most clothes."
|
||||
))
|
||||
|
||||
perk_descriptions += list(list(
|
||||
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
|
||||
SPECIES_PERK_ICON = FA_ICON_TEMPERATURE_HALF,
|
||||
SPECIES_PERK_NAME = "Cold-Blooded",
|
||||
SPECIES_PERK_DESC = "Giant Armored Serpentid are a cold blooded species and are vulnerable to temperature changes in their environment."
|
||||
))
|
||||
|
||||
return perk_descriptions
|
||||
|
||||
/datum/species/gas/get_species_description()
|
||||
return list(
|
||||
"Giant Armoured Serpentids, or GAS as they are often called are large insectoids hailing from a planet in the Tiziran Empire. \
|
||||
They are excellent hunters, with phenomenal stealth capabilities, but are lacking in communication skills."
|
||||
)
|
||||
|
||||
/datum/species/gas/get_species_lore()
|
||||
return list(
|
||||
"The Giant Armoured Serpentids are an old race, of insectoid creatures from a high gravity world in the Tiziran Empire. \
|
||||
Covered in intersecting scales, with a pair of huge claws as their main limbs, they vaguely resemble Terran mantids, though they've more \
|
||||
in common with snakes and other reptiles from a Terran point of view.",
|
||||
"Living in a semi-hive/colony state, GAS, as they're referred to by Nanotrasen, have a lack of self identity compared to most species, \
|
||||
with few having a given name. This however is routinely ignored by most other races, and often they assign one to one they're working with, \
|
||||
for ease of communication. While they live in large colonies with other GAS, up to and rarely exceeding two hundred individuals, they do not \
|
||||
care for physical interaction with most, preferring to be left alone and given their personal space, such that they can seem aggressive even \
|
||||
when normal actions such as a handshake or hug are offered by ignorant members of other species."
|
||||
)
|
||||
/datum/species/gas/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick, times_fired)
|
||||
return
|
||||
|
||||
/obj/item/organ/ears/serpentid
|
||||
name = "antennae"
|
||||
icon = 'modular_skyrat/modules/organs/icons/serpentid_organs.dmi'
|
||||
icon_state = "ears"
|
||||
|
||||
/obj/item/organ/heart/serpentid
|
||||
name = "serpentid heart"
|
||||
icon = 'modular_skyrat/modules/organs/icons/serpentid_organs.dmi'
|
||||
icon_state = "heart"
|
||||
actions_types = list(/datum/action/cooldown/spell/toggle_active_camo)
|
||||
var/camouflaged = FALSE
|
||||
|
||||
/obj/item/organ/heart/serpentid/proc/toggle_camo()
|
||||
if(!camouflaged)
|
||||
owner.alpha = 100
|
||||
camouflaged = TRUE
|
||||
else
|
||||
owner.alpha = 255
|
||||
camouflaged = FALSE
|
||||
|
||||
/obj/item/organ/brain/serpentid
|
||||
name = "distributed nervous system"
|
||||
icon = 'modular_skyrat/modules/organs/icons/serpentid_organs.dmi'
|
||||
icon_state = "brain"
|
||||
actions_types = list(/datum/action/cooldown/spell/toggle_threat_display)
|
||||
|
||||
/obj/item/organ/eyes/serpentid
|
||||
name = "compound eyes"
|
||||
desc = "Small orange orbs."
|
||||
icon = 'modular_skyrat/modules/organs/icons/serpentid_organs.dmi'
|
||||
icon_state = "eyes"
|
||||
flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE
|
||||
iris_overlay = null
|
||||
blink_animation = FALSE
|
||||
eye_icon = 'modular_skyrat/modules/organs/icons/serpentid_eyes.dmi'
|
||||
eye_icon_state = "eyes"
|
||||
actions_types = list(/datum/action/cooldown/spell/toggle_eye_shields)
|
||||
var/eyes_shielded
|
||||
|
||||
/obj/item/organ/lungs/serpentid
|
||||
name = "tracheae"
|
||||
icon = 'modular_skyrat/modules/organs/icons/serpentid_organs.dmi'
|
||||
icon_state = "lungs"
|
||||
|
||||
cold_message = "You can't stand the freezing cold with every breath you take!"
|
||||
cold_level_1_threshold = SERPENTID_COLD_THRESHOLD_1
|
||||
cold_level_2_threshold = SERPENTID_COLD_THRESHOLD_2
|
||||
cold_level_3_threshold = SERPENTID_COLD_THRESHOLD_3
|
||||
cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
|
||||
cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_1
|
||||
cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_2
|
||||
cold_damage_type = BRUTE
|
||||
|
||||
|
||||
hot_message = "You can't stand the searing heat with every breath you take!"
|
||||
heat_level_1_threshold = SERPENTID_HEAT_THRESHOLD_1
|
||||
heat_level_2_threshold = SERPENTID_HEAT_THRESHOLD_2
|
||||
heat_level_3_threshold = SERPENTID_HEAT_THRESHOLD_3
|
||||
heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
|
||||
heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_3
|
||||
heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
|
||||
heat_damage_type = BURN
|
||||
|
||||
/obj/item/organ/liver/serpentid
|
||||
name = "toxin filter"
|
||||
icon_state = "liver"
|
||||
icon = 'modular_skyrat/modules/organs/icons/serpentid_organs.dmi'
|
||||
liver_resistance = 0.8 * LIVER_DEFAULT_TOX_RESISTANCE // -40%
|
||||
|
||||
/obj/item
|
||||
var/datum/greyscale_config/greyscale_config_worn_serpentid_fallback
|
||||
|
||||
/datum/species/gas/get_custom_worn_icon(item_slot, obj/item/item)
|
||||
return item.worn_icon_gas
|
||||
|
||||
/datum/species/gas/set_custom_worn_icon(item_slot, obj/item/item, icon/icon)
|
||||
item.worn_icon_gas = icon
|
||||
|
||||
/datum/species/gas/get_custom_worn_config_fallback(item_slot, obj/item/item)
|
||||
return item.greyscale_config_worn_serpentid_fallback
|
||||
|
||||
/datum/species/gas/generate_custom_worn_icon(item_slot, obj/item/item, mob/living/carbon/human/human_owner)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
. = generate_custom_worn_icon_fallback(item_slot, item, human_owner)
|
||||
if(.)
|
||||
return
|
||||
|
||||
/obj/item/clothing/under
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid
|
||||
|
||||
/obj/item/clothing/neck
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid/scarf
|
||||
|
||||
/obj/item/clothing/neck/cloak
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid/cloak
|
||||
|
||||
/obj/item/clothing/neck/tie
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid/tie
|
||||
|
||||
/obj/item/clothing/gloves
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid/gloves
|
||||
|
||||
/obj/item/clothing/glasses
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid/eyes
|
||||
|
||||
/obj/item/clothing/belt
|
||||
species_clothing_color_coords = list(list(BASE_CLOTH_X_1, BASE_CLOTH_Y_1))
|
||||
greyscale_config_worn_serpentid_fallback = /datum/greyscale_config/serpentid/belt
|
||||
|
||||
#undef BASE_CLOTH_X_1
|
||||
#undef BASE_CLOTH_Y_1
|
||||
|
||||
#undef SERPENTID_COLD_THRESHOLD_1
|
||||
#undef SERPENTID_COLD_THRESHOLD_2
|
||||
#undef SERPENTID_COLD_THRESHOLD_3
|
||||
|
||||
#undef SERPENTID_HEAT_THRESHOLD_1
|
||||
#undef SERPENTID_HEAT_THRESHOLD_2
|
||||
#undef SERPENTID_HEAT_THRESHOLD_3
|
||||
@@ -53,3 +53,6 @@
|
||||
|
||||
/datum/species/teshari/get_scream_sound(mob/living/carbon/human/teshari)
|
||||
return 'modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg'
|
||||
|
||||
/datum/species/gas/get_scream_sound(mob/living/carbon/human/serpentid)
|
||||
return 'modular_skyrat/modules/emotes/sound/emotes/serpentidscream.ogg'
|
||||
|
||||
@@ -67,3 +67,8 @@ GLOBAL_LIST_EMPTY(laugh_types)
|
||||
name = "Vox Laugh"
|
||||
male_laughsounds = list('modular_zubbers/sound/mobs/humanoids/vox/vox_laugh.ogg')
|
||||
female_laughsounds = null
|
||||
|
||||
/datum/laugh_type/serpentid
|
||||
name = "Ascent Laugh"
|
||||
male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/serpentidlaugh.ogg')
|
||||
female_laughsounds = null
|
||||
|
||||
|
After Width: | Height: | Size: 886 B |
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,84 @@
|
||||
/datum/action/cooldown/spell/toggle_eye_shields
|
||||
name = "Toggle Eye Shields"
|
||||
desc = "Toggle your protective eye shields."
|
||||
button_icon = 'modular_zubbers/icons/actions/gas.dmi'
|
||||
button_icon_state = "gas_eyeshield"
|
||||
spell_requirements = null
|
||||
|
||||
/datum/action/cooldown/spell/toggle_eye_shields/cast(atom/cast_on)
|
||||
. = ..()
|
||||
var/obj/item/organ/eyes/serpentid/eyes = owner?.get_organ_slot(ORGAN_SLOT_EYES)
|
||||
var/mob/living/carbon/human/human_owner = owner
|
||||
if(!eyes)
|
||||
return
|
||||
if(!eyes.eyes_shielded)
|
||||
to_chat(owner, span_notice("Nearly opaque lenses slide down to shield your eyes."))
|
||||
eyes.eyes_shielded = TRUE
|
||||
eyes.flash_protect = FLASH_PROTECTION_WELDER_SENSITIVE
|
||||
owner.overlay_fullscreen("eyeshield", /atom/movable/screen/fullscreen/blind)
|
||||
human_owner.set_eye_color("#AAAAAA")
|
||||
human_owner.dna.update_ui_block((/datum/dna_block/identity/eye_colors))
|
||||
human_owner.update_body()
|
||||
else
|
||||
to_chat(owner, span_notice("Your protective lenses retract out of the way."))
|
||||
eyes.eyes_shielded = FALSE
|
||||
eyes.flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE
|
||||
owner.clear_fullscreen("eyeshield")
|
||||
human_owner.set_eye_color(sanitize_hexcolor(human_owner.client?.prefs?.read_preference(/datum/preference/color/eye_color)))
|
||||
human_owner.dna.update_ui_block(/datum/dna_block/identity/eye_colors)
|
||||
human_owner.update_body()
|
||||
|
||||
/datum/action/cooldown/spell/toggle_active_camo
|
||||
name = "Toggle Active Camo"
|
||||
desc = "Toggle your active camo ability, becoming more translucent."
|
||||
button_icon = 'modular_zubbers/icons/actions/gas.dmi'
|
||||
button_icon_state = "gas-cloak-0"
|
||||
spell_requirements = null
|
||||
|
||||
/datum/action/cooldown/spell/toggle_active_camo/proc/update_button_state(new_state)
|
||||
button_icon_state = new_state
|
||||
owner.update_action_buttons()
|
||||
|
||||
/datum/action/cooldown/spell/toggle_active_camo/cast(atom/target)
|
||||
. = ..()
|
||||
var/obj/item/organ/heart/serpentid/heart = owner?.get_organ_slot(ORGAN_SLOT_HEART)
|
||||
heart.toggle_camo(target)
|
||||
if(heart.camouflaged)
|
||||
update_button_state("gas-cloak-1")
|
||||
else
|
||||
update_button_state("gas-cloak-0")
|
||||
|
||||
/datum/action/cooldown/spell/toggle_threat_display
|
||||
name = "Toggle Threat Display"
|
||||
desc = "Toggle your threat display, letting your enemies know that you are ready for a fight!"
|
||||
button_icon = 'modular_zubbers/icons/actions/gas.dmi'
|
||||
button_icon_state = "gas-threat"
|
||||
spell_requirements = null
|
||||
|
||||
/datum/species/gas
|
||||
var/displaying_threat = FALSE
|
||||
var/image/threat_overlay
|
||||
|
||||
/datum/action/cooldown/spell/toggle_threat_display/cast(atom/target)
|
||||
. = ..()
|
||||
if(!isgas(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/snake_owner = owner
|
||||
var/datum/species/gas/gas_species = snake_owner.dna.species
|
||||
if(owner.incapacitated)
|
||||
to_chat(owner, span_warning("You can't do a threat display in your current state."))
|
||||
return
|
||||
if(gas_species.displaying_threat == FALSE)
|
||||
gas_species.threat_overlay = image('modular_skyrat/modules/bodyparts/icons/serpentid_parts_greyscale.dmi', "threat", MOB_LAYER)
|
||||
var/message = tgui_alert(owner, "Would you like to show a scary message?", "Be Scary", list("Yes", "No", "Cancel"))
|
||||
if(message == "Cancel")
|
||||
return
|
||||
else if(message == "Yes")
|
||||
owner.visible_message(span_warning("\The [owner]'s skin shifts to a deep red colour with dark chevrons running down in an almost hypnotic \
|
||||
pattern. Standing tall, [owner.p_they()] strikes, sharp spikes aimed at those threatening [owner.p_them()], claws whooshing through the air past them."))
|
||||
playsound(owner.loc, 'modular_skyrat/modules/emotes/sound/emotes/angryserpentid.ogg', 60, 0)
|
||||
gas_species.displaying_threat = TRUE
|
||||
snake_owner.add_overlay(gas_species.threat_overlay)
|
||||
else
|
||||
snake_owner.cut_overlay(gas_species.threat_overlay)
|
||||
gas_species.displaying_threat = FALSE
|
||||
@@ -0,0 +1,3 @@
|
||||
/obj/item
|
||||
/// Icon file for mob worn overylays, if the user is a serpentid
|
||||
var/icon/worn_icon_gas
|
||||
@@ -0,0 +1,9 @@
|
||||
/datum/emote/living/cough/get_sound(mob/living/user)
|
||||
if(isgas(user))
|
||||
return 'modular_skyrat/modules/emotes/sound/emotes/serpentidcough.ogg'
|
||||
. = ..()
|
||||
|
||||
/datum/emote/living/sneeze/get_sound(mob/living/user)
|
||||
if(isgas(user))
|
||||
return 'modular_skyrat/modules/emotes/sound/emotes/serpentidsneeze.ogg'
|
||||
. = ..()
|
||||
@@ -7,3 +7,8 @@
|
||||
name = "Slug Scream"
|
||||
male_screamsounds = list('modular_zubbers/sound/emotes/screams/slug_scream.ogg') // From Splurt, further credit to https://www.youtube.com/watch?v=AdGk4PHQDOE
|
||||
female_screamsounds = null
|
||||
|
||||
/datum/scream_type/serpentid
|
||||
name = "Ascent Scream"
|
||||
male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/serpentidscream.ogg')
|
||||
female_screamsounds = null
|
||||
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -526,6 +526,7 @@
|
||||
#include "code\__DEFINES\~~bubber_defines\economy.dm"
|
||||
#include "code\__DEFINES\~~bubber_defines\experisci.dm"
|
||||
#include "code\__DEFINES\~~bubber_defines\footsteps.dm"
|
||||
#include "code\__DEFINES\~~bubber_defines\gas_clothing_paths.dm"
|
||||
#include "code\__DEFINES\~~bubber_defines\guns.dm"
|
||||
#include "code\__DEFINES\~~bubber_defines\hud.dm"
|
||||
#include "code\__DEFINES\~~bubber_defines\item.dm"
|
||||
@@ -7518,6 +7519,7 @@
|
||||
#include "modular_skyrat\modules\bodyparts\code\parts.dm"
|
||||
#include "modular_skyrat\modules\bodyparts\code\podperson_bodyparts.dm"
|
||||
#include "modular_skyrat\modules\bodyparts\code\roundstartslime_bodyparts.dm"
|
||||
#include "modular_skyrat\modules\bodyparts\code\serpentid_bodyparts.dm"
|
||||
#include "modular_skyrat\modules\bodyparts\code\skrell_bodyparts.dm"
|
||||
#include "modular_skyrat\modules\bodyparts\code\slime_bodyparts.dm"
|
||||
#include "modular_skyrat\modules\bodyparts\code\snail_bodyparts.dm"
|
||||
@@ -7876,6 +7878,7 @@
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\mushpeople.dm"
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\placeholder_helper.dm"
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\podweak.dm"
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\serpentid.dm"
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\skrell.dm"
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\tajaran.dm"
|
||||
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\unathi.dm"
|
||||
@@ -9365,6 +9368,9 @@
|
||||
#include "modular_zubbers\code\modules\customization\modules\client\augment\limbs.dm"
|
||||
#include "modular_zubbers\code\modules\customization\modules\reagents\drink_reagents.dm"
|
||||
#include "modular_zubbers\code\modules\customization\quad_eyes\preferences.dm"
|
||||
#include "modular_zubbers\code\modules\customization\species\gas\code\actions.dm"
|
||||
#include "modular_zubbers\code\modules\customization\species\gas\code\clothes.dm"
|
||||
#include "modular_zubbers\code\modules\customization\species\gas\code\emote.dm"
|
||||
#include "modular_zubbers\code\modules\customization\species\lycans\__DEFINES.dm"
|
||||
#include "modular_zubbers\code\modules\customization\species\lycans\_cursekin_species.dm"
|
||||
#include "modular_zubbers\code\modules\customization\species\lycans\_lycan_species.dm"
|
||||
|
||||