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

Arachnids #240

Merged
merged 9 commits into from
Aug 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/~monkestation/mobs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#define SPECIES_ARACHNIDS "arachnid"
16 changes: 9 additions & 7 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,16 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_antennas, GLOB.ipc_antennas_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_chassis, GLOB.ipc_chassis_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_antennas, GLOB.ipc_antennas_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_chassis, GLOB.ipc_chassis_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey)
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_head, GLOB.anime_top_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_middle, GLOB.anime_middle_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_bottom, GLOB.anime_bottom_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_head, GLOB.anime_top_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_middle, GLOB.anime_middle_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_bottom, GLOB.anime_bottom_list) //Monkestation Addition
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

//Species
for(var/spath in subtypesof(/datum/species))
Expand Down
24 changes: 16 additions & 8 deletions code/__HELPERS/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
if(!GLOB.pod_hair_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list)
//Monkestation Addition Start
if(!GLOB.ipc_screens_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list)
if(!GLOB.ipc_antennas_list.len)
Expand All @@ -103,6 +104,11 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_middle, GLOB.anime_middle_list)
if(!GLOB.anime_top_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/anime_bottom, GLOB.anime_bottom_list)
if(!GLOB.arachnid_appendages_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_appendages, GLOB.arachnid_appendages_list)
if(!GLOB.arachnid_chelicerae_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list)
MilkForever marked this conversation as resolved.
Show resolved Hide resolved
//Monkestation Addition End

//For now we will always return none for tail_human and ears. | "For now" he says.
return(list(
Expand All @@ -122,15 +128,17 @@
"moth_wings" = pick(GLOB.moth_wings_list),
"moth_antennae" = pick(GLOB.moth_antennae_list),
"moth_markings" = pick(GLOB.moth_markings_list),
"ipc_screen" = pick(GLOB.ipc_screens_list),
"ipc_antenna" = pick(GLOB.ipc_antennas_list),
"ipc_chassis" = pick(GLOB.ipc_chassis_list),
"tail_monkey" = "Chimp",
"ipc_screen" = pick(GLOB.ipc_screens_list), //Monkestation Addition
"ipc_antenna" = pick(GLOB.ipc_antennas_list), //Monkestation Addition
"ipc_chassis" = pick(GLOB.ipc_chassis_list), //Monkestation Addition
"tail_monkey" = "Chimp", //Monkestation Addition
"pod_hair" = pick(GLOB.pod_hair_list),
"anime_top" = pick(GLOB.anime_top_list),
"anime_middle" = pick(GLOB.anime_middle_list),
"anime_bottom" = pick(GLOB.anime_bottom_list),
"animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]",
"anime_top" = pick(GLOB.anime_top_list), //Monkestation Addition
"anime_middle" = pick(GLOB.anime_middle_list), //Monkestation Addition
"anime_bottom" = pick(GLOB.anime_bottom_list), //Monkestation Addition
"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
))

