[EVIL CODE] [LATE MEOWY CHRISTMAS] Replaces the poorly fitting ashwalkers on icebox with significantly cooler (I can't think of an eyecatching title for demis alright?) (#18364)

* dripped tf out ong

* oops

* catgirl lore

* slight grammar error

* YOU SHOULD APPEAR IN THE PREFS MENU NOW

* barrel activity

* hole in the ground

* oopsie daisies

* I thought I fixed this earlier

* god of war: ragnarok

didnt i do that as a commit name already

* mapping my beloved

* uhhh right the map

* oh yeah its grilling time

* dirt but icebox so I said

* balling

* some stuff idk what i did this commit

* I think the map is done

* I lied

* makes the map actually spawn

* we don't need this anymore!

* I think this time its done

* boowomp

* Those benches didn't look great unfortunately

* last stuff before pr

* I cannot spell this word

Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>

* its not explicitly icebox ig

* christmas, just a week away

* a few of the testing things

* clothing update part 1

* clothing update pt2

* slight errors

* ill get it right first try eventually

* cta

* smelling salts

* fixes gauntlets runtiming

* gives that a desc

* CI moment

* updates the map

* trim failure

* should fix the clothing stuff

* should also fix their body temp and overheat temp

* oopsies

* slight species reflavor

* single missing )

* incorrect comments

* their own language for shittalking outsiders

* oh yeah baby its baking time

* oven tweaks

* map tweaks

* the fog is coming (single line error)

* wait that is completely wrong

* it has been done madam prime minister

* that didnt make a ton of sense now

* single word change

* screenshot test?

* language icon that isn't :3

* makes policy VERY OBVIOUS

* makes their language not pickable

* issue fixes

* likely fixes them not spawning with their species language

* single empty line

* map change

* moves the oven into the cooking module

* we dont have that file anymore

* fixes some stuff

* makes the oven emissives better

* makes for sure they spawn with the stuff they should have

* fixes their mf eyessss

* ever so slightly buffs their night vison

* Update modular_skyrat/modules/primitive_catgirls/code/spawner.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* Update modular_skyrat/modules/primitive_catgirls/code/language.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* some of that stuff

* makes policy a config

* right so that's how that works

* Update modular_skyrat/modules/primitive_catgirls/code/spawner.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* fixes the screenshot test

---------

Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
This commit is contained in:
Paxilmaniac
2023-04-04 18:36:03 +01:00
committed by GitHub
co-authored by Tom GoldenAlpharex
parent 145705785f
commit 3323da2c4c
35 changed files with 2645 additions and 2744 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -132,6 +132,7 @@
#define SPECIES_GHOUL "ghoul"
#define SPECIES_TESHARI "teshari"
#define SPECIES_HEMOPHAGE "hemophage"
#define SPECIES_FELINE_PRIMITIVE "primitive_felinid"
#define SPECIES_MUTANT "mutant"
#define SPECIES_MUTANT_INFECTIOUS "infectious_mutant"
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

