Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Satyr Test PR #474

Closed
wants to merge 15 commits into from
2 changes: 2 additions & 0 deletions code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@
#define ORGAN_SLOT_EXTERNAL_ANIME_HEAD "anime_head"
#define ORGAN_SLOT_EXTERNAL_ANIME_CHEST "anime_chest"
#define ORGAN_SLOT_EXTERNAL_ANIME_BOTTOM "anime_bottom"
#define ORGAN_SLOT_EXTERNAL_OUTER_EAR "outer_ear"
#define ORGAN_SLOT_EXTERNAL_FUR "fur"

/// Xenomorph organ slots
#define ORGAN_SLOT_XENO_ACIDGLAND "acid_gland"
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/external_organs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
#define ORGAN_COLOR_HAIR (1<<2)
///uses the parents anime color
#define ORGAN_COLOR_ANIME (1<<3)
///uses the parents mutcolor secondary
#define ORGAN_COLOR_MUTSECONDARY (1<<4)

///Tail wagging
#define WAG_ABLE (1<<0)
#define WAG_WAGGING (1<<1)
3 changes: 2 additions & 1 deletion code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define isandroid(A) (is_species(A, /datum/species/android))
#define isnightmare(A) (is_species(A, /datum/species/shadow/nightmare))
#define isipc(A) (is_species(A, /datum/species/ipc))
#define isgoblin(A) (is_species(A, /datum/species/goblin))//monkestation addition
#define isgoblin(A) (is_species(A, /datum/species/goblin))//Monkestation Addition
#define issatyr(A) (is_species(A, /datum/species/satyr))//Monkestation Addition


//More carbon mobs
Expand Down
3 changes: 2 additions & 1 deletion code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@
#define SPECIES_OOZELING "oozeling"
#define SPECIES_IPC "ipc"
#define SPECIES_SIMIAN "simian"
#define SPECIES_GOBLIN "goblin"//monkestation addition
#define SPECIES_GOBLIN "goblin"//Monkestation Addition
#define SPECIES_SATYR "satyr" //Monkestation Addition
// Like species IDs, but not specifically attached a species.
#define BODYPART_ID_ALIEN "alien"
#define BODYPART_ID_ROBOTIC "robotic"
Expand Down
7 changes: 5 additions & 2 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1187,10 +1187,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define GLUED_ITEM_TRAIT "glued-item"
#define TRAIT_BELT_SATCHEL "belt_satchel"

//monkestation edit start
//Monkestation Addition Start
/// One can breath under water, you get me?
#define TRAIT_WATER_BREATHING "water_breathing"

/// Do IPC's dream of doomsday? The answer is yes
#define TRAIT_ROBOT_CAN_BLEED "robots_can_bleed"
//monkestation edit end

/// No step on glass, stolen from Skyrat
#define TRAIT_HARD_SOLES "hard_soles"
//Monkestation Addition End
4 changes: 4 additions & 0 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_appendages, GLOB.arachnid_appendages_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_horns, GLOB.satyr_horns_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_ears, GLOB.satyr_ears_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/satyr, GLOB.tails_list_satyr) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_fluff, GLOB.satyr_fluff_list) //Monkestation Addition

//Species
for(var/spath in subtypesof(/datum/species))
Expand Down
13 changes: 12 additions & 1 deletion code/__HELPERS/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list)
if(!GLOB.goblin_ears_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list)
if(!GLOB.satyr_horns_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_horns, GLOB.satyr_horns_list)
if(!GLOB.satyr_ears_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_ears, GLOB.satyr_ears_list)
if(!GLOB.tails_list_satyr.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/satyr, GLOB.tails_list_satyr)
if(!GLOB.satyr_fluff_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_fluff, GLOB.satyr_fluff_list)
//Monkestation Addition End