/proc/random_hairstyle(gender)
Expand Down
16 changes: 9 additions & 7 deletions code/_globalvars/lists/flavor_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,17 @@ GLOBAL_LIST_EMPTY(wings_open_list)
GLOBAL_LIST_EMPTY(moth_wings_list)
GLOBAL_LIST_EMPTY(moth_antennae_list)
GLOBAL_LIST_EMPTY(moth_markings_list)
GLOBAL_LIST_EMPTY(ipc_screens_list)
GLOBAL_LIST_EMPTY(ipc_antennas_list)
GLOBAL_LIST_EMPTY(ipc_chassis_list)
GLOBAL_LIST_EMPTY(ipc_screens_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(ipc_antennas_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(ipc_chassis_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(caps_list)
GLOBAL_LIST_EMPTY(pod_hair_list)
GLOBAL_LIST_EMPTY(tails_list_monkey)
GLOBAL_LIST_EMPTY(anime_top_list)
GLOBAL_LIST_EMPTY(anime_middle_list)
GLOBAL_LIST_EMPTY(anime_bottom_list)
GLOBAL_LIST_EMPTY(tails_list_monkey) //Monkestation Addition
GLOBAL_LIST_EMPTY(anime_top_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(anime_middle_list) //Monkestation Addition
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_INIT(color_list_ethereal, list(
"Blue" = "#3399ff",
Expand Down
16 changes: 9 additions & 7 deletions code/modules/mob/living/carbon/human/dummy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,16 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
target.dna.features["spines"] = "None"
target.dna.features["tail_cat"] = "None"
target.dna.features["tail_lizard"] = "Smooth"
target.dna.features["tail_monkey"] = "Chimp"
target.dna.features["tail_monkey"] = "Chimp" //Monkestation Addition
target.dna.features["pod_hair"] = "Ivy"
target.dna.features["ipc_screen"] = "BSOD"
target.dna.features["ipc_chassis"] = "Bishop Cyberkinetics"
target.dna.features["ipc_antenna"] = "None"
target.dna.features["anime_top"] = "None"
target.dna.features["anime_middle"] = "None"
target.dna.features["anime_bottom"] = "None"
target.dna.features["ipc_screen"] = "BSOD" //Monkestation Addition
target.dna.features["ipc_chassis"] = "Bishop Cyberkinetics" //Monkestation Addition
target.dna.features["ipc_antenna"] = "None" //Monkestation Addition
target.dna.features["anime_top"] = "None" //Monkestation Addition
target.dna.features["anime_middle"] = "None" //Monkestation Addition
target.dna.features["anime_bottom"] = "None" //Monkestation Addition
target.dna.features["arachnid_appendages"] = "Long" //Monkestation Addition
target.dna.features["arachnid_chelicerae"] = "Basic" //Monkestation Addition

/// Provides a dummy that is consistently bald, white, naked, etc.
/mob/living/carbon/human/dummy/consistent
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions config/game_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ ROUNDSTART_RACES plasmaman
ROUNDSTART_RACES oozeling
ROUNDSTART_RACES ipc
ROUNDSTART_RACES simian
ROUNDSTART_RACES arachnid

## Races that are better than humans in some ways, but worse in others
ROUNDSTART_RACES ethereal
Expand Down
Binary file modified icons/mob/species/human/human_face.dmi
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/datum/preference/choiced/arachnid_appendages
savefile_key = "feature_arachnid_appendages"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Arachnid Appendages"
should_generate_icons = TRUE

/datum/preference/choiced/arachnid_appendages/init_possible_values()
return possible_values_for_sprite_accessory_list_for_body_part(
GLOB.arachnid_appendages_list,
"arachnid_appendages",
list("BEHIND", "FRONT"),
)

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

/datum/preference/choiced/arachnid_chelicerae
savefile_key = "feature_arachnid_chelicerae"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Arachnid Chelicerae"
should_generate_icons = TRUE

/datum/preference/choiced/arachnid_chelicerae/init_possible_values()
return possible_values_for_sprite_accessory_list_for_body_part(
GLOB.arachnid_chelicerae_list,
"arachnid_chelicerae",
list("BEHIND", "FRONT"),
)

/datum/preference/choiced/arachnid_chelicerae/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["arachnid_chelicerae"] = value
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/datum/sprite_accessory/arachnid_appendages
icon = 'monkestation/icons/mob/species/arachnid/arachnid_appendages.dmi'
color_src = MUTCOLORS

/datum/sprite_accessory/arachnid_appendages/long
name = "Long"
icon_state = "long"

/datum/sprite_accessory/arachnid_appendages/short
name = "Short"
icon_state = "short"

/datum/sprite_accessory/arachnid_appendages/sharp
name = "Sharp"
icon_state = "sharp"

/datum/sprite_accessory/arachnid_appendages/zigzag
name = "Zigzag"
icon_state = "zigzag"

/datum/sprite_accessory/arachnid_appendages/chipped
name = "Chipped"
icon_state = "chipped"

/datum/sprite_accessory/arachnid_appendages/curled
name = "Curled"
icon_state = "curled"
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/datum/sprite_accessory/arachnid_chelicerae
icon = 'monkestation/icons/mob/species/arachnid/arachnid_chelicerae.dmi'
color_src = MUTCOLORS

/datum/sprite_accessory/arachnid_chelicerae/basic
name = "Basic"
icon_state = "basic"
2 changes: 2 additions & 0 deletions monkestation/code/modules/mob/living/carbon/human/human.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/mob/living/carbon/human/species/arachnid
race = /datum/species/arachnid
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/datum/species/arachnid
name = "\improper Arachnid"
plural_form = "Arachnids"
id = SPECIES_ARACHNIDS
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
sexes = FALSE
species_traits = list(
MUTCOLORS,
EYECOLOR,
LIPS,
)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
external_organs = list(
/obj/item/organ/external/arachnid_appendages = "long",
/obj/item/organ/external/chelicerae = "basic")
meat = /obj/item/food/meat/slab/spider
disliked_food = VEGETABLES
liked_food = GORE | MEAT | SEAFOOD | BUGS | GROSS
species_language_holder = /datum/language_holder/fly
mutanttongue = /obj/item/organ/internal/tongue/arachnid
mutanteyes = /obj/item/organ/internal/eyes/night_vision/arachnid
burnmod = 1.2
heatmod = 1.2
brutemod = 0.8
speedmod = -0.1
bodypart_overrides = list(
BODY_ZONE_HEAD = /obj/item/bodypart/head/arachnid,
BODY_ZONE_CHEST = /obj/item/bodypart/chest/arachnid,
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/arachnid,
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/arachnid,
BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/arachnid,
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/arachnid,
)

/datum/species/arachnid/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, seconds_per_tick, times_fired)
if(chem.type == /datum/reagent/toxin/pestkiller)
H.adjustToxLoss(3 * REM * seconds_per_tick)
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * seconds_per_tick)
return TRUE
return ..()

/datum/species/arachnid/check_species_weakness(obj/item/weapon, mob/living/attacker)
if(istype(weapon, /obj/item/melee/flyswatter))
return 30 //flyswatters deal 30x damage to arachnids
return 1

/datum/species/arachnid/get_scream_sound(mob/living/carbon/human/human)
return 'monkestation/sound/voice/screams/arachnid/arachnid_scream.ogg'

/datum/species/arachnid/get_species_description()
return "Arachnids are a species of humanoid spiders recently employed by Nanotrasen."

/datum/species/arachnid/create_pref_unique_perks()
var/list/to_add = list()

to_add += list(
list(
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
SPECIES_PERK_ICON = "bolt",
SPECIES_PERK_NAME = "Agile",
SPECIES_PERK_DESC = "Arachnids run slightly faster than other species.",
),
list(
SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK,
SPECIES_PERK_ICON = "spider",
SPECIES_PERK_NAME = "Big Appendages",
SPECIES_PERK_DESC = "Arachnids have appendages that are not hidden by space suits \
or MODsuits. This can make concealing your identity harder.",
),
list(
SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK,
SPECIES_PERK_ICON = "sun",
SPECIES_PERK_NAME = "Maybe Too Many Eyes",
SPECIES_PERK_DESC = "Arachnids cannot equip any kind of glasses, requiring \
alternatives like welding helmets or implants. Their eyes have night vision however.",
),
)

return to_add

/datum/reagent/mutationtoxin/arachnid
name = "Arachnid Mutation Toxin"
description = "A spidering toxin."
color = "#5EFF3B" //RGB: 94, 255, 59
race = /datum/species/arachnid
taste_description = "webs"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED

/datum/chemical_reaction/arachnid_mutationtoxin
results = list(/datum/reagent/mutationtoxin/arachnid = 1)
required_reagents = list(/datum/reagent/toxin = 1, /datum/reagent/mutationtoxin/lizard = 1)
reaction_tags = REACTION_TAG_HARD
33 changes: 33 additions & 0 deletions monkestation/code/modules/surgery/bodyparts/arachnid_bodyparts.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/obj/item/bodypart/head/arachnid
icon_greyscale = 'monkestation/icons/mob/species/arachnid/bodyparts.dmi'
limb_id = SPECIES_ARACHNIDS
is_dimorphic = FALSE

/obj/item/bodypart/chest/arachnid
icon_greyscale = 'monkestation/icons/mob/species/arachnid/bodyparts.dmi'
limb_id = SPECIES_ARACHNIDS
is_dimorphic = FALSE

/obj/item/bodypart/arm/left/arachnid
icon_greyscale = 'monkestation/icons/mob/species/arachnid/bodyparts.dmi'
limb_id = SPECIES_ARACHNIDS
unarmed_attack_verb = "slash"
unarmed_attack_effect = ATTACK_EFFECT_CLAW
unarmed_attack_sound = 'sound/weapons/slash.ogg'
unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'

/obj/item/bodypart/arm/right/arachnid
icon_greyscale = 'monkestation/icons/mob/species/arachnid/bodyparts.dmi'
limb_id = SPECIES_ARACHNIDS
unarmed_attack_verb = "slash"
unarmed_attack_effect = ATTACK_EFFECT_CLAW
unarmed_attack_sound = 'sound/weapons/slash.ogg'
unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'

/obj/item/bodypart/leg/left/arachnid
icon_greyscale = 'monkestation/icons/mob/species/arachnid/bodyparts.dmi'
limb_id = SPECIES_ARACHNIDS

/obj/item/bodypart/leg/right/arachnid
icon_greyscale = 'monkestation/icons/mob/species/arachnid/bodyparts.dmi'
limb_id = SPECIES_ARACHNIDS
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/obj/item/organ/external/arachnid_appendages
name = "arachnid appendages"
desc = "Extra legs that go on your back, don't actually work for walking sadly."
icon_state = "antennae"

preference = "feature_arachnid_appendages"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_EXTERNAL_WINGS

use_mob_sprite_as_obj_sprite = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/arachnid_appendages

/datum/bodypart_overlay/mutant/arachnid_appendages
layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
feature_key = "arachnid_appendages"

/datum/bodypart_overlay/mutant/arachnid_appendages/get_global_feature_list()
return GLOB.arachnid_appendages_list

/datum/bodypart_overlay/mutant/arachnid_appendages/get_base_icon_state()
return sprite_datum.icon_state //i hate you

/datum/bodypart_overlay/mutant/arachnid_appendages/can_draw_on_bodypart(mob/living/carbon/human/human)
return TRUE //show them anyway no matter what you're wearing
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/obj/item/organ/external/chelicerae
name = "arachnid chelicerae"
desc = "Some fang things, spooky."

preference = "feature_arachnid_chelicerae"
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_EXTERNAL_SNOUT
external_bodytypes = BODYTYPE_SNOUTED

use_mob_sprite_as_obj_sprite = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/arachnid_chelicerae

/datum/bodypart_overlay/mutant/arachnid_chelicerae
layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
feature_key = "arachnid_chelicerae"

/datum/bodypart_overlay/mutant/arachnid_chelicerae/get_global_feature_list()
return GLOB.arachnid_chelicerae_list

/datum/bodypart_overlay/mutant/arachnid_chelicerae/get_base_icon_state()
return sprite_datum.icon_state //i still hate you

/datum/bodypart_overlay/mutant/arachnid_chelicerae/can_draw_on_bodypart(mob/living/carbon/human/human)
if(!(human.wear_mask?.flags_inv & HIDESNOUT) && !(human.head?.flags_inv & HIDESNOUT))
return TRUE
return FALSE
11 changes: 11 additions & 0 deletions monkestation/code/modules/surgery/organs/internal/eyes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,14 @@
desc = "A fragile set of small, mechanical cameras."
icon = 'monkestation/icons/obj/medical/organs/organs.dmi'
icon_state = "clockwork_eyeballs"

/obj/item/organ/internal/eyes/night_vision/arachnid
name = "arachnid eyes"
desc = "So many eyes!"
icon = 'monkestation/icons/obj/medical/organs/organs.dmi'
eye_icon_state = "arachnideyes"
icon_state = "arachnid_eyeballs"
no_glasses = TRUE
low_light_cutoff = list(20, 15, 0)
medium_light_cutoff = list(35, 30, 0)
high_light_cutoff = list(50, 40, 0)
Loading
Loading