+3
View File
@@ -118,3 +118,6 @@ LORECASTER_DELAY 18000
## If uncommented, suicide will be disabled.
# DISABLE_SUICIDE
## The link to the policy wiki page for primitive catgirls
ICECATS_POLICY_LINK "https://wiki.skyrat13.tk/w/index.php/Ghost_Role_policy#Icewalkers"
@@ -12,6 +12,9 @@ GLOBAL_VAR_INIT(looc_allowed, TRUE)
/datum/config_entry/string/discord_link
config_entry_value = "We forgot to set the server's discord link in config.txt"
/datum/config_entry/string/icecats_policy_link
config_entry_value = "(It appears we have forgotten to set this link)" // "in config.txt" but the players don't need to see that
/// Whether or not we log game logs to the SQL database. Requires the SQL database to function, as well as our Skyrat-only table, `game_log`.
/datum/config_entry/flag/sql_game_log
protection = CONFIG_ENTRY_LOCKED
@@ -1193,3 +1193,59 @@ digi
name = "Wargame Hologram Projector"
icon_file = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json'
// Evil primitive catgirl clothing
/datum/greyscale_config/primitive_catgirl_wraps
name = "Primitive Body Wraps"
icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json'
/datum/greyscale_config/primitive_catgirl_wraps/worn
name = "Primitive Body Wraps (Worn)"
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json'
/datum/greyscale_config/primitive_catgirl_armwraps
name = "Arm Wraps"
icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json'
/datum/greyscale_config/primitive_catgirl_armwraps/worn
name = "Arm Wraps (Worn)"
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json'
/datum/greyscale_config/primitive_catgirl_coat
name = "Primitive Fur Coat"
icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json'
/datum/greyscale_config/primitive_catgirl_coat/worn
name = "Primitive Fur Coat (Worn)"
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json'
/datum/greyscale_config/primitive_catgirl_boots
name = "Primitive Winter Boots"
icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json'
/datum/greyscale_config/primitive_catgirl_boots/worn
name = "Primitive Winter Boots (Worn)"
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json'
/datum/greyscale_config/primitive_catgirl_gaiter
name = "Neck Gaiter"
icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json'
/datum/greyscale_config/primitive_catgirl_gaiter/worn
name = "Neck Gaiter (Worn)"
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json'
/datum/greyscale_config/primitive_catgirl_gauntlets
name = "Gauntlets"
icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json'
/datum/greyscale_config/primitive_catgirl_gauntlets/worn
name = "Gauntlets (Worn)"
json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json'
@@ -0,0 +1,10 @@
{
"armwraps": [
{
"type": "icon_state",
"icon_state": "armwraps_obj",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,10 @@
{
"armwraps": [
{
"type": "icon_state",
"icon_state": "armwraps",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,16 @@
{
"wraps": [
{
"type": "icon_state",
"icon_state": "wraps_under_obj",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "wraps_over_obj",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -0,0 +1,16 @@
{
"wraps": [
{
"type": "icon_state",
"icon_state": "wraps_under",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "wraps_over",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -0,0 +1,16 @@
{
"boots": [
{
"type": "icon_state",
"icon_state": "boots_under_obj",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "boots_cover_obj",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -0,0 +1,16 @@
{
"boots": [
{
"type": "icon_state",
"icon_state": "boots_under",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "boots_cover",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -0,0 +1,16 @@
{
"coat": [
{
"type": "icon_state",
"icon_state": "coat_body_obj",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "coat_fluff_obj",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -0,0 +1,16 @@
{
"coat": [
{
"type": "icon_state",
"icon_state": "coat_body",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "coat_fluff",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -0,0 +1,18 @@
{
"gaiter": [
{
"type": "icon_state",
"icon_state": "gaiter_obj",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
],
"gaiter_up": [
{
"type": "icon_state",
"icon_state": "gaiter_obj_up",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,18 @@
{
"gaiter": [
{
"type": "icon_state",
"icon_state": "gaiter",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
],
"gaiter_up": [
{
"type": "icon_state",
"icon_state": "gaiter_up",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,16 @@
{
"gauntlets": [
{
"type": "icon_state",
"icon_state": "gauntlets_obj",
"blend_mode": "overlay",
"color_ids": [ 2 ]
},
{
"type": "icon_state",
"icon_state": "armwraps_obj",
"blend_mode": "overlay",
"color_ids": [ 1 ]
}
]
}
@@ -0,0 +1,16 @@
{
"gauntlets": [
{
"type": "icon_state",
"icon_state": "armwraps",
"blend_mode": "overlay",
"color_ids": [ 1 ]
},
{
"type": "icon_state",
"icon_state": "gauntlets",
"blend_mode": "overlay",
"color_ids": [ 2 ]
}
]
}
@@ -19,11 +19,11 @@
suffix = "icemoon_underground_mining_site_skyrat.dmm"
always_place = TRUE
/datum/map_template/ruin/icemoon/underground/skyrat/ashwalker_nest
name = "Ice Walker Nest"
id = "ash-walker-ice"
description = "A forboding dark stoned castle, it has seen better days but at least the current occupants patched the walls."
/datum/map_template/ruin/icemoon/underground/skyrat/icewalker_camp
name = "Ice Walker Camp"
id = "primitive_catgirl_den"
description = "A small, at times abandoned looking camp. Make no mistake however, as the inhabitants are usually just hibernating in a hole nearby"
prefix = "_maps/RandomRuins/IceRuins/skyrat/"
suffix = "icemoon_underground_ash_walker1_skyrat.dmm"
suffix = "icemoon_underground_icewalker_den.dmm"
always_place = TRUE
allow_duplicates = FALSE
@@ -0,0 +1,138 @@
// The naming of every path in this file is going to be awful :smiling_imp:
// Outfit Datum
/datum/outfit/primitive_catgirl
name = "Icemoon Dweller"
uniform = /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps
shoes = /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots
gloves = /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps
suit = /obj/item/clothing/suit/jacket/primitive_catgirl_coat
neck = /obj/item/clothing/neck/scarf/primitive_catgirl_scarf
back = /obj/item/forging/reagent_weapon/axe/fake_copper
// Under
/obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps
name = "body wraps"
desc = "Some pretty simple wraps to cover up your lower bits."
icon_state = "wraps"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
body_parts_covered = GROIN
greyscale_config = /datum/greyscale_config/primitive_catgirl_wraps
greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_wraps/worn
greyscale_colors = "#cec8bf#364660"
flags_1 = IS_PLAYER_COLORABLE_1
has_sensor = FALSE
// Hands
/obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps
name = "arm wraps"
desc = "Simple cloth to wrap around one's arms."
icon_state = "armwraps"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
greyscale_config = /datum/greyscale_config/primitive_catgirl_armwraps
greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_armwraps/worn
greyscale_colors = "#cec8bf"
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets
name = "gauntlets"
desc = "Simple cloth arm wraps with overlying metal protection."
icon_state = "gauntlets"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
greyscale_config = /datum/greyscale_config/primitive_catgirl_gauntlets
greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gauntlets/worn
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
greyscale_colors = "#cec8bf#c55a1d"
flags_1 = IS_PLAYER_COLORABLE_1
// Suit
/obj/item/clothing/suit/jacket/primitive_catgirl_coat
name = "primitive fur coat"
desc = "A large piece of animal hide stuffed with fur, likely from the same animal."
icon_state = "coat"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
body_parts_covered = CHEST
cold_protection = CHEST
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
greyscale_config = /datum/greyscale_config/primitive_catgirl_coat
greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_coat/worn
greyscale_colors = "#594032#cec8bf"
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather
greyscale_colors = "#594032"
// Shoes
/obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots
name = "primitive hiking boots"
desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice."
icon_state = "boots"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
greyscale_config = /datum/greyscale_config/primitive_catgirl_boots
greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn
greyscale_colors = "#594032#cec8bf"
flags_1 = IS_PLAYER_COLORABLE_1
// Neck
/obj/item/clothing/neck/scarf/primitive_catgirl_scarf
greyscale_colors = "#cec8bf#cec8bf"
/obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white
greyscale_colors = "#cec8bf#cec8bf"
/obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue
greyscale_colors = "#364660"
/obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white
greyscale_colors = "#cec8bf"
/obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather
greyscale_colors = "#594032#594032"
// Masks
/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter
name = "neck gaiter"
desc = "A cloth for covering your neck, and usually part of your face too, but that part's optional."
icon_state = "gaiter"
inhand_icon_state = "balaclava"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
greyscale_config = /datum/greyscale_config/primitive_catgirl_gaiter
greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gaiter/worn
greyscale_colors = "#364660"
w_class = WEIGHT_CLASS_TINY
flags_inv = HIDEFACE|HIDESNOUT
flags_cover = MASKCOVERSMOUTH
visor_flags_inv = HIDEFACE|HIDESNOUT
visor_flags_cover = MASKCOVERSMOUTH
flags_1 = IS_PLAYER_COLORABLE_1
actions_types = list(/datum/action/item_action/adjust)
/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter/attack_self(mob/user)
adjustmask(user)
// Head
/obj/item/clothing/head/standalone_hood/primitive_catgirl_colors
greyscale_colors = "#594032#364660"
// Misc Items
/obj/item/forging/reagent_weapon/axe/fake_copper
custom_materials = list(/datum/material/copporcitite = MINERAL_MATERIAL_AMOUNT)
@@ -0,0 +1,36 @@
/obj/machinery/vending/primitive_catgirl_clothing_vendor
name = "wardrobe"
desc = "It's a big wardrobe filled up with all sorts of clothing."
icon = 'icons/obj/storage/closet.dmi'
icon_state = "cabinet"
use_power = FALSE
shut_up = TRUE
vend_reply = null
products = list(
/obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps = 15,
/obj/item/clothing/suit/jacket/primitive_catgirl_coat = 15,
/obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps = 15,
/obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots = 15,
/obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets = 10,
/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter = 10,
/obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather = 10,
/obj/item/clothing/head/standalone_hood/primitive_catgirl_colors = 10,
/obj/item/clothing/neck/scarf/primitive_catgirl_scarf = 5,
/obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white = 5,
/obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue = 5,
/obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white = 5,
/obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather = 5,
/obj/item/clothing/glasses/eyepatch/wrap = 5,
/obj/item/clothing/head/pelt/snow_tiger = 5,
/obj/item/clothing/head/pelt/black = 5,
/obj/item/clothing/head/pelt/white = 5,
/obj/item/clothing/head/pelt/wolf = 5,
/obj/item/clothing/head/pelt/wolf/white = 5,
)
/obj/machinery/vending/primitive_catgirl_clothing_vendor/Initialize(mapload)
. = ..()
onstation = FALSE
@@ -0,0 +1,18 @@
/datum/language/primitive_catgirl
name = "Ættmál"
desc = "A liturgical language passed through three centuries of Hearthkin culture, the only tongue which their literature is allowed to be spoken in; \
especially relating to their pagan practices. While Uncommon is used as a trade language with outsiders, Ættmál remains sacred and mostly unknown \
to those outside the Hearth."
key = "H"
flags = TONGUELESS_SPEECH
space_chance = 70
syllables = list (
"al", "an", "ar", "að", "eg", "en", "er", "ha", "he", "il", "in", "ir", "ið", "ki", "le", "na", "nd", "ng", "nn", "og", "ra", "ri",
"se", "st", "ta", "ur", "ði", "va", "ve", "sem", "sta", "til", "tur", "var", "ver", "við", "ður", "það", "þei", "með", "ega", "ann",
"tur", "egr", "eda", "eva", "ada", "the", "tre", "tai", "thor", "thur", "ohd", "din", "gim", "per", "ger", "héð", "bur", "kóp", "vog",
"bar", "dar", "akur", "jer", "bær", "múl", "fjörð", "jah", "dah", "dim", "din", "dir", "dur", "nya", "miau", "mjau", "ný", "kt", "hø",
)
icon_state = "omgkittyhiii"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi'
default_priority = 94
secret = TRUE
@@ -0,0 +1,34 @@
// Barrel but it works like a crate
/obj/structure/closet/crate/wooden/storage_barrel
name = "storage barrel"
desc = "This barrel can't hold liquids, it can just hold things inside of it however!"
icon_state = "barrel"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/barrel.dmi'
// Wooden shelves but not var edited
/obj/structure/rack/shelf/wooden
icon_state = "empty_shelf_1"
icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'
// Bonfires but with a grill pre-attached
/obj/structure/bonfire/grill_pre_attached
/obj/structure/bonfire/grill_pre_attached/Initialize(mapload)
. = ..()
grill = TRUE
add_overlay("bonfire_grill")
// Dirt but icebox
/turf/open/misc/dirt/icemoon
baseturfs = /turf/open/openspace/icemoon
initial_gas_mix = "ICEMOON_ATMOS"
// The area
/area/ruin/unpowered/primitive_catgirl_den
name = "\improper Icewalker Camp"
@@ -0,0 +1,63 @@
#define GAS_TOLERANCE 5
// Lungs
/obj/item/organ/internal/lungs/icebox_adapted
name = "hardy lungs"
desc = "Lungs adapted to frozen environments that would be otherwise inhospitable to most races. Feels cold."
/obj/item/organ/internal/lungs/icebox_adapted/Initialize(mapload)
. = ..()
var/datum/gas_mixture/immutable/planetary/mix = SSair.planetary[ICEMOON_DEFAULT_ATMOS]
if(!mix?.total_moles()) // If there is no icemoon atmos then we have problems, return now
return
// Take a "breath" of the air
var/datum/gas_mixture/breath = mix.remove(mix.total_moles() * BREATH_PERCENTAGE)
var/list/breath_gases = breath.gases
breath.assert_gases(
/datum/gas/oxygen,
/datum/gas/plasma,
/datum/gas/carbon_dioxide,
/datum/gas/nitrogen,
/datum/gas/bz,
/datum/gas/miasma,
)
var/oxygen_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])
var/nitrogen_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES])
var/plasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES])
var/carbon_dioxide_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES])
var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES])
safe_oxygen_min = max(0, oxygen_pp - GAS_TOLERANCE)
safe_nitro_min = max(0, nitrogen_pp - GAS_TOLERANCE)
safe_plasma_min = max(0, plasma_pp - GAS_TOLERANCE)
// Increase plasma tolerance based on amount in base air
safe_plasma_max += plasma_pp
// CO2 is always a waste gas, so none is required, but ashwalkers
// tolerate the base amount plus tolerance*2 (humans tolerate only 10 pp)
safe_co2_max = carbon_dioxide_pp + GAS_TOLERANCE * 2
// The lung tolerance against BZ is also increased the amount of BZ in the base air
BZ_trip_balls_min += bz_pp
BZ_brain_damage_min += bz_pp
// Lungs adapted to a high miasma atmosphere do not process it, and breathe it back out
if(miasma_pp)
suffers_miasma = FALSE
// Eyes
/obj/item/organ/internal/eyes/low_light_adapted
color_cutoffs = list(30, 15, 15)
#undef GAS_TOLERANCE
@@ -0,0 +1,69 @@
/obj/item/smelling_salts
name = "smelling salts"
desc = "A small pile of a salt-like substance that smells absolutely repulsive. Rumor has it that the smell is so pungent that even the dead will come back to life to escape it."
icon_state = "smelling_salts"
icon = 'modular_skyrat/modules/primitive_catgirls/icons/salts.dmi'
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
item_flags = NOBLUDGEON
/obj/item/smelling_salts/attack(mob/living/mob_attacked, mob/user)
. = ..()
if(!iscarbon(mob_attacked))
to_chat(user, span_warning("On second thought, maybe [src] won't work on [mob_attacked]."))
return
if(mob_attacked == user)
to_chat(user, span_warning("You can't bring yourself to get [src] anywhere near your face."))
return
if(mob_attacked.stat != DEAD)
to_chat(user, span_warning("On second thought, maybe you shouldn't use this on [mob_attacked] if they're not <b>dead</b>."))
return
try_revive(mob_attacked, user)
/// If the right conditions are present (basically could this person be defibrilated), revives the target
/obj/item/smelling_salts/proc/try_revive(mob/living/carbon/carbon_target, mob/user)
carbon_target.notify_ghost_cloning("You are being brought back to life!")
carbon_target.grab_ghost()
user.balloon_alert_to_viewers("trying to revive [carbon_target]")
if(!do_after(user, 3 SECONDS, carbon_target))
user.balloon_alert("stopped reviving [carbon_target]")
return
if(carbon_target.stat != DEAD)
to_chat(user, span_warning("Wait, [carbon_target] isn't actually <b>dead</b>!"))
return
var/defib_result = carbon_target.can_defib()
var/fail_reason
switch (defib_result)
if (DEFIB_FAIL_SUICIDE, DEFIB_FAIL_DNR, DEFIB_FAIL_BLACKLISTED, DEFIB_FAIL_NO_INTELLIGENCE)
fail_reason = "[carbon_target] doesn't respond at all... You don't think they're coming back."
if (DEFIB_FAIL_NO_HEART, DEFIB_FAIL_FAILING_HEART, DEFIB_FAIL_FAILING_BRAIN)
fail_reason = "[carbon_target] seems to respond just a little, but something you can't see must be wrong about them..."
if (DEFIB_FAIL_TISSUE_DAMAGE, DEFIB_FAIL_HUSK)
fail_reason = "[carbon_target]'s body seems way too damaged for this to work..."
if (DEFIB_FAIL_NO_BRAIN)
fail_reason = "[carbon_target]'s head looks like its missing something important."
if(carbon_target.health <= HEALTH_THRESHOLD_FULLCRIT)
fail_reason = "[carbon_target]'s body seems just a little too damaged for this to work..."
if(fail_reason)
to_chat(user, span_boldwarning("[fail_reason]"))
return
carbon_target.adjustOxyLoss(amount = 60, updating_health = TRUE)
playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg', 50, FALSE)
if(defib_result == DEFIB_POSSIBLE)
carbon_target.grab_ghost()
carbon_target.revive()
to_chat(carbon_target, span_userdanger("[CONFIG_GET(string/blackoutpolicy)]"))
log_combat(user, carbon_target, "revived", src)
@@ -0,0 +1,117 @@
/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl
name = "hole in the ground"
desc = "A clearly hand dug hole in the ground that appears to lead into a small cave of some kind? It's pretty dark in there."
prompt_name = "icemoon dweller"
icon = 'icons/mob/simple/lavaland/nest.dmi'
icon_state = "hole"
mob_species = /datum/species/human/felinid/primitive
outfit = /datum/outfit/primitive_catgirl
density = FALSE
you_are_text = "You are an icemoon dweller."
flavour_text = "For as long as you can remember, the icemoon has been your home. \
It's been the home of your ancestors, and their ancestors, and the ones before them. \
Currently, you and your kin live in uneasy tension with your nearby human-and-otherwise \
neighbors. Keep your village and your Kin safe, but bringing death on their heads from \
being reckless with the outsiders will not have the Gods be so kind."
spawner_job_path = /datum/job/primitive_catgirl
/// The team the spawner will assign players to and use to keep track of people that have already used the spawner
var/datum/team/primitive_catgirls/team
restricted_species = list(/datum/species/human/felinid/primitive)
random_appearance = FALSE
loadout_enabled = FALSE
uses = 9
deletes_on_zero_uses_left = FALSE
/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/Initialize(mapload)
. = ..()
team = new /datum/team/primitive_catgirls()
important_text = "Read the full policy <a href=\"[CONFIG_GET(string/icecats_policy_link)]\">here</a>."
/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/Destroy()
team = null
return ..()
/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/examine()
. = ..()
if(uses)
. += span_notice("You can see <b>[uses]</b> figures sound asleep down there.")
else
. += span_notice("It looks pretty empty.")
return .
/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/allow_spawn(mob/user, silent = FALSE)
if(!(user.key in team.players_spawned)) // One spawn per person
return TRUE
if(!silent)
to_chat(user, span_warning("It'd be weird if there were multiple of you in that cave, wouldn't it?"))
return FALSE
// This stuff is put on equip because it turns out /special sometimes just don't get called because skyrat
/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/equip(mob/living/carbon/human/spawned_human)
. = ..()
spawned_human.mind.add_antag_datum(/datum/antagonist/primitive_catgirl, team)
// I just have to be REALLY sure they get those languages
spawned_human.language_holder = new /datum/language_holder/primitive_felinid
spawned_human.update_atom_languages()
team.players_spawned += (spawned_human.key)
/datum/job/primitive_catgirl
title = "Icemoon Dweller"
// Antag and team datums
/datum/team/primitive_catgirls
name = "Icewalkers"
show_roundend_report = FALSE
/datum/antagonist/primitive_catgirl
name = "\improper Icewalker"
job_rank = ROLE_LAVALAND // If you're ashwalker banned you should also not be playing this, other way around as well
show_in_antagpanel = FALSE
show_to_ghosts = TRUE
prevent_roundtype_conversion = FALSE
antagpanel_category = "Icemoon Dwellers"
count_against_dynamic_roll_chance = FALSE
show_in_roundend = FALSE
/// Tracks the antag datum's 'team' for showing in the ghost orbit menu
var/datum/team/primitive_catgirls/feline_team
antag_recipes = list(
/datum/crafting_recipe/boneaxe,
/datum/crafting_recipe/bonespear,
/datum/crafting_recipe/bonedagger,
)
/datum/antagonist/primitive_catgirl/Destroy()
feline_team = null
return ..()
/datum/antagonist/primitive_catgirl/apply_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/owner_mob = mob_override || owner.current
var/datum/language_holder/holder = owner_mob.get_language_holder()
holder.remove_language(/datum/language/common, TRUE, TRUE, LANGUAGE_ALL)
holder.grant_language(/datum/language/primitive_catgirl, TRUE, TRUE, LANGUAGE_ALL)
holder.selected_language = /datum/language/primitive_catgirl
/datum/antagonist/primitive_catgirl/create_team(datum/team/team)
if(team)
feline_team = team
objectives |= feline_team.objectives
else
feline_team = new
/datum/antagonist/primitive_catgirl/get_team()
return feline_team
@@ -0,0 +1,104 @@
/mob/living/carbon/human/species/felinid/primitive
race = /datum/species/human/felinid/primitive
/datum/language_holder/primitive_felinid
understood_languages = list(
/datum/language/primitive_catgirl = list(LANGUAGE_ATOM),
/datum/language/uncommon = list(LANGUAGE_ATOM),
)
spoken_languages = list(
/datum/language/primitive_catgirl = list(LANGUAGE_ATOM),
/datum/language/uncommon = list(LANGUAGE_ATOM),
)
selected_language = /datum/language/primitive_catgirl
/datum/species/human/felinid/primitive
name = "Primitive Demihuman"
id = SPECIES_FELINE_PRIMITIVE
mutantlungs = /obj/item/organ/internal/lungs/icebox_adapted
mutanteyes = /obj/item/organ/internal/eyes/low_light_adapted
species_language_holder = /datum/language_holder/primitive_felinid
bodytemp_normal = 270 // If a normal human gets hugged by one its gonna feel cold
bodytemp_heat_damage_limit = 283 // To them normal station atmos would be sweltering
bodytemp_cold_damage_limit = 213 // Man up bro its not even that cold out here
liked_food = SEAFOOD | MEAT | GORE // Yum
inherent_traits = list(
TRAIT_VIRUSIMMUNE,
TRAIT_RESISTCOLD,
)
always_customizable = TRUE
/datum/species/human/felinid/primitive/prepare_human_for_preview(mob/living/carbon/human/human_for_preview)
human_for_preview.hairstyle = "Blunt Bangs Alt"
human_for_preview.hair_color = "#323442"
human_for_preview.skin_tone = "mediterranean"
human_for_preview.update_body_parts()
human_for_preview.dna.species.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color))
human_for_preview.dna.species.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color))
human_for_preview.update_mutant_bodyparts(TRUE)
human_for_preview.update_body(TRUE)
/datum/species/human/felinid/primitive/get_species_description()
return list(
"Genetically modified humanoids believed to be descendants of a now centuries old colony \
ship from the pre-bluespace travel era. Still having at least some human traits, they \
are most comparable to today's felinids with most sporting features likely spliced from \
the icemoon's many fauna."
)
/datum/species/human/felinid/primitive/get_species_lore()
return list(
"The Hearthkin are a culture of disparate Scandinavian groups all sharing a common origin \
as descendents from demihuman genemodders aboard the good ship Stjarndrakkr, or Star Dragon; \
an enormous colony ship almost 40km tall. This ship first reached the orbit of its last \
resting place three hundred years ago, before the advent of bluespace travel; coming from \
a world known to the Hearthkin as 'Asgard.' When it reached the atmosphere of the ice moon, \
or 'Niflheim' as they consider it, the vessel detonated in low orbit for unknown reasons. \
Large sections of the Star Dragon broke up and sealed themselves, \
coming to a rest all over the moon itself.",
"At first, life was incredibly difficult for the would-be colonists. Generations were very short, \
and most of the personnel able to even fix the vessel had died either on impact, or later on. \
While their genetic modifications and pre-existing comfort in frozen climates somewhat helped them, \
the Ancestors were said to have made one last desperate move to put all their resources together to \
fully modify and adapt themselves to the climes of Niflheim; forever.",
"Nowadays, the Hearthkin are removed from the original culture of the Ancestors, building one all of their own. \
Many of the original, largest segments of the Star Dragon are buried under ice and snow, and the Hearthkin have \
created a culture of building separate dwellings to keep them secret. Dwelling in longhouses and sleeping in the \
warm undergrounds of Niflheim, and hunting native creatures and those coming from portals to the moon's planet; \
Muspelheim. Their pagan faith has strengthened over the centuries, from occasional prayers for a blizzard to end \
soon, to now full-on worship and sacrifices to their various Gods. Hearthkin still hold immense reverence for their \
Ancestors, but tend to have varying opinions and speculation on what exactly they were like, and why they came to \
Niflheim in the first place.",
"Their names are two-part; a birth name, and a title. Their birth names still hold resemblance to 'Asgardian' culture, \
typically a Nordic name such as 'Solveig Helgasdottir,' or 'Bjorn Lukasson.' However, their last name is then exchanged \
for a 'Title' when the Hearthkin is no longer 'Unproven.' These are a two-parter, based on either great deeds, \
embarrassing moments, or aspects of the person's personality. Some examples would be 'Soul-Drowner' after the night of \
a Hearthkin drinking herself half-dead, or one might be known as 'Glacier-Shaped' for being abnormally large. \
These titles are always given by ones' kin.",
"The Hearth itself is an area that the kindred hold incredibly sacred, primarily hating Outsiders for more \
practical reasons. They think themselves as having been there first, many of them knowing they were 'promised' \
Niflheim by the Ancestors. Unlike the Ashwalkers of Muspelheim, the Hearthkin are a more technologically \
advanced society; having use for not only metal, but gold and silver for accessory. They are known to employ \
artifacts thought to be of either the planet their moon orbits, or leftovers from their Ancestors; however, for \
a variety of reasons from Kin to Kin, they tend to shy away from using modern human technology.",
"Physically, the Hearthkin always come in the form of demihumans; appearing similar to normal Earthlings, \
but with the tails, ears, and sometimes limbs of various arctic animals; wolves, bears, and felines to only name a few. \
They seem perfectly adapted to their lands of ice and mist, but find even the mild controlled temperatures of \
NanoTrasen stations to be swelteringly hot. Their view of 'station' genemodders is that of 'halflings': \
Ancestral bodies, but with the blood and spirit of the humans of Midgard, \
tending to look down on them even more than other aliens.",
)
Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

@@ -0,0 +1,30 @@
#define OVEN_TRAY_Y_OFFSET -12
/obj/machinery/oven/stone
name = "stone oven"
desc = "Sorry buddy, all this stone used up the budget that would have normally gone to garfield comic jokes."
icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_oven.dmi'
circuit = null
use_power = FALSE
/obj/machinery/oven/stone/add_tray_to_oven(obj/item/plate/oven_tray, mob/baker)
used_tray = oven_tray
if(!open)
oven_tray.vis_flags |= VIS_HIDE
vis_contents += oven_tray
oven_tray.flags_1 |= IS_ONTOP_1
oven_tray.vis_flags |= VIS_INHERIT_PLANE
oven_tray.pixel_y = OVEN_TRAY_Y_OFFSET
RegisterSignal(used_tray, COMSIG_MOVABLE_MOVED, PROC_REF(on_tray_moved))
update_baking_audio()
update_appearance()
/obj/machinery/oven/stone/set_smoke_state(new_state)
. = ..()
if(particles)
particles.position = list(0, 10, 0)
#undef OVEN_TRAY_Y_OFFSET
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

+9
View File
@@ -6684,8 +6684,17 @@
#include "modular_skyrat\modules\pollution\code\turf_open.dm"
#include "modular_skyrat\modules\poly_commands\parrot.dm"
#include "modular_skyrat\modules\positronic_alert_console\code\positronic_alert_console.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\clothing.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\clothing_vendor.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\language.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\map_items.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\organs.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\smelling_salts.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\spawner.dm"
#include "modular_skyrat\modules\primitive_catgirls\code\species.dm"
#include "modular_skyrat\modules\primitive_cooking_additions\code\big_mortar.dm"
#include "modular_skyrat\modules\primitive_cooking_additions\code\cutting_board.dm"
#include "modular_skyrat\modules\primitive_cooking_additions\code\stone_oven.dm"
#include "modular_skyrat\modules\primitive_production\code\ceramics.dm"
#include "modular_skyrat\modules\primitive_production\code\glassblowing.dm"
#include "modular_skyrat\modules\primitive_production\code\production_skill.dm"