Praise Be and Skkula: The PR (Skkulakin Race 2025) [READY FOR REVIEW] (#30744)

* skulk.dm placeholder for testing purposes

* Made an oopsie, fixed

* Skulk flesh color and language color testing

* Adding working language key, fixed language color

* Changed skulk flesh color, may change it again soon

* Ran tgui, hopefully fixed language color

* Changed skulk language color, hopefully for good this time

* Missed a spot

* Tgui fuckery

* If at first you don't succeed, cry to yourself for a bit then try again

* Tgui makes me violent

* Eyewear no longer save Skkulakin from flashes

* Skulk bones now hurt really bad

* Adds Skulk Sprites, Back Accessories, and other Placeholders

* Desperately trying to get body_accessories to work

* Minor name changes

* Skkulakin now have colorable eyes

* Makes the silk-spinning ability somewhat work, more changes need to be made

* Fixes the Skulks' ability to spin silk, however still needs changes

* Changed Skulks easier bone breaks into a trait

* Skulks (Now with 100% ethically sourced back spines!)

* Gives Skkulakin the Vox clothing sprites (Not counting head, glasses, or masks)

* Added update_spines_layer() for testing and help purposes

* Working on getting Skulk Backspines to change color depending on preset

* Skulk Backspines are now colored the same as your preset up spawning in (Thank you, Qwerty)

* Undefines SILK_NUTRITION_AMOUNT (I made a woopsie)

* Readds a return I may have accidentally removed at some point

* Skkulakin can now chitter

* Silk now be used to craft cloth and has an icon

* TGUI is going to make me do things

* Fixes the Brittle Bones Trait to work with Frail Quirk

* Sprite Fix

* Adds masking helpers

* Made a small woopsie

* I'm genuinely a fucking idiot

* Adds a bunch of new clothing

* Changes some clothing descriptions

* Fixes more placeholders and adds two new outfits

* Made small mistake, fixed

* Temporary change (Will revert soon)

* Reverted previous changes as the event is now over

* New Skulk Clothing, added some to the racial tab in the loadout, and made low-inquis robes orderable from cargo

* Adds High-Inquis Robes into cargo console

* Adds Skkulakin Flag (Orderable From Merch Vendor)

* Made small mistake, fixed it

* Inquisitorial Crate only has Low-Inquisitor clothing again

* Commits all offered suggestions

* Converts spans to defines and sorts out the rest of Skulk clothing (No MODs just yet)

* Gives Skulks the Nian Butt Sprite for now

* Fixes a small error with biosuits

* Fixes small coding error

* Fixes a few mor small coding errors

* Update code/modules/mob/living/carbon/human/appearance.dm

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>

* Update code/game/objects/items/stacks/sheets/sheet_types.dm

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>

* Update code/modules/economy/merch_items.dm

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>

* Removes 'collective' from outfit_admin.dm

* Basic Pixel-Shifting (Not Yet Complete)

* improve skulk headwear offset

* Revert "improve skulk headwear offset"

This reverts commit 2d93d61699.

* improve skulk headwear offset

* Cleans up some code and fixes ALL hats for Skkulakin

* Lets the AI speak Skkula-Runespeak, fixes Bomber Jackets and Winter Coats, makes Backpacks look better, fixes other small sprite issues

* Let them wear pants

* Update code/modules/mob/language.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>

* Fixes masks and glasses for skkulakin

* Fixes Inquisitor Masks and adds missing Engineering Outfits

* Fixes Explorer Suits and HECK Suit for Skulks

* Fixes a few small issues and resolves some suggested changes

* Rebuilds TGUI

* Fixes Science Jumpsuits & Radsuits

* Fix Skkulakin chef belt disappearance.

* fix string assoc lookups for alists

* Update code/game/objects/structures/mirror.dm

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>

* Update code/modules/mob/living/carbon/human/species/skulk.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>

---------

Signed-off-by: AVeryReluctantSpider <102713858+AVeryReluctantSpider@users.noreply.github.com>
Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Co-authored-by: warriorstar-orion <orion@snowfrost.garden>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: Alfalfa Scout <alfalfascout@proton.me>
This commit is contained in:
AVeryReluctantSpider
2026-01-17 20:54:56 +00:00
committed by GitHub
co-authored by Contrabang DGamerL PollardTheDragon warriorstar-orion Alfalfa Scout
parent 9e7a98cefb
commit 6a1fc4f5c2
147 changed files with 1179 additions and 122 deletions
+17
View File
@@ -411,6 +411,23 @@
new_name += " [pick("Alkaid","Andromeda","Antlia","Apus","Auriga","Caelum","Camelopardalis","Canes Venatici","Carinae","Cassiopeia","Centauri","Circinus","Cygnus","Dorado","Draco","Eridanus","Errakis","Fornax","Gliese","Grus","Horologium","Hydri","Lacerta","Leo Minor","Lupus","Lynx","Maffei","Megrez","Messier","Microscopium","Monocerotis","Muscae","Ophiuchi","Orion","Pegasi","Persei","Perseus","Polaris","Pyxis","Sculptor","Syrma","Telescopium","Tianyi","Triangulum","Trifid","Tucana","Tycho","Vir","Volans","Zavyava")]"
return new_name
/datum/language/skulk
name = "Skkula-Runespeak"
desc = "A language comprised mostly of chittering, laced with psionic resonations used to convey urgency and emotion. Utterly esoteric to the unenlightened."
speech_verb = "resonates"
ask_verb = "pulses"
exclaim_verbs = list("thunders")
whisper_verb = "warps"
colour = "skulk"
key = "8"
flags = RESTRICTED | WHITELISTED
syllables = list("┤ᖋ|:ᖋᔮᒣ╎ᔮ", "ᖋリᒣ|:॥.", "ᒣ⍑ᒷ ▭", "⍊ᒷ∷", "ᒷ⎓", "╎リ┤ ▭ ⍑╎ᒲ")
/datum/language/skulk/get_random_name()
var/new_name = "[pick("Akki", "Akku", "Avvi", "Bakku", "Bakki", "Bakk", "Kkath", "Makkith", "Vullo", "Mortis", "Vaal", "Kkari", "Thrakk", "Skkiv", "Llav", "Vykke", "Hakki", "Askki", "Tavv", "Maskii", "Tokko", "Kkavik", "Morkk", "Savv")]"
new_name += "-[pick("Akku", "Avvi", "Bakku", "Bakki", "Bakk", "Kkath", "Makkith", "Vullo", "Mortis", "Vaal", "Kkari", "Thrakk", "Skkiv", "Llav", "Vykke", "Hakki", "Askki", "Tavv", "Maskii", "Tokko", "Kkavik", "Morkk", "Savv")]"
return new_name
/datum/language/common
name = "Galactic Common"
desc = "Originally a carefully crafted fusion of various Human and Skrell dialects, Galactic Common is the most commonly spoken language in the Sector, and incorporates influences from nearly every known sapient species."
@@ -121,6 +121,7 @@
m_styles["tail"] = "None"
update_tail_layer()
update_wing_layer()
update_spines_layer()
return TRUE
/mob/living/carbon/human/proc/change_alt_head(alternate_head)
@@ -274,3 +274,31 @@ GLOBAL_LIST_EMPTY(body_accessory_by_species)
/datum/body_accessory/wing/bluespace
name = "Bluespace Wings"
icon_state = "bluespace"
// Skulk spines
/datum/body_accessory/spines
icon = 'icons/mob/sprite_accessories/skulk/skulk_spines.dmi'
animated_icon = null
name = "Report this bug on github"
icon_state = "hunter1"
allowed_species = list("Skkulakin")
has_behind = TRUE
/datum/body_accessory/spines/hunter
name = "Hunter"
/datum/body_accessory/spines/cosmic
name = "Cosmic"
icon_state = "cosmic1"
/datum/body_accessory/spines/illusive
name = "Illusive"
icon_state = "illusive1"
/datum/body_accessory/spines/venom
name = "Venom"
icon_state = "venom1"
/datum/body_accessory/spines/hunger1
name = "Hunger"
icon_state = "hunger1"
@@ -94,6 +94,8 @@
var/tail
/// Same as tail but wing
var/wing
/// Same as wing but with back spines
var/spines
var/tail_wagging = FALSE
@@ -667,6 +667,16 @@
sound = 'sound/effects/mob_effects/flutter.ogg'
species_type_whitelist_typecache = list(/datum/species/moth)
/datum/emote/living/carbon/human/chitter
key = "chitter"
key_third_person = "chitters"
message = "chitters."
message_param = "chitters at %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/effects/chitter.ogg"
species_type_whitelist_typecache = list(/datum/species/skulk)
muzzled_noises = list("frustrated")
/datum/emote/living/carbon/human/quill
key = "quill"
key_third_person = "quills"
@@ -242,6 +242,9 @@
if(!body_accessory)
change_body_accessory("Plain Wings")
/mob/living/carbon/human/skulk/Initialize(mapload)
. = ..(mapload, /datum/species/skulk)
/mob/living/carbon/human/get_status_tab_items()
var/list/status_tab_data = ..()
. = status_tab_data
@@ -863,8 +866,9 @@
var/obj/item/clothing/head/HFP = head //if yes gets the flash protection value from that item
number += HFP.flash_protect
if(istype(glasses, /obj/item/clothing/glasses)) //glasses
var/obj/item/clothing/glasses/GFP = glasses
number += GFP.flash_protect
if(!is_species(src, /datum/species/skulk)) // makes sure skkulakin properly suffer
var/obj/item/clothing/glasses/GFP = glasses
number += GFP.flash_protect
if(istype(wear_mask, /obj/item/clothing/mask)) //mask
var/obj/item/clothing/mask/MFP = wear_mask
number += MFP.flash_protect
@@ -1216,6 +1220,8 @@
wing = dna.species.wing
spines = dna.species.spines
maxHealth = dna.species.total_health
if(dna.species.language)
@@ -104,10 +104,9 @@ Please contact me on #coderbus IRC. ~Carn x
*/
/mob/living/carbon/human/proc/apply_overlay(cache_index)
. = overlays_standing[cache_index]
SEND_SIGNAL(src, COMSIG_CARBON_APPLY_OVERLAY, cache_index, .)
if(.)
add_overlay(.)
SEND_SIGNAL(src, COMSIG_CARBON_APPLY_OVERLAY, cache_index)
if(overlays_standing[cache_index])
add_overlay(overlays_standing[cache_index])
/mob/living/carbon/human/proc/remove_overlay(cache_index)
var/I = overlays_standing[cache_index]
@@ -275,6 +274,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
//tail
update_tail_layer()
update_wing_layer()
update_spines_layer()
update_int_organs()
//head accessory
update_head_accessory()
@@ -421,7 +421,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
return
var/species_name = ""
if(dna.species.name in list("Drask", "Grey", "Vox", "Kidan"))
if(dna.species.name in list("Drask", "Grey", "Vox", "Kidan", "Skkulakin"))
species_name = "_[lowertext(dna.species.sprite_sheet_name)]"
var/icon/hands_mask = icon('icons/mob/body_accessory.dmi', "accessory_none_s") //Needs a blank icon, not actually related to markings at all
@@ -562,6 +562,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
force_update_limbs()
update_tail_layer()
update_wing_layer()
update_spines_layer()
update_halo_layer()
update_eyes_overlay_layer()
overlays.Cut() // Force all overlays to regenerate
@@ -887,6 +888,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
apply_overlay(SUIT_LAYER)
update_tail_layer()
update_wing_layer()
update_spines_layer()
update_collar()
/mob/living/carbon/human/update_inv_pockets()
@@ -1146,12 +1148,11 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
if(!istype(body_accessory, /datum/body_accessory/wing))
if(dna.species.optional_body_accessory)
return
else
body_accessory = GLOB.body_accessory_by_name[dna.species.default_bodyacc]
if(istype(body_accessory, /datum/body_accessory/spines))
return // fuck right off thanks
body_accessory = GLOB.body_accessory_by_name[dna.species.default_bodyacc]
if(!body_accessory.try_restrictions(src))
return
var/icon/wings_icon = new /icon(body_accessory.icon, body_accessory.icon_state)
if(HAS_TRAIT(src, TRAIT_I_WANT_BRAINS))
wings_icon.ColorTone(COLORTONE_DEAD_EXT_ORGAN)
@@ -1174,6 +1175,41 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
apply_overlay(WING_UNDERLIMBS_LAYER)
apply_overlay(WING_LAYER)
/mob/living/carbon/human/proc/update_spines_layer()
remove_overlay(SPINES_UNDERLIMBS_LAYER)
remove_overlay(SPINES_LAYER)
if(!istype(body_accessory, /datum/body_accessory/spines))
if(dna.species.optional_body_accessory)
return
if(istype(body_accessory, /datum/body_accessory/wing))
return // See above
body_accessory = GLOB.body_accessory_by_name[dna.species.default_bodyacc]
if(!body_accessory.try_restrictions(src))
return
var/icon/spines_icon = new /icon(body_accessory.icon, spines)
if(HAS_TRAIT(src, TRAIT_I_WANT_BRAINS))
spines_icon.ColorTone(COLORTONE_DEAD_EXT_ORGAN)
spines_icon.SetIntensity(0.7)
var/mutable_appearance/spines_ma = mutable_appearance(spines_icon, layer = -SPINES_LAYER)
spines_ma.pixel_x = body_accessory.pixel_x_offset
spines_ma.pixel_y = body_accessory.pixel_y_offset
overlays_standing[SPINES_LAYER] = spines_ma
if(body_accessory.has_behind)
var/icon/under_spines_icon = new /icon(body_accessory.icon, "[spines]_BEHIND")
if(HAS_TRAIT(src, TRAIT_I_WANT_BRAINS))
under_spines_icon.ColorTone(COLORTONE_DEAD_EXT_ORGAN)
under_spines_icon.SetIntensity(0.7)
var/mutable_appearance/under_spines = mutable_appearance(under_spines_icon, layer = -SPINES_UNDERLIMBS_LAYER)
under_spines.pixel_x = body_accessory.pixel_x_offset
under_spines.pixel_y = body_accessory.pixel_y_offset
overlays_standing[SPINES_UNDERLIMBS_LAYER] = under_spines
apply_overlay(SPINES_UNDERLIMBS_LAYER)
apply_overlay(SPINES_LAYER)
// Warning to all that come here: This proc is also used to properly render nian wings and skulk spines. Also it sucks. Have fun!
/mob/living/carbon/human/proc/update_tail_layer()
// If the tail is currently wagging, don't stop wagging.
if(tail_wagging)
@@ -1198,7 +1234,11 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
if(body_accessory)
if(body_accessory.try_restrictions(src))
var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state)
var/icon/accessory_s
if(istype(body_accessory, /datum/body_accessory/spines))
accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = spines)
else
accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state)
if(HAS_TRAIT(src, TRAIT_I_WANT_BRAINS))
accessory_s.ColorTone(COLORTONE_DEAD_EXT_ORGAN)
accessory_s.SetIntensity(0.7)
@@ -1382,8 +1422,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/handle_transform_change()
..()
update_tail_layer()
update_wing_layer()
update_body()
//Adds a collar overlay above the helmet layer if the suit has one
// Suit needs an identically named sprite in icons/mob/clothing/collar.dmi
@@ -29,6 +29,8 @@
var/tail
/// like tail but wings
var/wing
/// like wings but spines
var/spines
var/datum/unarmed_attack/unarmed //For empty hand harm-intent attack
var/unarmed_type = /datum/unarmed_attack
@@ -0,0 +1,147 @@
/datum/species/skulk
name = "Skkulakin"
name_plural = "Skkulakin"
max_age = 70
icobase = 'icons/mob/human_races/skulk/r_skulkbrown.dmi'
language = "Skkula-Runespeak"
unarmed_type = /datum/unarmed_attack/claws
blurb = "The Skkulakin are a species of psionically-attuned furred arthropods hailing from the Western Orion Spur. \
Originating from the planet Votum-Accorium, an arctic world ruled by the brutal theocratic government known as the Silver Collective.<br/><br/> \
Despite owning a large amount of territory in the western arm of the sector, the plasma supply their empire relies on is being stretched thin. \
This has forced the once-proud species to desperately branch out and seek a solution to their critical shortage."
cold_level_1 = 240
cold_level_2 = 180
cold_level_3 = 100
heat_level_1 = 340
heat_level_2 = 380
heat_level_3 = 440
brain_mod = 0.8
species_traits = list()
inherent_traits = list(TRAIT_BRITTLE_BONES)
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_BUG
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_BODY_MARKINGS | HAS_BACK_SPINES | HAS_ICON_SKIN_TONE | SHAVED | HAS_BODY_ACCESSORY
dietflags = DIET_OMNI
flesh_color = "#e3e2dd"
default_hair = "Scribe"
default_bodyacc = "Illusive"
spines = "Illusive1"
eyes = "skulk_eyes_s"
butt_sprite = "nian"
optional_body_accessory = FALSE
reagent_tag = PROCESS_ORG
icon_skin_tones = alist(
1 = "Blackgate",
2 = "Talwyrm",
3 = "Valcore",
4 = "Ossya",
5 = "Highfield",
6 = "Votum-Accorium"
)
has_organ = list(
"heart" = /obj/item/organ/internal/heart/skulk,
"lungs" = /obj/item/organ/internal/lungs/skulk,
"liver" = /obj/item/organ/internal/liver/skulk,
"kidneys" = /obj/item/organ/internal/kidneys/skulk,
"brain" = /obj/item/organ/internal/brain/skulk,
"eyes" = /obj/item/organ/internal/eyes/skulk
)
suicide_messages = list(
"is attempting to blow up their mind with their mind!",
"is jamming their claws into their eye sockets!",
"is tearing open their arm with their fangs!",
"is twisting their own neck!",
"is holding their breath!")
/datum/species/skulk/on_species_gain(mob/living/carbon/human/H)
..()
updatespeciescolor(H)
H.update_icons()
var/datum/action/innate/spin_silk/spin_silk = new()
spin_silk.Grant(H)
/datum/species/skulk/on_species_loss(mob/living/carbon/human/H)
..()
for(var/datum/action/innate/spin_silk/spin_silk in H.actions)
spin_silk.Remove(H)
/datum/species/skulk/updatespeciescolor(mob/living/carbon/human/H, owner_sensitive = 1) // Handling species-specific skin-tones for the Skulk race.
if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE)
var/new_icobase = 'icons/mob/human_races/skulk/r_skulkblack.dmi' // Default Blackgate Skkulakin.
var/current_spine_type = null
if(H.body_accessory)
current_spine_type = lowertext("[H.body_accessory.name]")
var/chosen_spine_color = 1
switch(H.s_tone)
if(1) // Blackgate Skkulakin.
new_icobase = 'icons/mob/human_races/skulk/r_skulkblack.dmi'
chosen_spine_color = 1
if(2) // Talwyrm Skkulakin.
new_icobase = 'icons/mob/human_races/skulk/r_skulkbrown.dmi'
chosen_spine_color = 2
if(3) // Valcore Skkulakin.
new_icobase = 'icons/mob/human_races/skulk/r_skulkred.dmi'
chosen_spine_color = 3
if(4) // Ossya Skkulakin.
new_icobase = 'icons/mob/human_races/skulk/r_skulkblue.dmi'
chosen_spine_color = 4
if(5) // Highfield Skkulakin.
new_icobase = 'icons/mob/human_races/skulk/r_skulkgreen.dmi'
chosen_spine_color = 5
if(6) // Votum-Accorium Skkulakin.
new_icobase = 'icons/mob/human_races/skulk/r_skulkwhite.dmi'
chosen_spine_color = 6
if(H.body_accessory && current_spine_type)
H.spines = "[current_spine_type][chosen_spine_color]"
H.change_icobase(new_icobase, owner_sensitive)
/datum/action/innate/spin_silk
name = "Spin Silk"
desc = "Use your spinnerets to create a spool of silk that can be used for crafting."
check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_STUNNED | AB_CHECK_RESTRAINED | AB_CHECK_CONSCIOUS
button_icon = 'icons/obj/stacks/organic.dmi'
button_icon_state = "sheet-silk"
var/cooldown = 0
var/cooldown_duration = 10 SECONDS
#define SILK_NUTRITION_AMOUNT 90
/datum/action/innate/spin_silk/Activate()
var/mob/living/carbon/human/user = owner
if(world.time <= cooldown)
to_chat(user, SPAN_WARNING("You are still recovering from spinning silk. Wait [round((cooldown - world.time) / 10)] seconds and try again."))
return
var/mob/living/carbon/human/skulk/H = owner
if(H.nutrition < SILK_NUTRITION_AMOUNT)
to_chat(user, SPAN_WARNING("You are too hungry to spin silk right now."))
return
var/obj/item/stack/sheet/silk/silk
if(user.get_active_hand() && user.get_inactive_hand())
to_chat(user, SPAN_WARNING("You don't have any free hands!"))
return
H.visible_message(SPAN_WARNING("[H] begins spinning a small amount of silk..."), SPAN_WARNING("You begin spinning a small amount of silk... (This will take [5] seconds, and you must hold still.)"))
if(!do_after_once(H, 5 SECONDS, TRUE, H, attempt_cancel_message = "You stop spinning silk."))
if(H.incapacitated())
to_chat(user, SPAN_WARNING("You cannot spin silk in your current state!"))
return
silk = new(get_turf(H), 1)
user.put_in_hands(silk)
cooldown = world.time + cooldown_duration
H.adjust_nutrition(-SILK_NUTRITION_AMOUNT)
to_chat(user, SPAN_WARNING("You spin a small amount of silk."))
#undef SILK_NUTRITION_AMOUNT
@@ -253,6 +253,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
add_language("Bubblish", 1)
add_language("Clownish", 1)
add_language("Tkachi", 1)
add_language("Skkula-Runespeak", 1)
if(!safety)//Only used by AIize() to successfully spawn an AI.
if(!B)//If there is no player/brain inside.
@@ -78,6 +78,7 @@
user.add_language("Clownish")
user.add_language("Cygni Standard")
user.add_language("Tkachi")
user.add_language("Skkula-Runespeak")
else
user.remove_language("Sinta'unathi")
user.remove_language("Siik'tajr")
@@ -91,6 +92,7 @@
user.remove_language("Clownish")
user.remove_language("Cygni Standard")
user.remove_language("Tkachi")
user.remove_language("Skkula-Runespeak")
/datum/pai_software/translator/is_active(mob/living/silicon/pai/user)
return user.translator_on
@@ -293,6 +293,7 @@
R.add_language("Orluum", FALSE)
R.add_language("Clownish", FALSE)
R.add_language("Tkachi", FALSE)
R.add_language("Skkula-Runespeak", FALSE)
///Adds armor to a cyborg. Normaly resets it to 0 across the board, unless the module has an armor defined.
/obj/item/robot_module/proc/add_armor(mob/living/silicon/robot/R)
@@ -670,6 +671,7 @@
R.add_language("Clownish",1)
R.add_language("Cygni Standard", 1)
R.add_language("Tkachi", 1)
R.add_language("Skkula-Runespeak", 1)
// Mining
/obj/item/robot_module/miner
@@ -0,0 +1,23 @@
/datum/sprite_accessory/body_markings/tattoo/skulk
icon = 'icons/mob/sprite_accessories/skulk/skulk_body_markings.dmi'
species_allowed = list("Skkulakin")
/datum/sprite_accessory/body_markings/tattoo/skulk/danger_skulk
name = "Danger"
icon_state = "danger"
/datum/sprite_accessory/body_markings/tattoo/skulk/royal_skulk
name = "Royal"
icon_state = "royal"
/datum/sprite_accessory/body_markings/tattoo/skulk/grunt_skulk
name = "Grunt"
icon_state = "grunt"
/datum/sprite_accessory/body_markings/tattoo/skulk/mantis_skulk
name = "Mantis"
icon_state = "mantis"
/datum/sprite_accessory/body_markings/tattoo/skulk/striped_skulk
name = "Striped"
icon_state = "striped"
@@ -0,0 +1,76 @@
/datum/sprite_accessory/hair/skulk
icon = 'icons/mob/sprite_accessories/skulk/skulk_hair.dmi'
species_allowed = list("Skkulakin")
glasses_over = 1
/datum/sprite_accessory/hair/skulk/artificer
name = "Artificer"
icon_state = "artificer"
/datum/sprite_accessory/hair/skulk/priest
name = "Priest"
icon_state = "priest"
/datum/sprite_accessory/hair/skulk/cleric
name = "Cleric"
icon_state = "cleric"
/datum/sprite_accessory/hair/skulk/brewmaster
name = "Brewmaster"
icon_state = "brewmaster"
/datum/sprite_accessory/hair/skulk/alchemist
name = "Alchemist"
icon_state = "alchemist"
/datum/sprite_accessory/hair/skulk/agrolyte
name = "Agrolyte"
icon_state = "agrolyte"
/datum/sprite_accessory/hair/skulk/monk
name = "Monk"
icon_state = "monk"
/datum/sprite_accessory/hair/skulk/archivist
name = "Archivist"
icon_state = "archivist"
/datum/sprite_accessory/hair/skulk/scribe
name = "Scribe"
icon_state = "scribe"
/datum/sprite_accessory/hair/skulk/seer
name = "Seer"
icon_state = "seer"
/datum/sprite_accessory/hair/skulk/warrior
name = "Warrior"
icon_state = "warrior"
/datum/sprite_accessory/hair/skulk/lowinquis
name = "Low-Inquisitor"
icon_state = "lowinquis"
/datum/sprite_accessory/hair/skulk/highinquis
name = "High-Inquisitor"
icon_state = "highinquis"
/datum/sprite_accessory/hair/skulk/supremeinquis
name = "Supreme-Inquisitor"
icon_state = "supremeinquis"
/datum/sprite_accessory/hair/skulk/acolyte
name = "Acolyte"
icon_state = "acolyte"
/datum/sprite_accessory/hair/skulk/highacolyte
name = "High-Acolyte"
icon_state = "highacolyte"
/datum/sprite_accessory/hair/skulk/lordforeman
name = "Lord-Foreman"
icon_state = "lordforeman"
/datum/sprite_accessory/hair/skulk/silverinquis
name = "Silver-Inquisitor"
icon_state = "silverinquis"
@@ -76,7 +76,7 @@
icon = 'icons/mob/human_face.dmi' // Keep bald hair here, as for some reason, putting it elsewhere lead to it being colourable - Also it make sense as it is shared by everyone.
name = "Bald"
icon_state = "bald"
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran", "Nian")
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran", "Nian", "Skulk")
glasses_over = 1
/datum/sprite_accessory/facial_hair
@@ -96,7 +96,7 @@
/datum/sprite_accessory/head_accessory/none
name = "None"
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Kidan", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Kidan", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox", "Skulk")
/* BODY MARKINGS */
@@ -171,17 +171,18 @@
///////////////////////////
/datum/sprite_accessory/underwear
icon = 'icons/mob/clothing/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian", "Skkulakin")
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/underwear.dmi',
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi'
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi',
"Skkulakin" = 'icons/mob/clothing/species/skkulakin/underwear.dmi'
)
/datum/sprite_accessory/underwear/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian", "Skkulakin")
/datum/sprite_accessory/underwear/male
body_type = MALE
@@ -301,17 +302,18 @@
////////////////////////////
/datum/sprite_accessory/undershirt
icon = 'icons/mob/clothing/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian", "Skkulakin")
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/underwear.dmi',
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi'
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi',
"Skkulakin" = 'icons/mob/clothing/species/skkulakin/underwear.dmi'
)
/datum/sprite_accessory/undershirt/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian", "Skkulakin")
//plain color shirts
/datum/sprite_accessory/undershirt/shirt_white
@@ -583,18 +585,18 @@
///////////////////////
/datum/sprite_accessory/socks
icon = 'icons/mob/clothing/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian", "Skkulakin")
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/underwear.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi',
"Nian" = 'icons/mob/clothing/species/nian/underwear.dmi'
"Nian" = 'icons/mob/clothing/species/nian/underwear.dmi',
"Skkulakin" = 'icons/mob/clothing/species/skkulakin/underwear.dmi'
)
/datum/sprite_accessory/socks/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian", "Skkulakin")
/datum/sprite_accessory/socks/white_norm
name = "Normal White"