//For now we will always return none for tail_human and ears. | "For now" he says.
Expand Down Expand Up @@ -142,7 +150,10 @@
"arachnid_appendages" = pick(GLOB.arachnid_appendages_list), //Monkestation Addition
"arachnid_chelicerae" = pick(GLOB.arachnid_chelicerae_list), //Monkestation Addition
"animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]", //Monkestation Addition
"goblin_ears" = pick(GLOB.goblin_ears_list) //Monkestation Addition
"goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition
"satyr_horns" = pick(GLOB.satyr_horns_list), //Monkestation Addition
"satyr_ears" = pick(GLOB.satyr_ears_list), //Monkestation Addition
"satyr_tail" = "Short", //Monkestation Addition
))

/proc/random_hairstyle(gender)
Expand Down
4 changes: 4 additions & 0 deletions code/_globalvars/lists/flavor_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ GLOBAL_LIST_EMPTY(animated_spines_list)
GLOBAL_LIST_EMPTY(tails_list)
GLOBAL_LIST_EMPTY(tails_list_human) //Only exists for preference choices. Use "tails_list" otherwise.
GLOBAL_LIST_EMPTY(tails_list_lizard) //See above!
GLOBAL_LIST_EMPTY(tails_list_satyr) //Monkestation Addition
GLOBAL_LIST_EMPTY(ears_list)
GLOBAL_LIST_EMPTY(wings_list)
GLOBAL_LIST_EMPTY(wings_open_list)
Expand All @@ -50,6 +51,9 @@ GLOBAL_LIST_EMPTY(anime_bottom_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(arachnid_appendages_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(arachnid_chelicerae_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(goblin_ears_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(satyr_horns_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(satyr_ears_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(satyr_fluff_list) //Monkestation Addition

GLOBAL_LIST_INIT(color_list_ethereal, list(
"Blue" = "#3399ff",
Expand Down
5 changes: 5 additions & 0 deletions code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.dna.features["animecolor"]
if(ORGAN_COLOR_MUTSECONDARY)
if(!ishuman(ownerlimb.owner))
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.dna.features["mcolor_secondary"]

return TRUE

Expand Down
4 changes: 4 additions & 0 deletions code/datums/components/caltrop.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@
return

if (!(flags & CALTROP_BYPASS_SHOES))
// Monkestation Addition Begin - Hardened Soles Quirk - Stolen from Skyrat
if(HAS_TRAIT(H, TRAIT_HARD_SOLES))
return
// Monkestation Addition End
if ((H.wear_suit?.body_parts_covered | H.w_uniform?.body_parts_covered | H.shoes?.body_parts_covered) & FEET)
return

Expand Down
2 changes: 2 additions & 0 deletions code/modules/mob/living/carbon/human/_species.dm
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,8 @@ GLOBAL_LIST_EMPTY(features_by_species)
accessory = GLOB.caps_list[source.dna.features["caps"]]
if("ipc_screen")
accessory = GLOB.ipc_screens_list[source.dna.features["ipc_screen"]]
if("satyr_fluff")
accessory = GLOB.satyr_fluff_list[source.dna.features["satyr_fluff"]]

if(!accessory || accessory.icon_state == "none")
continue
Expand Down
4 changes: 4 additions & 0 deletions code/modules/mob/living/carbon/human/dummy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
target.dna.features["tail_cat"] = "None"
target.dna.features["tail_lizard"] = "Smooth"
target.dna.features["tail_monkey"] = "Chimp" //Monkestation Addition
target.dna.features["tail_satyr"] = "Short" //Monkestation Addition
target.dna.features["pod_hair"] = "Ivy"
target.dna.features["ipc_screen"] = "BSOD" //Monkestation Addition
target.dna.features["ipc_chassis"] = "Bishop Cyberkinetics" //Monkestation Addition
Expand All @@ -109,6 +110,9 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
target.dna.features["arachnid_appendages"] = "Long" //Monkestation Addition
target.dna.features["arachnid_chelicerae"] = "Basic" //Monkestation Addition
target.dna.features["goblin_ears"] = "Normal" //Monkestation Addition
target.dna.features["satyr_horns"] = "Tall" //Monkestation Addition
target.dna.features["satyr_ears"] = "Floppy" //Monkestation Addition
target.dna.features["satyr_fluff"] = "Normal" //Monkestation Addition

/// Provides a dummy that is consistently bald, white, naked, etc.
/mob/living/carbon/human/dummy/consistent
Expand Down
28 changes: 28 additions & 0 deletions code/modules/surgery/organs/external/tails.dm
Original file line number Diff line number Diff line change
Expand Up @@ -154,3 +154,31 @@
/obj/item/organ/external/tail/lizard/fake
name = "fabricated lizard tail"
desc = "A fabricated severed lizard tail. This one's made of synthflesh. Probably not usable for lizard wine."

///Satyr Tail
/obj/item/organ/external/tail/satyr
name = "satyr tail"
desc = "A short and stubby goat tail."
icon_state = "satyr_tail"
icon = 'monkestation/icons/obj/medical/organs/organs.dmi'

preference = "feature_satyr_tail"
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_EXTERNAL_TAIL

use_mob_sprite_as_obj_sprite = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/satyr

/datum/bodypart_overlay/mutant/tail/satyr
layers = EXTERNAL_ADJACENT | EXTERNAL_FRONT
feature_key = "satyr_tail"
color_source = ORGAN_COLOR_MUTSECONDARY

/datum/bodypart_overlay/mutant/tail/satyr/get_global_feature_list()
return GLOB.tails_list_satyr

/datum/bodypart_overlay/mutant/tail/satyr/get_base_icon_state()
return sprite_datum.icon_state

/datum/bodypart_overlay/mutant/tail/satyr/can_draw_on_bodypart(mob/living/carbon/human/human)
return TRUE
1 change: 1 addition & 0 deletions code/modules/surgery/organs/tongue.dm
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
/datum/language/nekomimetic,
/datum/language/ratvar, //Monkestation Edit
/datum/language/goblin, //Monkestation Addition
/datum/language/satyr, //Monkestation Addition
)

/obj/item/organ/internal/tongue/proc/handle_speech(datum/source, list/speech_args)
Expand Down
1 change: 1 addition & 0 deletions config/game_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@ ROUNDSTART_RACES arachnid
## Races that are better than humans in some ways, but worse in others
ROUNDSTART_RACES ethereal
ROUNDSTART_RACES goblin
ROUNDSTART_RACES satyr
#ROUNDSTART_RACES jelly
#ROUNDSTART_RACES abductor
#ROUNDSTART_RACES synth
Expand Down
104 changes: 104 additions & 0 deletions monkestation/code/modules/client/preferences/species_features/satyr.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/// Satyr Horns ///

/datum/preference/choiced/satyr_horns
savefile_key = "feature_satyr_horns"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Satyr Horns"
should_generate_icons = TRUE

/datum/preference/choiced/satyr_horns/init_possible_values()
var/list/values = list()

var/icon/satyr_head = icon('monkestation/icons/mob/species/satyr/bodyparts.dmi', "satyr_head_m")

for (var/horn_name in GLOB.satyr_horns_list)
var/datum/sprite_accessory/horns = GLOB.satyr_horns_list[horn_name]
if(horns.locked)
continue

var/icon/icon_with_horns = new(satyr_head)
icon_with_horns.Blend(icon(horns.icon, "m_satyr_horns_[horns.icon_state]_FRONT"), ICON_OVERLAY)
icon_with_horns.Scale(64, 64)
icon_with_horns.Crop(15, 64, 15 + 31, 64 - 31)

values[horns.name] = icon_with_horns

return values

/datum/preference/choiced/satyr_horns/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["satyr_horns"] = value

/// Satyr Ears ///

/datum/preference/choiced/satyr_ears
savefile_key = "feature_satyr_ears"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Satyr Ears"
should_generate_icons = TRUE

/datum/preference/choiced/satyr_ears/init_possible_values()
return possible_values_for_sprite_accessory_list_for_body_part(
GLOB.satyr_ears_list,
"satyr_ears",
list("ADJ", "FRONT"),
)

/datum/preference/choiced/satyr_ears/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["satyr_ears"] = value

/// Satyr Tail ///

/datum/preference/choiced/satyr_tail
savefile_key = "feature_satyr_tail"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Satyr Tail"
should_generate_icons = TRUE

/datum/preference/choiced/satyr_tail/init_possible_values()
return possible_values_for_sprite_accessory_list_for_body_part(
GLOB.tails_list_satyr,
"satyr_tail",
list("ADJ", "FRONT"),
)

/datum/preference/choiced/satyr_tail/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["satyr_tail"] = value

/// Satyr Fluff ///

/datum/preference/choiced/satyr_fluff
savefile_key = "feature_satyr_fluff"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Satyr Fluff"
should_generate_icons = TRUE

/datum/preference/choiced/satyr_fluff/init_possible_values()
var/icon/lower_half = icon('icons/blanks/32x32.dmi', "nothing")

for (var/icon in list("human_r_leg", "human_l_leg"))
lower_half.Blend(icon('icons/mob/species/human/bodyparts_greyscale.dmi', icon), ICON_OVERLAY)

var/list/values = list()

for (var/accessory_name in GLOB.satyr_fluff_list)
var/icon/icon_with_socks = new(lower_half)

if (accessory_name != "Nude")
var/datum/sprite_accessory/accessory = GLOB.satyr_fluff_list[accessory_name]

var/icon/accessory_icon = icon('monkestation/icons/mob/species/satyr/satyr_fluff.dmi', "[accessory.icon_state]_preview")
icon_with_socks.Blend(accessory_icon, ICON_OVERLAY)

icon_with_socks.Crop(10, 1, 22, 13)
icon_with_socks.Scale(32, 32)

values[accessory_name] = icon_with_socks

return values

/datum/preference/choiced/satyr_fluff/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["satyr_fluff"] = value
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/// HORNS ///
/datum/sprite_accessory/satyr_horns
icon = 'monkestation/icons/mob/species/satyr/satyr_horns.dmi'
color_src = MUTCOLORS_SECONDARY

/datum/sprite_accessory/satyr_horns/tall
name = "Tall"
icon_state = "tall"

/datum/sprite_accessory/satyr_horns/thick
name = "Thick"
icon_state = "thick"

/datum/sprite_accessory/satyr_horns/back
name = "Back"
icon_state = "back"

/// EARS ///

/datum/sprite_accessory/satyr_ears
color_src = MUTCOLORS_SECONDARY
icon = 'monkestation/icons/mob/species/satyr/satyr_ears.dmi'

/datum/sprite_accessory/satyr_ears/floppy
name = "Floppy"
icon_state = "floppy"

/datum/sprite_accessory/satyr_ears/flat
name = "Flat"
icon_state = "flat"

/datum/sprite_accessory/satyr_ears/pointy
name = "Pointy"
icon_state = "pointy"
/// TAIL ///

/datum/sprite_accessory/tails/satyr
icon = 'monkestation/icons/mob/species/satyr/satyr_tail.dmi'
color_src = MUTCOLORS_SECONDARY

/datum/sprite_accessory/tails/satyr/short
name = "Short"
icon_state = "short"

/// FLUFF ///

/datum/sprite_accessory/satyr_fluff
icon = 'monkestation/icons/mob/species/satyr/satyr_fluff.dmi'
color_src = MUTCOLORS_SECONDARY
body_slots = list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)

/datum/sprite_accessory/satyr_fluff/normal
name = "Normal"
icon_state = "normal"
gender_specific = TRUE
Loading
Loading