Skip to content

Commit

Permalink
Adding wyrdling tails, ears, traits, masks.
Browse files Browse the repository at this point in the history
  • Loading branch information
MistakeNot4892 committed Aug 16, 2024
1 parent 3a86988 commit 627bab1
Show file tree
Hide file tree
Showing 11 changed files with 349 additions and 35 deletions.
76 changes: 41 additions & 35 deletions mods/content/fantasy/_fantasy.dme
Original file line number Diff line number Diff line change
@@ -1,35 +1,41 @@
#ifndef MODPACK_FANTASY_SPECIES
#define MODPACK_FANTASY_SPECIES
// BEGIN_INCLUDE
#include "_fantasy.dm"
#include "datum\cultures.dm"
#include "datum\currencies.dm"
#include "datum\factions.dm"
#include "datum\locations.dm"
#include "datum\outfits.dm"
#include "datum\overrides.dm"
#include "datum\species.dm"
#include "datum\hnoll\bodytypes.dm"
#include "datum\hnoll\culture.dm"
#include "datum\hnoll\language.dm"
#include "datum\hnoll\markings.dm"
#include "datum\hnoll\organs.dm"
#include "datum\hnoll\species.dm"
#include "datum\kobaloi\bodytypes.dm"
#include "datum\kobaloi\clothing.dm"
#include "datum\kobaloi\culture.dm"
#include "datum\kobaloi\language.dm"
#include "datum\kobaloi\markings.dm"
#include "datum\kobaloi\organs.dm"
#include "datum\kobaloi\species.dm"
#include "items\clothing\_loadout.dm"
#include "items\clothing\_recipes.dm"
#include "items\clothing\armor.dm"
#include "items\clothing\glasses.dm"
#include "items\clothing\jerkin.dm"
#include "items\clothing\loincloth.dm"
#include "items\clothing\overrides.dm"
#include "items\clothing\trousers.dm"
#include "props\signpost.dm"
// END_INCLUDE
#endif
#ifndef MODPACK_FANTASY_SPECIES
#define MODPACK_FANTASY_SPECIES
// BEGIN_INCLUDE
#include "_fantasy.dm"
#include "datum\cultures.dm"
#include "datum\currencies.dm"
#include "datum\factions.dm"
#include "datum\locations.dm"
#include "datum\outfits.dm"
#include "datum\overrides.dm"
#include "datum\species.dm"
#include "datum\hnoll\bodytypes.dm"
#include "datum\hnoll\culture.dm"
#include "datum\hnoll\language.dm"
#include "datum\hnoll\markings.dm"
#include "datum\hnoll\organs.dm"
#include "datum\hnoll\species.dm"
#include "datum\kobaloi\bodytypes.dm"
#include "datum\kobaloi\clothing.dm"
#include "datum\kobaloi\culture.dm"
#include "datum\kobaloi\language.dm"
#include "datum\kobaloi\markings.dm"
#include "datum\kobaloi\organs.dm"
#include "datum\kobaloi\species.dm"
#include "datum\traits\_wyrd.dm"
#include "datum\traits\_wyrd_categories.dm"
#include "datum\traits\wyrd_wild.dm"
#include "datum\wyrdling\ears.dm"
#include "datum\wyrdling\tails.dm"
#include "items\clothing\_loadout.dm"
#include "items\clothing\_recipes.dm"
#include "items\clothing\armor.dm"
#include "items\clothing\glasses.dm"
#include "items\clothing\jerkin.dm"
#include "items\clothing\loincloth.dm"
#include "items\clothing\mask.dm"
#include "items\clothing\overrides.dm"
#include "items\clothing\trousers.dm"
#include "props\signpost.dm"
// END_INCLUDE
#endif
5 changes: 5 additions & 0 deletions mods/content/fantasy/datum/traits/_wyrd.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/decl/trait/wyrd
abstract_type = /decl/trait/wyrd
category = "Wyrd"
trait_cost = -1
available_at_chargen = TRUE
59 changes: 59 additions & 0 deletions mods/content/fantasy/datum/traits/_wyrd_categories.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// TODO: actual effects
/decl/trait/wyrd/fire
name = "Burning Sign"
description = "Affinity for the New School of alchemical working (energy, force, fire, lightning). TODO."
incompatible_with = list(
/decl/trait/wyrd/deep,
/decl/trait/wyrd/sky,
/decl/trait/wyrd/wild,
/decl/trait/wyrd/flesh
)
uid = "trait_wyrd_flame"

