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
+4 -1
View File
@@ -265,7 +265,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
preview_icon.Blend(temp, ICON_OVERLAY)
//Tail
if(H.body_accessory && (istype(H.body_accessory, /datum/body_accessory/tail) || istype(H.body_accessory, /datum/body_accessory/wing)))
if(H.body_accessory && (istype(H.body_accessory, /datum/body_accessory/tail) || istype(H.body_accessory, /datum/body_accessory/wing) || istype(H.body_accessory, /datum/body_accessory/spines)))
temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state)
preview_icon.Blend(temp, ICON_OVERLAY)
else if(H.tail && H.dna.species.bodyflags & HAS_TAIL)
@@ -274,6 +274,9 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
else if(H.wing && H.dna.species.bodyflags & HAS_WING)
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.wing]_s")
preview_icon.Blend(temp, ICON_OVERLAY)
else if(H.spines && H.dna.species.bodyflags & HAS_BACK_SPINES)
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.spines]_s")
preview_icon.Blend(temp, ICON_OVERLAY)
for(var/obj/item/organ/external/E in H.bodyparts)
preview_icon.Blend(E.get_icon(), ICON_OVERLAY)
+1 -1
View File
@@ -61,7 +61,7 @@
desc = "If left untreated the subject will mutate to a different species."
severity = VIRUS_BIOHAZARD
var/list/virspecies = list(/datum/species/human, /datum/species/tajaran, /datum/species/unathi,/datum/species/skrell, /datum/species/vulpkanin, /datum/species/diona,
/datum/species/slime, /datum/species/kidan, /datum/species/drask, /datum/species/grey, /datum/species/moth) // No IPCs (not organic), or vox+plasmemes because of air requirements
/datum/species/slime, /datum/species/kidan, /datum/species/drask, /datum/species/grey, /datum/species/moth, /datum/species/skulk) // No IPCs (not organic), or vox+plasmemes because of air requirements
var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay")
var/datum/species/chosentype
var/chosensuff
+149 -1
View File
@@ -44,7 +44,7 @@
/datum/element/clothing_adjustment/monitor_headgear/on_item_dropped(datum/source, mob/target)
UnregisterSignal(target, COMSIG_CARBON_APPLY_OVERLAY)
/datum/element/clothing_adjustment/monitor_headgear/proc/on_carbon_apply_overlay(mob/living/carbon/source, cache_index, mutable_appearance/overlay)
/datum/element/clothing_adjustment/monitor_headgear/proc/on_carbon_apply_overlay(mob/living/carbon/human/source, cache_index)
SIGNAL_HANDLER // COMSIG_CARBON_APPLY_OVERLAY
if(cache_index != HEAD_LAYER || !istype(source))
return
@@ -58,5 +58,153 @@
if(!robohead?.is_monitor)
return
var/mutable_appearance/overlay = source.overlays_standing[cache_index]
overlay.pixel_x = pixel_x
overlay.pixel_y = pixel_y
// Clothing Adjustments Handling Skkulakin
/datum/element/clothing_adjustment/skulk_headgear
var/alist/directions
/datum/element/clothing_adjustment/skulk_headgear/Attach(datum/target, alist/_directions)
if(!istype(_directions))
return ELEMENT_INCOMPATIBLE
. = ..()
directions = _directions
/datum/element/clothing_adjustment/skulk_headgear/on_item_equipped(datum/source, mob/target)
RegisterSignal(target, COMSIG_CARBON_APPLY_OVERLAY, PROC_REF(on_carbon_apply_overlay), override = TRUE)
/datum/element/clothing_adjustment/skulk_headgear/on_item_dropped(datum/source, mob/target)
UnregisterSignal(target, list(COMSIG_CARBON_APPLY_OVERLAY))
var/mob/living/carbon/human/human = target
if(!istype(human))
return
human.update_inv_head()
/datum/element/clothing_adjustment/skulk_headgear/proc/on_carbon_apply_overlay(mob/living/carbon/human/source, cache_index)
SIGNAL_HANDLER // COMSIG_CARBON_APPLY_OVERLAY
if(cache_index != HEAD_LAYER || !istype(source))
return
var/datum/species = source.dna?.species
if(!istype(species))
return
if(!istype(species, /datum/species/skulk))
return
var/icon/I = new()
var/image/overlay = source.overlays_standing[cache_index]
for(var/dir in GLOB.cardinal)
var/icon/dir_image = icon(overlay.icon, overlay.icon_state)
dir_image.Shift(NORTH, directions[dir][1])
dir_image.Shift(WEST, directions[dir][2])
I.Insert(dir_image, dir = dir)
source.overlays_standing[cache_index] = I
/obj/item/clothing/head/Initialize(mapload)
. = ..()
var/skulk_adjustment = string_assoc_list(alist(SOUTH = list(-1, 0), NORTH = list(-1, 0), EAST = list(0, -2), WEST = list(0, 2)))
AddElement(/datum/element/clothing_adjustment/skulk_headgear, skulk_adjustment)
/datum/element/clothing_adjustment/skulk_mask
var/alist/directions
/datum/element/clothing_adjustment/skulk_mask/Attach(datum/target, alist/_directions)
if(!istype(_directions))
return ELEMENT_INCOMPATIBLE
. = ..()
directions = _directions
/datum/element/clothing_adjustment/skulk_mask/on_item_equipped(datum/source, mob/target)
RegisterSignal(target, COMSIG_CARBON_APPLY_OVERLAY, PROC_REF(on_carbon_apply_overlay), override = TRUE)
/datum/element/clothing_adjustment/skulk_mask/on_item_dropped(datum/source, mob/target)
UnregisterSignal(target, list(COMSIG_CARBON_APPLY_OVERLAY))
var/mob/living/carbon/human/human = target
if(!istype(human))
return
human.update_inv_wear_mask()
/datum/element/clothing_adjustment/skulk_mask/proc/on_carbon_apply_overlay(mob/living/carbon/human/source, cache_index)
SIGNAL_HANDLER // COMSIG_CARBON_APPLY_OVERLAY
if(cache_index != FACEMASK_LAYER || !istype(source))
return
var/datum/species = source.dna?.species
if(!istype(species))
return
if(!istype(species, /datum/species/skulk))
return
var/icon/I = new()
var/image/overlay = source.overlays_standing[cache_index]
for(var/dir in GLOB.cardinal)
var/icon/dir_image = icon(overlay.icon, overlay.icon_state)
dir_image.Shift(NORTH, directions[dir][1])
dir_image.Shift(WEST, directions[dir][2])
I.Insert(dir_image, dir = dir)
source.overlays_standing[cache_index] = I
/obj/item/clothing/mask/Initialize(mapload)
. = ..()
var/skulk_adjustment = string_assoc_list(alist(SOUTH = list(-1, 0), NORTH = list(-1, 0), EAST = list(0, -2), WEST = list(0, 2)))
AddElement(/datum/element/clothing_adjustment/skulk_mask, skulk_adjustment)
/datum/element/clothing_adjustment/skulk_glasses
var/alist/directions
/datum/element/clothing_adjustment/skulk_glasses/Attach(datum/target, alist/_directions)
if(!istype(_directions))
return ELEMENT_INCOMPATIBLE
. = ..()
directions = _directions
/datum/element/clothing_adjustment/skulk_glasses/on_item_equipped(datum/source, mob/target)
RegisterSignal(target, COMSIG_CARBON_APPLY_OVERLAY, PROC_REF(on_carbon_apply_overlay), override = TRUE)
/datum/element/clothing_adjustment/skulk_glasses/on_item_dropped(datum/source, mob/target)
UnregisterSignal(target, list(COMSIG_CARBON_APPLY_OVERLAY))
var/mob/living/carbon/human/human = target
if(!istype(human))
return
human.update_inv_glasses()
/datum/element/clothing_adjustment/skulk_glasses/proc/on_carbon_apply_overlay(mob/living/carbon/human/source, cache_index)
SIGNAL_HANDLER // COMSIG_CARBON_APPLY_OVERLAY
if(cache_index != GLASSES_OVER_LAYER || !istype(source))
return
var/datum/species = source.dna?.species
if(!istype(species))
return
if(!istype(species, /datum/species/skulk))
return
var/icon/I = new()
var/image/overlay = source.overlays_standing[cache_index]
for(var/dir in GLOB.cardinal)
var/icon/dir_image = icon(overlay.icon, overlay.icon_state)
dir_image.Shift(NORTH, directions[dir][1])
dir_image.Shift(WEST, directions[dir][2])
I.Insert(dir_image, dir = dir)
source.overlays_standing[cache_index] = I
@@ -481,6 +481,10 @@
linked_emote = /datum/emote/living/carbon/human/flutter
name = "Flutter"
/datum/keybinding/emote/carbon/human/chitter
linked_emote = /datum/emote/living/carbon/human/chitter
name = "Chitter"
/datum/keybinding/emote/carbon/human/quill
linked_emote = /datum/emote/living/carbon/human/quill
name = "Quill"
+35
View File
@@ -1664,3 +1664,38 @@
P.owner = H.real_name
P.ownjob = "Tourist"
P.name = "PDA-[H.real_name] ([P.ownjob])"
/datum/outfit/admin/supreme
name = "Supreme-Inquisitor"
uniform = /obj/item/clothing/under/skulk/skulkcasual
suit = /obj/item/clothing/suit/supremeinquis
r_ear = /obj/item/radio/headset/alt
head = /obj/item/clothing/head/supremeinquis
gloves = /obj/item/clothing/gloves/combat
back = /obj/item/storage/backpack/satchel
shoes = /obj/item/clothing/shoes/jackboots
belt = /obj/item/melee/baton/loaded
l_pocket = /obj/item/melee/energy/sword/saber/purple
suit_store = /obj/item/gun/energy/plasma_pistol
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/reagent_containers/hypospray/autoinjector/survival = 1
)
/datum/outfit/admin/low
name = "Low-Inquisitor"
uniform = /obj/item/clothing/under/skulk/skulkcasual
suit = /obj/item/clothing/suit/hooded/lowinquis
r_ear = /obj/item/radio/headset/alt
mask = /obj/item/clothing/mask/lowinquis
gloves = /obj/item/clothing/gloves/combat
back = /obj/item/storage/backpack/satchel
shoes = /obj/item/clothing/shoes/jackboots
belt = /obj/item/melee/baton/loaded
suit_store = /obj/item/gun/energy/plasma_pistol
backpack_contents = list(
/obj/item/storage/box/handcuffs = 1,
/obj/item/storage/box/survival = 1,
/obj/item/shield/energy = 1,
/obj/item/reagent_containers/hypospray/autoinjector/survival = 1
)