Files
CharlesWedgeandGitHub b0449e99ae The Lythios Colonist Ghost Role: Invasion of the Cat People (#7043)
Tajara Peasants are coming.

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## A New Ghost Role and Lythios Features!
It seems like the crew is finally getting some neighbors on good old
Lythios. Tajara, of course, you have to source your colonists locally
after all. Nanotrasen is even going to let them onto station grounds to
work and trade with the crew. The new ghost role Na'sahira Colonist is
an Atlas-specific ghost role in the same vein as ashlanders. Like
Ashlanders, Colonists have unique crafting recipes, which use the new
gatherables I have added. Hopefully, this will give them more products
to trade with the crew.

In addition, I have made some other balance chances and additions: 

- Two new plants that can be harvested from now spawn randomly in the
Lythios snow
- Spiders now drop poison gland items which can be extracted for their
reagents.
- Butchering now produces between 0 and the set amount of the butchering
loot rather then 0 **or** the butchering loot greatly increasing the
chances of you at least getting something from butchering.
- The powder horn now holds double the gunpowder.
- Colonist recipes are in a new "Special Recipes" Tab which I believe is
a good place to add recipes from species backgrounds or ghost role in
future development.

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
The Ashlanders never saw their full potential since the crew was always
limited in how they could interact with them. Travellers and traders by
contrast are extremely freeform but are still separated from the
station. Colonists will spawn directly on the Lythios map and can
interact directly with the entire crew without delay. The colonist
recipes give incentives to interact with the new Lythios map features
and the Lythios map in general. The butchering change removes the
frustration inherent with butchering an creating and getting no rewards.
The powder horn was buffed to make it more in line with similar-sized
reagent containers and to make sure black powder weapons are better
suited for longer periods of combat. The spider poison gland PR was made
when I figured spiders


<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: The Lythios Colonist ghost role.
add: two new snow plants that can be harvested, new crafting recipes, 
tweak: butchered creates drop 0-amount loot rather then 0 or amounts
loot
balance: powderhorn capacity doubled
fix: Welderspear recipes now in the correct recipe category.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2025-03-24 22:28:18 -07:00

225 lines
7.0 KiB
Plaintext

/obj/item/stack/animalhide
name = "animal hide"
desc = "Intact skin stripped off from a creature's body. You should probably clean off the hair with a blade."
singular_name = "hide piece"
icon_state = "sheet-hide"
no_variants = FALSE
drop_sound = 'sound/items/drop/cloth.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
/obj/fiftyspawner/animalhide
name = "animal hide"
type_to_spawn = /obj/item/stack/animalhide
/obj/item/stack/animalhide/grey
icon_state = "sheet-greyhide"
/obj/item/stack/animalhide/human
name = "human skin"
desc = "The by-product of human farming."
singular_name = "human skin piece"
icon_state = "sheet-hide"
/obj/fiftyspawner/animalhide/human
name = "human hide"
type_to_spawn = /obj/item/stack/animalhide/human
/obj/item/stack/animalhide/corgi
name = "corgi hide"
desc = "The by-product of corgi farming."
singular_name = "corgi hide piece"
icon_state = "sheet-corgi"
/obj/fiftyspawner/animalhide/corgi
name = "corgi hide"
type_to_spawn = /obj/item/stack/animalhide/corgi
/obj/item/stack/animalhide/cat
name = "cat hide"
desc = "The by-product of cat farming."
singular_name = "cat hide piece"
icon_state = "sheet-cat"
/obj/fiftyspawner/animalhide/cat
name = "feline hide"
type_to_spawn = /obj/item/stack/animalhide/cat
/obj/item/stack/animalhide/monkey
name = "monkey hide"
desc = "The by-product of monkey farming."
singular_name = "monkey hide piece"
icon_state = "sheet-monkey"
/obj/fiftyspawner/animalhide/monkey
name = "monkey hide"
type_to_spawn = /obj/item/stack/animalhide/monkey
/obj/item/stack/animalhide/lizard
name = "lizard skin"
desc = "Sssssss..."
singular_name = "lizard skin piece"
icon_state = "sheet-lizard"
/obj/fiftyspawner/animalhide/lizard
name = "lizard hide"
type_to_spawn = /obj/item/stack/animalhide/lizard
/obj/item/stack/animalhide/xeno
name = "alien hide"
desc = "The skin of a terrible creature."
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
/obj/fiftyspawner/animalhide/xeno
name = "xenomorph hide"
type_to_spawn = /obj/item/stack/animalhide/xeno
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/xenochitin
name = "alien chitin"
desc = "A piece of the hide of a terrible creature."
singular_name = "alien hide piece"
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
/obj/fiftyspawner/xenochitin
name = "stack of xenochitin"
type_to_spawn = /obj/item/stack/xenochitin
/obj/item/xenos_claw
name = "alien claw"
desc = "The claw of a terrible creature."
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
/obj/item/weed_extract
name = "weed extract"
desc = "A piece of slimy, purplish weed."
icon = 'icons/mob/alien.dmi'
icon_state = "weed_extract"
/obj/item/stack/hairlesshide
name = "hairless hide"
desc = "This smooth hide needs tanning before it can become leather. You should start with soaking it in water."
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
no_variants = FALSE
/obj/fiftyspawner/hairlesshide
name = "hairless hide"
type_to_spawn = /obj/item/stack/hairlesshide
/*
* Sinew
*/
/obj/item/stack/sinew
name = "sinew"
desc = "Long stringy filaments which presumably came from an organic creature."
singular_name = "sinew"
icon_state = "sheet-sinew"
/obj/fiftyspawner/sinew
name = "stack of sinew"
type_to_spawn = /obj/item/stack/sinew
/obj/item/stack/sinew/watcher
name = "watcher sinew"
desc = "Long stringy filaments which presumably came from a watcher's wings."
singular_name = "watcher sinew"
/obj/item/stack/sinew/wolf
name = "wolf sinew"
desc = "Long stringy filaments which came from the insides of a wolf."
singular_name = "wolf sinew"
/*
* Plates
*/
/obj/item/stack/animalhide/goliath_hide
name = "goliath hide plates"
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
icon_state = "sheet-goliath_hide"
singular_name = "hide plate"
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
/obj/fiftyspawner/animalhide/goliath_hide
name = "goliath hide plates"
type_to_spawn = /obj/item/stack/animalhide/goliath_hide
/obj/item/stack/animalhide/goliath_hide/polar_bear_hide
name = "polar bear hides"
desc = "Pieces of a polar bear's fur, these might be able to make your suit a bit more durable to attack from the local fauna."
icon_state = "sheet-polar_bear_hide"
singular_name = "polar bear hide"
/obj/fiftyspawner/animalhide/goliath_hide/polar_bear_hide
name = "polar bear hide plates"
type_to_spawn = /obj/item/stack/animalhide/goliath_hide/polar_bear_hide
/obj/item/stack/animalhide/ashdrake
name = "ash drake hide"
desc = "The strong, scaled hide of an ash drake."
icon_state = "sheet-dragon_hide"
singular_name = "drake plate"
max_amount = 10
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
/obj/item/stack/wetleather
name = "wet leather"
desc = "This leather has been cleaned but still needs to be dried. You can probably dry it on a wooden rack."
singular_name = "wet leather piece"
icon_state = "sheet-wetleather"
var/wetness = 30 //Reduced when exposed to high temperautres
var/drying_threshold_temperature = 500 //Kelvin to start drying
no_variants = FALSE
/obj/fiftyspawner/wetleather
name = "stack of wet leather"
type_to_spawn = /obj/item/stack/wetleather
//Step one - dehairing.
/obj/item/stack/animalhide/attackby(obj/item/W as obj, mob/user as mob)
if( istype(W, /obj/item/material/knife) || \
istype(W, /obj/item/material/twohanded/fireaxe) || \
istype(W, /obj/item/material/knife/machete/hatchet) )
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
usr.visible_message("<span class='notice'>\The [usr] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
if(do_after(user,50))
to_chat(usr, "<span class='notice'>You cut the hair from this [src.singular_name]</span>")
//Try locating an exisitng stack on the tile and add to there if possible
for(var/obj/item/stack/hairlesshide/HS in usr.loc)
if(HS.amount < 50)
HS.amount++
src.use(1)
break
//If it gets to here it means it did not find a suitable stack on the tile.
var/obj/item/stack/hairlesshide/HS = new(usr.loc)
HS.amount = 1
src.use(1)
else
..()
//Step two - This was originally busted washing machine code. Now it's a sink attack.
//Step three - drying
/obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature >= drying_threshold_temperature)
wetness--
if(wetness == 0)
//Try locating an exisitng stack on the tile and add to there if possible
for(var/obj/item/stack/material/leather/HS in src.loc)
if(HS.amount < 50)
HS.amount++
src.use(1)
wetness = initial(wetness)
break
//If it gets to here it means it did not find a suitable stack on the tile.
var/obj/item/stack/material/leather/HS = new(src.loc)
HS.amount = 1
wetness = initial(wetness)
src.use(1)