/decl/trait/wyrd/sky
name = "Sky Sign"
description = "Affinity for the sun, moon and stars, cold, air, wind, light, sky. Associated with the magical traditions of the Steppe and Nine Mothers. TODO."
incompatible_with = list(
/decl/trait/wyrd/deep,
/decl/trait/wyrd/fire,
/decl/trait/wyrd/wild,
/decl/trait/wyrd/flesh
)
uid = "trait_wyrd_sky"

/decl/trait/wyrd/deep
name = "Hollow Sign"
description = "Affinity for stone, darkness, the depths, the earth. Associated with the magical traditions of kobaloi and dvergr. TODO."
incompatible_with = list(
/decl/trait/wyrd/sky,
/decl/trait/wyrd/fire,
/decl/trait/wyrd/wild,
/decl/trait/wyrd/flesh
)
uid = "trait_wyrd_hollow"

/decl/trait/wyrd/flesh
name = "Rose Sign"
description = "Affinity for blood, flesh, bone - healing, necromancy, blood alchemy, manipulation of living material. TODO."
incompatible_with = list(
/decl/trait/wyrd/sky,
/decl/trait/wyrd/fire,
/decl/trait/wyrd/wild,
/decl/trait/wyrd/deep
)
uid = "trait_wyrd_flesh"

/decl/trait/wyrd/wild
name = "Wild Sign"
description = "A wyrdling is a human whose soul has been touched by the primeveal \
anima of the wilds, carried down through blood and manifesting in strange ways. The \
wyrdmarked are often treated with mistrust or fear by the general populace, leading \
many to cover their wyrdmarks and hide their nature."
permitted_species = list(SPECIES_HUMAN)
uid = "trait_wyrd_wild"
incompatible_with = list(
/decl/trait/wyrd/fire,
/decl/trait/wyrd/sky,
/decl/trait/wyrd/deep,
/decl/trait/wyrd/flesh
)
40 changes: 40 additions & 0 deletions mods/content/fantasy/datum/traits/wyrd_wild.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/decl/trait/wyrd/wild/animal_form
abstract_type = /decl/trait/wyrd/wild/animal_form
name = "Animal Semblance"
description = "Some wyrdlings possess the ability to 'veer' into the form of an \
animal, known as the 'semblance'. Such wyrdlings use masks of bone or wood to focus \
and control the veering, making it difficult for them to conceal their abilities."
parent = /decl/trait/wyrd/wild
incompatible_with = null
var/mask_type

/decl/trait/wyrd/wild/animal_form/Initialize()
incompatible_with = subtypesof(/decl/trait/wyrd/wild/animal_form) - type
. = ..()

/decl/trait/wyrd/wild/animal_form/apply_trait(mob/living/holder)
. = ..()
if(mask_type)
var/obj/item/clothing/mask/ghost_caul/mask = new mask_type
if(!holder.equip_to_slot_if_possible(mask, slot_wear_mask_str))
holder.put_in_hands_or_store_or_drop(mask)

/decl/trait/wyrd/wild/animal_form/fox
name = "Fox Semblance"
mask_type = /obj/item/clothing/mask/ghost_caul/fox
uid = "trait_wyrd_wild_fox"

/decl/trait/wyrd/wild/animal_form/deer
name = "Deer Semblance"
mask_type = /obj/item/clothing/mask/ghost_caul/deer
uid = "trait_wyrd_wild_deer"

/decl/trait/wyrd/wild/animal_form/rabbit
name = "Rabbit Semblance"
mask_type = /obj/item/clothing/mask/ghost_caul/rabbit
uid = "trait_wyrd_wild_rabbit"

/decl/trait/wyrd/wild/animal_form/bear
name = "Bear Semblance"
mask_type = /obj/item/clothing/mask/ghost_caul/bear
uid = "trait_wyrd_wild_bear"
31 changes: 31 additions & 0 deletions mods/content/fantasy/datum/wyrdling/ears.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/decl/sprite_accessory/ears/wyrdling
abstract_type = /decl/sprite_accessory/ears/wyrdling
icon = 'mods/content/fantasy/icons/wyrdling/ears.dmi'
required_traits = list(/decl/trait/wyrd/wild)
accessory_metadata_types = list(SAM_COLOR, SAM_COLOR_INNER)

