Skip to content

Commit

Permalink
[Semi-modular] (The big) Akula species revamp (Skyrat-SS13#20131)
Browse files Browse the repository at this point in the history
* initial i think

* stuff

* test

* fix

* close to publishing

* k

* raise akula tail 1 px

* beginning of clothing

* akula species trait initial

* reviews and CI

* head.dm runtime

* some reviews

* oops

* oops 2x

* review

* job equipping

* clothing flavor

* forgot the .dme

* runtime test

* foundation to more clothing

* errors

* almost ready now

* forgot

* new loadout species restriction

* null runtime

* runtime test

* sprite error

* atleast fill this in

* screenshot test

* lots of descriptions

* i forgot to add job clothing values

* get_species_lore

* prepare_human_for_preview fix

will need new screenshot test probably

* screenshot test fix

Skyrat-SS13#20284

* loreupdate

* write it better

* forgor 💀

* dixel fix

* sprite fix

* job outfit armor changes

* reviews

* extra

* desc formatting

* linter

* reviews part 1

* forgot

* reviews part 2

* reviews part 3

* reviews part 4

* forgot

* fixes

* fix for aquatic digilegs

* small

* fire/water balancing like yin and yang

* modularity thing

* aquatic rename

* A fix and change

* moves sphere 1px and loadout thing

* hair bugfiex

* Te Velu Akko

* head internals

* more patches

* akula eyenudge
  • Loading branch information
carpotoxin authored Jun 27, 2023
1 parent ddba2fd commit f8afe4d
Show file tree
Hide file tree
Showing 56 changed files with 1,110 additions and 79 deletions.
1 change: 1 addition & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,7 @@
#define OFFSET_NECK "neck"
#define OFFSET_HELD "held"
#define OFFSET_ACCESSORY "accessory" // Skyrat edit - addition
#define OFFSET_HAIR "hair" // Skyrat edit - addition - Akulas

//MINOR TWEAKS/MISC
//#define AGE_MIN 17 //youngest a character can be //ORIGINAL
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/~skyrat_defines/_HELPERS/offset_index.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/// The axis of the `offset_features` list in the species datum
#define INDEX_X 1
#define INDEX_Y 2
3 changes: 3 additions & 0 deletions code/__DEFINES/~skyrat_defines/combat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
//Grab breakout odds
#define OVERSIZED_GRAB_RESIST_BONUS 10 /// For those with the oversized trait, they get this.

//Grab breakout bonus for akulas when at 10+ wet_stacks
#define AKULA_GRAB_RESIST_BONUS 10

// Damage modifiers
#define OVERSIZED_HARM_DAMAGE_BONUS 5 /// Those with the oversized trait do 5 more damage.

Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/~skyrat_defines/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define BODYPART_ICON_HUMAN 'modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi'
#define BODYPART_ICON_MAMMAL 'modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi'
#define BODYPART_ICON_AKULA 'modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi'
#define BODYPART_ICON_AQUATIC 'modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi'
#define BODYPART_ICON_GHOUL 'modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi'
#define BODYPART_ICON_INSECT 'modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi'
#define BODYPART_ICON_LIZARD 'modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi'
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/~skyrat_defines/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@
///from base of /obj/effect/abstract/liquid_turf/Initialize() (/obj/effect/abstract/liquid_turf/liquids)
#define COMSIG_TURF_LIQUIDS_CREATION "turf_liquids_creation"

/// listens to wet_stacks, if wetting a mob above 10 stacks it will signal the akula race trait to apply its buffs and nerfs
#define COMSIG_MOB_TRIGGER_WET_SKIN "mob_trigger_wet_skin"

//when someone casts their fishing rod
#define COMSIG_START_FISHING "start_fishing"
//when someone pulls back their fishing rod
Expand Down
9 changes: 9 additions & 0 deletions code/__DEFINES/~skyrat_defines/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,15 @@
/// One can breath under water, you get me?
#define TRAIT_WATER_BREATHING "water_breathing"

/// The trait which Akulas inherit, for their species mechanic revolving around wet_stacks
#define TRAIT_SLICK_SKIN "slick_skin"
/// The trait which is applied when a `slick skin` trait haver actually gets wet_stacks
#define TRAIT_SLIPPERY "slippery"
/// The minimum amount of tiles a TRAIT_SLIPPERY haver will slide on slip
#define SLIPPERY_MIN 5
/// The maximum amount of tiles a TRAIT_SLIPPERY haver will slide on slip
#define SLIPPERY_MAX 9

/// Under the effect of a numbling agent, such as morphine, for surgery.
#define TRAIT_NUMBED "numbed"

Expand Down
17 changes: 0 additions & 17 deletions code/datums/mood_events/generic_negative_events.dm
Original file line number Diff line number Diff line change
Expand Up @@ -370,23 +370,6 @@
mood_change = -1
timeout = 30 SECONDS

//SKYRAT EDIT START: Mainly surgery for now.
/datum/mood_event/mild_surgery
description = "<span class='warning'>Even if I couldn't feel most of it, it feels wrong being awake while somebody works on your body. Ugh!</span>\n"
mood_change = -1
timeout = 5 MINUTES

/datum/mood_event/severe_surgery
description = "<span class='boldwarning'>Wait, THEY CUT ME OPEN - AND I FELT EVERY SECOND OF IT!</span>\n"
mood_change = -4
timeout = 15 MINUTES

/datum/mood_event/robot_surgery
description = "<span class='warning'>Having my robotic parts messed with while I was conscious felt wrong... if only I had a sleep mode!</span>\n"
mood_change = -4
timeout = 10 MINUTES
//SKYRAT EDIT END

/datum/mood_event/gamer_withdrawal
description = "I wish I was gaming right now..."
mood_change = -5
Expand Down
8 changes: 8 additions & 0 deletions code/game/turfs/open/_open.dm
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,14 @@
// Stops sliding
slide_distance = 0

// SKYRAT EDIT START - Akula species
if(HAS_TRAIT(slipper, TRAIT_SLIPPERY))
if(!(lube & SLIDE_ICE))
lube |= SLIDE

slide_distance = rand(SLIPPERY_MIN, SLIPPERY_MAX)
// SKYRAT EDIT END

var/obj/buckled_obj
if(slipper.buckled)
if(!(lube & GALOSHES_DONT_HELP)) //can't slip while buckled unless it's lube.
Expand Down
15 changes: 15 additions & 0 deletions code/modules/mob/living/living.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1133,13 +1133,28 @@
altered_grab_state-- //SKYRAT EDIT END
var/resist_chance = BASE_GRAB_RESIST_CHANCE /// see defines/combat.dm, this should be baseline 60%
//SKYRAT EDIT ADDITION
// Akula grab resist
if(HAS_TRAIT(src, TRAIT_SLIPPERY))
resist_chance += AKULA_GRAB_RESIST_BONUS
// Oversized grab resist
if(HAS_TRAIT(src, TRAIT_OVERSIZED))
resist_chance += OVERSIZED_GRAB_RESIST_BONUS
if(HAS_TRAIT(pulledby, TRAIT_OVERSIZED))
resist_chance -= OVERSIZED_GRAB_RESIST_BONUS
//SKYRAT EDIT END
resist_chance = (resist_chance/altered_grab_state) ///Resist chance divided by the value imparted by your grab state. It isn't until you reach neckgrab that you gain a penalty to escaping a grab.
if(prob(resist_chance))
//SKYRAT EDIT ADDITION
// Akula break-out flavor
if(HAS_TRAIT(src, TRAIT_SLIPPERY))
visible_message(span_cyan("[src] slips free of [pulledby]'s grip!"), \
span_cyan("You slip free of [pulledby]'s grip!"), null, null, pulledby)
to_chat(pulledby, span_cyan("[src] slips free of your grip!"))
playsound(loc, 'sound/misc/slip.ogg', 50, TRUE, -1)
log_combat(pulledby, src, "broke grab")
pulledby.stop_pulling()
return FALSE
//SKYRAT EDIT END
visible_message(span_danger("[src] breaks free of [pulledby]'s grip!"), \
span_danger("You break free of [pulledby]'s grip!"), null, null, pulledby)
to_chat(pulledby, span_warning("[src] breaks free of your grip!"))
Expand Down
15 changes: 15 additions & 0 deletions code/modules/surgery/bodyparts/head.dm
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,11 @@
var/image/hair_overlay = image(sprite2.icon, "[sprite2.icon_state]", -HAIR_LAYER, SOUTH)
hair_overlay.color = hair_color
hair_overlay.alpha = hair_alpha
// SKYRAT ADD - Hair offset
if(LAZYFIND(owner?.dna?.species?.offset_features, OFFSET_HAIR))
hair_overlay.pixel_x = owner.dna.species.offset_features[OFFSET_HAIR][INDEX_X]
hair_overlay.pixel_y = owner.dna.species.offset_features[OFFSET_HAIR][INDEX_Y]
// SKYRAT ADD END
. += hair_overlay


Expand Down Expand Up @@ -268,8 +273,18 @@

else if(!hair_hidden && hair_overlay && (HAIR in species_flags_list))
hair_overlay.alpha = hair_alpha
// SKYRAT ADD - Hair offset
if(LAZYFIND(owner?.dna?.species?.offset_features, OFFSET_HAIR))
hair_overlay.pixel_x = owner.dna.species.offset_features[OFFSET_HAIR][INDEX_X]
hair_overlay.pixel_y = owner.dna.species.offset_features[OFFSET_HAIR][INDEX_Y]
// SKYRAT ADD END
. += hair_overlay
if(hair_gradient_overlay)
// SKYRAT ADD - Hair offset
if(LAZYFIND(owner?.dna?.species?.offset_features, OFFSET_HAIR))
hair_gradient_overlay.pixel_x = owner.dna.species.offset_features[OFFSET_HAIR][INDEX_X]
hair_gradient_overlay.pixel_y = owner.dna.species.offset_features[OFFSET_HAIR][INDEX_Y]
// SKYRAT ADD END
. += hair_gradient_overlay

/// Returns an appropriate debrained icon state
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Species trait debuffs
/datum/mood_event/dry_skin
description = "My skin feels awfully dry...\n"
mood_change = -2

// Surgery mood debuffs
/datum/mood_event/mild_surgery
description = "Even if I couldn't feel most of it, it feels wrong being awake while somebody works on your body. Ugh!\n"
mood_change = -1
timeout = 5 MINUTES

/datum/mood_event/severe_surgery
description = "Wait, THEY CUT ME OPEN - AND I FELT EVERY SECOND OF IT!\n"
mood_change = -4
timeout = 15 MINUTES

/datum/mood_event/robot_surgery
description = "Having my robotic parts messed with while I was conscious felt wrong... if only I had a sleep mode!\n"
mood_change = -4
timeout = 10 MINUTES
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@
desc = "An encryption key that automatically encodes Siik'tajr heard through the radio into common."
translated_language = /datum/language/siiktajr

/obj/item/encryptionkey/translation/akula
name = "\improper Te Velu Akko translation key"
desc = "An encryption key that automatically encodes Te Velu Akko heard through the radio into common."
translated_language = /datum/language/akulan

/obj/item/encryptionkey/translation/terrum
name = "\improper Terrum translation key"
desc = "An encryption key that automatically encodes Terrum heard through the radio into common."
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/obj/item/clothing/head/hats/caphat/azulean
icon_state = "oldbloodcap"
icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi'

/obj/item/clothing/head/hats/caphat/azulean/old_blood
name = "\improper Oldblood's royal cap"
desc = "A peaked cap typically seen on nobles and high-rankers of the Agurkrral Royal Navy, this service hat has a long history in the Old Principalities. \
Comfortable and lightweight, the purpose of this cap has gradually shifted to becoming yet another method to flex rank. \n\n\
Threaded gold is often seen in the campaign cords attached to it, and the emblems on them grow more and more complex based on ranking; \
and of course, importance to the King."
icon_state = "oldbloodcap"

/obj/item/clothing/head/hats/caphat/azulean/upstart
name = "\improper Upstart's noble cap"
desc = "A peaked cap widely seen across the New Principalities. \n\
Combining ideas from both the NRI and the Old Principalities, this cloneleather cap was made to be both inexpensive and easier to maintain than the elaborate headpieces worn by the older nobility. \
Border princes of all make and model are known to put their own personal emblems on these instead of any coherent ranking system, \
and the cap features a wider brim in order to shield Azulean eyes from the alien suns they intend to grasp."
icon_state = "upstartcap"
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/// A space-worthy skinsuit to be combined with the skinsuit armor
/obj/item/clothing/under/skinsuit
name = "\improper Voidcrosser stardress"
desc = "The 'Voidcrosser'-pattern Stardress is a long-standing template upon which most Azulean spacesuits are made. \n\
This EVA suit is a single skintight garment, designed for flexibility and maneuverability while using jetpacks or any sort of thruster; \
Azuleans preferring to use more familiar swimming motions than most EVA workers. The 'Voidcrosser' applies similar technologies to traditional Shoredresses, \
utilizing high-tech fabrics and water pumps to exert pressure over the Azulean's body. \n\n\
An attached Shoredress helm is often used in conjunction with a third-party oxygen supply to allow one to breathe, \
and open pores in the suit allow the body to be cooled by the perspiration of internal water. \n\
These suits are reputable among orbital workers for having very little interference with movement, and easy storage by simply folding them inside of any bubble-shaped helmet."
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi'
icon_state = "skinsuit"
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
armor_type = /datum/armor/wetsuit_under
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT_OFF
resistance_flags = NONE
female_sprite_flags = NO_FEMALE_UNIFORM
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON

/obj/item/clothing/under/skinsuit/Initialize(mapload)
. = ..()
AddComponent(/datum/component/wetsuit)

/obj/item/clothing/under/skinsuit/Destroy()
. = ..()
qdel(GetComponent(/datum/component/wetsuit))

/obj/item/clothing/head/helmet/space/skinsuit_helmet
name = "\improper Stardress helm"
desc = "A reinforced type of 'Glass' often used particularly by Azulean boarding teams, this offshoot of the ones seen in Shoredresses is built to last. \n\
These make use of laminated glass rather than the typical 'flexiglass' of civilian models, allowing them not only durability, but to hold together when a shatter does occur; \
and for what remains to stay in the frame. These are typically made of up to four layers of the stuff, working unintentionally to ensure the faces of their wearers are difficult to identify. \n\n\
In addition, the interlayer gives the helms sound insulation properties, and the ability to block UV radiation. \
These helmets are known for being distinctly uncomfortable in comparison to their civilian counterparts; cramped and with only the most barebones climate control tech."
icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi'
icon_state = "skinsuithelmet"

/obj/item/clothing/head/helmet/space/skinsuit_helmet/Initialize(mapload)
. = ..()
AddComponent(/datum/component/wetsuit)

/obj/item/clothing/head/helmet/space/skinsuit_helmet/Destroy()
. = ..()
qdel(GetComponent(/datum/component/wetsuit))

/obj/item/clothing/suit/armor/riot/skinsuit_armor
name = "\improper Shorebreaker plating"
desc = "'Shorebreaker'-pattern Stardress plating was developed for Azulean boarding teams in service of the New Principalities. \
Kept resilient and maneuverable, Shorebreaker armor is built predominantly close-quarters breaching. \n\n\
Having sparse plating around the wearer's arms and legs, boarding teams are encouraged after their pod lands to do one thing: \
make use of their rapid movement, and render their enemies past tense. The armor is relatively hardy against ranged weapons, \
but the alloys involved are primarily constructed around resisting strikes from boarding axes, lances, and other common pirate-repellant weapons."
icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi'
icon_state = "skinsuitarmor"
base_icon_state = "skinsuitarmor"


/obj/item/clothing/suit/armor/riot/skinsuit_armor/equipped(mob/user, slot)
. = ..()
if(slot != ITEM_SLOT_ICLOTHING)
return

check_tail(user)
update_appearance()

/obj/item/clothing/suit/armor/riot/skinsuit_armor/dropped(mob/user)
. = ..()
check_tail(user)
update_appearance()

/// Pick an icon_state that matches nicer with tails if one is found on the wearer
/obj/item/clothing/suit/armor/riot/skinsuit_armor/proc/check_tail(mob/living/carbon/human/user)
icon_state = base_icon_state
if(!user.dna.species.mutant_bodyparts["tail"])
return

icon_state = "skinsuitarmor_cutback"
Loading

0 comments on commit f8afe4d

Please sign in to comment.