/decl/sprite_accessory/ears/wyrdling/animal
name = "Animal Ears"
icon_state = "ears_plain"
uid = "accessory_ears_animal"

/decl/sprite_accessory/ears/wyrdling/lupine
name = "Lupine Ears"
icon_state = "wolf"
uid = "accessory_ears_wolf"

/decl/sprite_accessory/ears/wyrdling/fennec
name = "Fennec Ears"
icon_state = "fennec"
uid = "accessory_ears_fennec"

/decl/sprite_accessory/ears/wyrdling/vulpine
name = "Vulpine Ears"
icon_state = "fox"
uid = "accessory_ears_fox"

/decl/sprite_accessory/ears/wyrdling/antlers
name = "Antlers"
icon_state = "antlers"
uid = "accessory_ears_antlers"
accessory_metadata_types = list(SAM_COLOR)
69 changes: 69 additions & 0 deletions mods/content/fantasy/datum/wyrdling/tails.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/decl/sprite_accessory/tail/wyrdling
abstract_type = /decl/sprite_accessory/tail/wyrdling
icon = 'mods/content/fantasy/icons/wyrdling/tails.dmi'
required_traits = list(/decl/trait/wyrd/wild)
accessory_metadata_types = list(SAM_COLOR)

/decl/sprite_accessory/tail/wyrdling/twotone
abstract_type = /decl/sprite_accessory/tail/wyrdling/twotone
accessory_metadata_types = list(SAM_COLOR, SAM_COLOR_INNER)

/decl/sprite_accessory/tail/wyrdling/twotone/skunk
name = "Skunk Tail"
icon_state = "skunktail"
uid = "acc_tail_skunk"

/decl/sprite_accessory/tail/wyrdling/twotone/vulpine
name = "Vulpine Tail"
icon_state = "vulptail"
uid = "acc_tail_vulpine"

/decl/sprite_accessory/tail/wyrdling/twotone/tuft
name = "Tuft Tail"
icon_state = "deertail"
uid = "acc_tail_deer"

/decl/sprite_accessory/tail/wyrdling/twotone/long_tuft
name = "Long Tufted Tail"
icon_state = "easterntail"
uid = "acc_tail_eastern"

/decl/sprite_accessory/tail/wyrdling/horse
name = "Horse Tail"
icon_state = "horse"
uid = "acc_tail_horse"

/decl/sprite_accessory/tail/wyrdling/fantail
name = "Fantail"
icon_state = "fantail"
uid = "acc_tail_fan"

/decl/sprite_accessory/tail/wyrdling/wagtail
name = "Wagtail"
icon_state = "wagtail"
uid = "acc_tail_wag"

/decl/sprite_accessory/tail/wyrdling/mouse
name = "Mouse Tail"
icon_state = "mouse"
uid = "acc_tail_mouse"

/decl/sprite_accessory/tail/wyrdling/straight
name = "Straight Tail"
icon_state = "straighttail"
uid = "acc_tail_straight"

/decl/sprite_accessory/tail/wyrdling/spiky
name = "Spiky Tail"
icon_state = "ztail"
uid = "acc_tail_ztail"

/decl/sprite_accessory/tail/wyrdling/fox
name = "Fox Tail"
icon_state = "fox_tail"
uid = "acc_tail_fox"

/decl/sprite_accessory/tail/wyrdling/wolf
name = "Wolf Tail"
icon_state = "wolf_tail"
uid = "acc_tail_wolf"
Binary file added mods/content/fantasy/icons/clothing/ghost_caul.dmi
Binary file not shown.
Binary file added mods/content/fantasy/icons/wyrdling/ears.dmi
Binary file not shown.
Binary file added mods/content/fantasy/icons/wyrdling/tails.dmi
Binary file not shown.
21 changes: 21 additions & 0 deletions mods/content/fantasy/items/clothing/_loadout.dm
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,27 @@
)
uid = "gear_fantasy_work_gloves"

/decl/loadout_option/fantasy/mask
abstract_type = /decl/loadout_option/fantasy/mask
slot = slot_wear_mask_str

/decl/loadout_option/fantasy/mask/ghost_caul
name = "customised wyrdling mask"
path = /obj/item/clothing/mask/ghost_caul
uid = "gear_misc_wyrdling_mask"
apply_to_existing_if_possible = TRUE
required_traits = list(/decl/trait/wyrd/wild)
available_materials = list(
/decl/material/solid/organic/bone,
/decl/material/solid/organic/wood,
/decl/material/solid/stone/marble,
/decl/material/solid/stone/basalt,
/decl/material/solid/organic/wood/mahogany,
/decl/material/solid/organic/wood/maple,
/decl/material/solid/organic/wood/ebony,
/decl/material/solid/organic/wood/walnut
)

/decl/loadout_option/fantasy/shoes
name = "shoes"
path = /obj/item/clothing/shoes/craftable
Expand Down
83 changes: 83 additions & 0 deletions mods/content/fantasy/items/clothing/mask.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/obj/item/clothing/mask/ghost_caul
name = "mask"
abstract_type = /obj/item/clothing/mask/ghost_caul
desc = "A smooth-surfaced, somewhat eerie mask."
icon = 'mods/content/fantasy/icons/clothing/ghost_caul.dmi'
material = /decl/material/solid/organic/bone
material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC
//default_action_type = /datum/action/item_action/wyrdling // TODO use animal icon instead of mask

var/const/preview_offset = 28
var/transformation_trait
var/mob/living/transformation_mob_type

/obj/item/clothing/mask/ghost_caul/get_preview_screen_locs()
var/static/list/override_preview_screen_locs = list(
"1" = "character_preview_map:1,4:36",
"2" = "character_preview_map:1,3:31",
"4" = "character_preview_map:1,2:26",
"8" = "character_preview_map:1,1:21"
)
return override_preview_screen_locs

// Used to provide wyrdling mob preview.
/obj/item/clothing/mask/ghost_caul/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing)
if(overlay && (istype(user_mob, /mob/living/human/dummy) || istype(loc, /mob/living/human/dummy)))
var/mutable_appearance/faux = new /mutable_appearance(transformation_mob_type)
faux.pixel_x = preview_offset
faux.appearance_flags |= (RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM)
overlay.overlays += faux
. = ..()

/obj/item/clothing/mask/ghost_caul/dropped(mob/user, play_dropsound = TRUE)
. = ..()
action_button_name = null
if(action)
if(isliving(user))
var/mob/living/user_living = user
user_living.actions -= action
QDEL_NULL(action)

/obj/item/clothing/mask/ghost_caul/equipped(mob/user)
. = ..()
if(!isliving(user))
return
var/mob/living/user_living = user
if(user_living.get_equipped_slot_for_item(src) == slot_wear_mask_str && user_living.has_trait(/decl/trait/wyrd/wild))
action_button_name = "Veer"
else if(action)
action_button_name = null
user_living.actions -= action
QDEL_NULL(action)
user_living.update_action_buttons()

/obj/item/clothing/mask/ghost_caul/attack_self(mob/user)
var/mob/living/user_living = user
if(!istype(user_living) || !user_living.has_trait(/decl/trait/wyrd/wild) || user.get_equipped_slot_for_item(src) != slot_wear_mask_str)
return ..()
if(!user_living.has_trait(transformation_trait))
to_chat(user, SPAN_WARNING("\The [src] is not aligned with your wyrd, and you cannot use it to transform."))
return TRUE
// TODO
to_chat(user, SPAN_WARNING("You attempt to veer into your [transformation_mob_type::name] semblance, but find yourself strangely unable."))
return TRUE

/obj/item/clothing/mask/ghost_caul/fox
name = "fox mask"
transformation_trait = /decl/trait/wyrd/wild/animal_form/fox
transformation_mob_type = /mob/living/simple_animal/passive/fox

/obj/item/clothing/mask/ghost_caul/deer
name = "deer mask"
transformation_trait = /decl/trait/wyrd/wild/animal_form/deer
transformation_mob_type = /mob/living/simple_animal/passive/deer

/obj/item/clothing/mask/ghost_caul/rabbit
name = "rabbit mask"
transformation_trait = /decl/trait/wyrd/wild/animal_form/rabbit
transformation_mob_type = /mob/living/simple_animal/passive/rabbit

/obj/item/clothing/mask/ghost_caul/bear
name = "bear mask"
transformation_trait = /decl/trait/wyrd/wild/animal_form/bear
transformation_mob_type = /mob/living/simple_animal/hostile/bear

0 comments on commit 627bab1

Please sign in to comment.