From 791e259f637e8d718965c43afb339bc46c2d109b Mon Sep 17 00:00:00 2001 From: SatinIsle Date: Fri, 6 Sep 2024 12:20:47 +0100 Subject: [PATCH] Hanner Whitelist Species Added a new whitelist species, the Hanner. These are the half-offspring of Lleill and share a small number of their abilities. Notably, they are shapeshifters, can drain energy from consenting people, can do basic alchemy and can transform into beasts. Added the beast form ability to Lleill and Hanner, allowing them to turn into a small selection of simple mobs. Changed lleill_energy and lleill_energy_max to be a base species variable rather than lleill species, allowing those abilities to be granted to other characters by GMs. Added a small chance of finding potion materials in maint loot (pretty rare), to allow a little more consistent use of the alchemy ability for lleill, rather than relying on redgates alone. --- code/__defines/mobs_vr.dm | 1 + code/game/objects/random/maintenance.dm | 3 +- code/game/objects/random/misc_vr.dm | 35 ++++ .../living/carbon/human/human_species_vr.dm | 3 + .../carbon/human/species/lleill/hanner.dm | 98 +++++++++ .../carbon/human/species/lleill/lleill.dm | 6 +- .../human/species/lleill/lleill_abilities.dm | 193 ++++++++++++++---- .../living/carbon/human/species/species_vr.dm | 5 + .../new_player/sprite_accessories_ear_vr.dm | 4 +- .../new_player/sprite_accessories_tail_vr.dm | 2 +- .../mob/new_player/sprite_accessories_vr.dm | 8 +- .../new_player/sprite_accessories_wing_vr.dm | 2 +- vorestation.dme | 1 + 13 files changed, 310 insertions(+), 51 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/species/lleill/hanner.dm diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index ae87b1c624e..1d6ecb049d5 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -36,6 +36,7 @@ #define SPECIES_CUSTOM "Custom Species" #define SPECIES_TAJARAN "Tajara" #define SPECIES_LLEILL "Lleill" +#define SPECIES_HANNER "Hanner" //monkey species #define SPECIES_MONKEY_AKULA "Sobaka" #define SPECIES_MONKEY_NEVREAN "Sparra" diff --git a/code/game/objects/random/maintenance.dm b/code/game/objects/random/maintenance.dm index 5f8c18a0af3..1d52205ed0e 100644 --- a/code/game/objects/random/maintenance.dm +++ b/code/game/objects/random/maintenance.dm @@ -116,7 +116,8 @@ something, make sure it's not in one of the other lists.*/ prob(1);/obj/item/pizzavoucher, prob(5);/obj/item/weapon/material/fishing_net/butterfly_net, prob(2);/obj/item/weapon/cracker, - prob(5);/obj/random/mega_nukies + prob(5);/obj/random/mega_nukies, + prob(1);/obj/random/potion_ingredient/plus /* VOREStation Edit End */ ) diff --git a/code/game/objects/random/misc_vr.dm b/code/game/objects/random/misc_vr.dm index b1781eb66ef..f8554a4f4ff 100644 --- a/code/game/objects/random/misc_vr.dm +++ b/code/game/objects/random/misc_vr.dm @@ -298,6 +298,41 @@ prob(1);/obj/item/weapon/potion_material/folded_dark ) +/obj/random/potion_ingredient/plus + name = "random better potion ingredient" + desc = "A random potion." + icon_state = "ingredient_plus" + spawn_nothing_percentage = 0 + +/obj/random/potion_ingredient/plus/item_to_spawn() + return pick(prob(20);/obj/item/weapon/potion_material/blood_ruby, + prob(4);/obj/item/weapon/potion_material/ruby_eye, + prob(20);/obj/item/weapon/potion_material/golden_scale, + prob(20);/obj/item/weapon/potion_material/frozen_dew, + prob(20);/obj/item/weapon/potion_material/living_coral, + prob(8);/obj/item/weapon/potion_material/rare_horn, + prob(10);/obj/item/weapon/potion_material/moldy_bread, + prob(10);/obj/item/weapon/potion_material/glowing_gem, + prob(10);/obj/item/weapon/potion_material/giant_toe, + prob(4);/obj/item/weapon/potion_material/flesh_of_the_stars, + prob(4);/obj/item/weapon/potion_material/spinning_poppy, + prob(4);/obj/item/weapon/potion_material/salt_mage, + prob(20);/obj/item/weapon/potion_material/golden_grapes, + prob(10);/obj/item/weapon/potion_material/fairy_house, + prob(10);/obj/item/weapon/potion_material/thorny_bulb, + prob(10);/obj/item/weapon/potion_material/ancient_egg, + prob(10);/obj/item/weapon/potion_material/crown_stem, + prob(4);/obj/item/weapon/potion_material/red_ingot, + prob(4);/obj/item/weapon/potion_material/soft_diamond, + prob(4);/obj/item/weapon/potion_material/solid_mist, + prob(2);/obj/item/weapon/potion_material/spider_leg, + prob(2);/obj/item/weapon/potion_material/folded_dark, + prob(1);/obj/item/weapon/potion_material/glamour_transparent, + prob(1);/obj/item/weapon/potion_material/glamour_shrinking, + prob(1);/obj/item/weapon/potion_material/glamour_twinkling, + prob(1);/obj/item/weapon/potion_material/glamour_shard + ) + /obj/random/potion_base name = "random potion base" desc = "A random potion base." diff --git a/code/modules/mob/living/carbon/human/human_species_vr.dm b/code/modules/mob/living/carbon/human/human_species_vr.dm index dd3134420a6..d1d5bdab118 100644 --- a/code/modules/mob/living/carbon/human/human_species_vr.dm +++ b/code/modules/mob/living/carbon/human/human_species_vr.dm @@ -34,3 +34,6 @@ /mob/living/carbon/human/lleill/New(var/new_loc) ..(new_loc, SPECIES_LLEILL) + +/mob/living/carbon/human/hanner/New(var/new_loc) + ..(new_loc, SPECIES_HANNER) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm new file mode 100644 index 00000000000..40d0f89cd20 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm @@ -0,0 +1,98 @@ +/datum/species/shapeshifter/hanner + + name = SPECIES_HANNER + name_plural = "Hanner" + blurb = "Hanner are a sub-species of almost any other sapient species, \ + they are the offspring of one Lleill and any other non-lleill species. They are natural born fleshy \ + shapeshifters, able to take the appearance of almost any humanoid form. Hanner also have some limited \ + transmutation and energy sharing abilities not unlike they lleill, but considerably more limited. Unlike \ + other shapeshifter species, such as proteans or prometheans, Hanner have a typical humanoid set of organs and can not regenerate." + + flags = NO_SCAN + color_mult = 1 + appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE + health_hud_intensity = 2 + num_alternate_languages = 3 + language = LANGUAGE_LLEILL + species_language = LANGUAGE_LLEILL + secondary_langs = list(LANGUAGE_LLEILL, LANGUAGE_SOL_COMMON) // For some reason, having this as their species language does not allow it to be chosen. + + min_age = 18 + max_age = 200 + + //Specific abilities + + burn_mod = 0.8 //Slightly resistant to fire + pain_mod = 0.8 //Whilst not resistant to brute or stunning, they are slightly resistant to pain. + + hazard_high_pressure = HAZARD_HIGH_PRESSURE + 700 // Dangerously high pressure. + warning_high_pressure = WARNING_HIGH_PRESSURE + 700 // High pressure warning. + warning_low_pressure = 100 // Low pressure warning. + hazard_low_pressure = 50 // Dangerously low pressure. + + minimum_breath_pressure = 0 //Doesn't gasp and lungs shouldn't pop + + cold_level_1 = 150 //Adapt well to temperature changes + cold_level_2 = 100 + cold_level_3 = 50 + + heat_level_1 = 500 //quite resiliant to heat + heat_level_2 = 600 + heat_level_3 = 700 + + chem_strength_alcohol = 0.8 //Handle alcohol slightly better + + metabolic_rate = 0.4 //Major downside of the Hanner, they metabolise drugs much slower, meaning that they are difficult to treat with medicine alone. + bloodloss_rate = 1.2 //They bleed out faster too + + lleill_energy = 100 + lleill_energy_max = 100 + + genders = list(MALE, FEMALE, NEUTER, PLURAL) + + has_organ = list( + O_HEART = /obj/item/organ/internal/heart, + O_LUNGS = /obj/item/organ/internal/lungs, + O_VOICE = /obj/item/organ/internal/voicebox, + O_LIVER = /obj/item/organ/internal/liver, + O_KIDNEYS = /obj/item/organ/internal/kidneys, + O_BRAIN = /obj/item/organ/internal/brain, + O_APPENDIX = /obj/item/organ/internal/appendix, + O_SPLEEN = /obj/item/organ/internal/spleen, + O_EYES = /obj/item/organ/internal/eyes, + O_STOMACH = /obj/item/organ/internal/stomach, + O_INTESTINE = /obj/item/organ/internal/intestine + ) + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + + inherent_verbs = list( + /mob/living/carbon/human/proc/shapeshifter_select_shape, + /mob/living/carbon/human/proc/shapeshifter_select_colour, + /mob/living/carbon/human/proc/shapeshifter_select_hair, + /mob/living/carbon/human/proc/shapeshifter_select_hair_colors, + /mob/living/carbon/human/proc/shapeshifter_select_gender, + /mob/living/carbon/human/proc/shapeshifter_select_wings, + /mob/living/carbon/human/proc/shapeshifter_select_tail, + /mob/living/carbon/human/proc/shapeshifter_select_ears, + /mob/living/proc/set_size, + /mob/living/carbon/human/proc/lleill_contact, + /mob/living/carbon/human/proc/lleill_alchemy, + /mob/living/carbon/human/proc/lleill_beast_form + ) + + valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ALTEVIAN, SPECIES_TESHARI, SPECIES_MONKEY, SPECIES_LLEILL, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_RAPALA, SPECIES_NEVREAN, SPECIES_VASILISSAN, SPECIES_AKULA) + diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm index 5ead8ebb51d..b03c32d00f9 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm @@ -33,9 +33,6 @@ //Specific abilities - var/lleill_energy = 200 - var/lleill_energy_max = 200 - var/ring_cooldown = 0 darksight = 10 //Can see in dark @@ -90,7 +87,8 @@ /mob/living/carbon/human/proc/lleill_transmute, /mob/living/carbon/human/proc/lleill_rings, /mob/living/carbon/human/proc/lleill_contact, - /mob/living/carbon/human/proc/lleill_alchemy) + /mob/living/carbon/human/proc/lleill_alchemy, + /mob/living/carbon/human/proc/lleill_beast_form) //organs, going with just the basics for now diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm index c2f816e9dab..833f19b0182 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm @@ -15,25 +15,19 @@ var/energy_cost = 75 - var/datum/species/lleill/LL = species - - if(!istype(LL)) - to_chat(src, "Only a lleill can use that!") - return - if(stat) to_chat(src, "You can't go invisible when weakened like this.") return if(!cloaked) - if(LL.lleill_energy < energy_cost) + if(species.lleill_energy < energy_cost) to_chat(src, "You do not have enough energy to do that!") return cloak() block_hud = 1 hud_updateflag = 1 to_chat(src, "Your fur shimmers and shifts around you, hiding you from the naked eye.") - LL.lleill_energy -= energy_cost + species.lleill_energy -= energy_cost else uncloak() block_hud = 0 @@ -115,13 +109,7 @@ var/energy_cost = 50 - var/datum/species/lleill/LL = species - - if(!istype(LL)) - to_chat(src, "Only a lleill can use that!") - return - - if(LL.lleill_energy < energy_cost) + if(species.lleill_energy < energy_cost) to_chat(src, "You do not have enough energy to do that!") return @@ -155,7 +143,7 @@ var/spawnloc = get_turf(usr) var/obj/item/N = new transmute_product(spawnloc) put_in_active_hand(N) - LL.lleill_energy -= energy_cost + species.lleill_energy -= energy_cost /mob/living/carbon/human/proc/lleill_rings() set name = "Place/Use Rings" @@ -166,22 +154,17 @@ var/energy_cost_spawn = (25 * energy_cost_multi) var/energy_cost_tele = 50 - var/datum/species/lleill/LL = species - - if(!istype(LL)) - to_chat(src, "Only a lleill can use that!") - return if(stat) to_chat(src, "You can't go do that when weakened like this.") return if(buckled) to_chat(src,"You can't do that when restrained.") - var/r_action = tgui_alert(src, "What would you like to do with your rings? You currently have [LL.lleill_energy] energy remaining.", "Actions", list("Spawn New Ring ([energy_cost_spawn])", "Teleport to Ring ([energy_cost_tele])", "Cancel")) + var/r_action = tgui_alert(src, "What would you like to do with your rings? You currently have [species.lleill_energy] energy remaining.", "Actions", list("Spawn New Ring ([energy_cost_spawn])", "Teleport to Ring ([energy_cost_tele])", "Cancel")) if(!r_action || r_action == "Cancel") return if(findtext(r_action,"Spawn New Ring")) - if(LL.lleill_energy < energy_cost_spawn) + if(species.lleill_energy < energy_cost_spawn) to_chat(src, "You do not have enough energy to do that!") return if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) @@ -192,9 +175,9 @@ var/obj/structure/glamour_ring/R = new(spawnloc) R.connected_mob = src src.teleporters |= R - LL.lleill_energy -= energy_cost_spawn + species.lleill_energy -= energy_cost_spawn if(findtext(r_action,"Teleport to Ring")) - if(LL.lleill_energy < energy_cost_tele) + if(species.lleill_energy < energy_cost_tele) to_chat(src, "You do not have enough energy to do that!") return if(!src.teleporters.len) @@ -214,7 +197,7 @@ var/S = get_turf(R) src.forceMove(S) - LL.lleill_energy -= energy_cost_tele + species.lleill_energy -= energy_cost_tele spk.start() playsound(S, 'sound/effects/phasein.ogg', 25, 1) @@ -238,7 +221,6 @@ set category = "Abilities" if(!ishuman(src)) return //If you're not a human you don't have permission to do this. - var/datum/species/lleill/LL = species var/list/contact_options = list( "Kiss (lips)", @@ -252,9 +234,6 @@ "Custom" ) - if(!istype(LL)) - to_chat(src, "Only a lleill can use that!") - return if(stat) to_chat(src, "You can't go do that when weakened like this.") return @@ -313,7 +292,7 @@ else src.visible_message("\The [src] and \the [chosen_target] break contact before energy has been transferred.") src.visible_message("\The [src] and \the [chosen_target] complete their contact.") - LL.lleill_energy = LL.lleill_energy_max + species.lleill_energy = species.lleill_energy_max nutrition += (chosen_target.nutrition / 2) to_chat(src, "You feel revitalised.") chosen_target.tiredness += 70 @@ -329,13 +308,8 @@ var/energy_cost = 25 - var/datum/species/lleill/LL = species - if(!istype(LL)) - to_chat(src, "Only a lleill can use that!") - return - - if(LL.lleill_energy < energy_cost) + if(species.lleill_energy < energy_cost) to_chat(src, "You do not have enough energy to do that!") return @@ -367,4 +341,147 @@ var/spawnloc = get_turf(usr) var/obj/item/N = new transmute_product(spawnloc) put_in_active_hand(N) - LL.lleill_energy -= energy_cost + species.lleill_energy -= energy_cost + +/mob/living/carbon/human/proc/lleill_beast_form() + set name = "Beast Form (100)" + set desc = "Take the form of a non-humanoid creature." + set category = "Abilities" + if(!ishuman(src)) + return //If you're not a human you don't have permission to do this. + + var/energy_cost = 100 + + if(species.lleill_energy < energy_cost) + to_chat(src, "You do not have enough energy to do that!") + return + + var/list/beast_options = list("Rabbit" = /mob/living/simple_mob/vore/rabbit, + "Red Panda" = /mob/living/simple_mob/vore/redpanda, + "Fennec" = /mob/living/simple_mob/vore/fennec, + "Giant Frog" = /mob/living/simple_mob/vore/aggressive/frog, + "Giant Rat" = /mob/living/simple_mob/vore/aggressive/rat, + "Wolf" = /mob/living/simple_mob/vore/wolf, + "Panther" = /mob/living/simple_mob/vore/aggressive/panther, + "Giant Snake" = /mob/living/simple_mob/vore/aggressive/giant_snake, + "Otie" = /mob/living/simple_mob/vore/otie, + "Squirrel" = /mob/living/simple_mob/vore/squirrel, + "Raptor" = /mob/living/simple_mob/vore/raptor, + "Giant Bat" = /mob/living/simple_mob/vore/bat, + "Horse" = /mob/living/simple_mob/vore/horse, + "Horse (Big)" = /mob/living/simple_mob/vore/horse/big, + "Kelpie" = /mob/living/simple_mob/vore/horse/kelpie + ) + + var/chosen_beast = tgui_input_list(src, "Which form would you like to take?", "Choose Beast Form", beast_options) + + if(!chosen_beast) + return + + if(species.lleill_energy < energy_cost) + to_chat(src, "You do not have enough energy to do that!") + return + + var/mob/living/M = src + log_debug("polymorph start") + if(!istype(M)) + log_debug("polymorph istype") + return + + visible_message("\The [src] begins significantly shifting their form.") + if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + visible_message("\The [src] ceases shifting their form.") + return 0 + + + + log_debug("polymorph else") + if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird. + log_debug("polymorph dead") + return + + var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation") + coolanimation.plane = PLANE_LIGHTING_ABOVE + src.overlays += coolanimation + spawn(14) + src.overlays -= coolanimation + + log_debug("polymorph not dead") + var/mob/living/new_mob = spawn_beast_mob(beast_options[chosen_beast]) + new_mob.faction = M.faction + + if(new_mob && isliving(new_mob)) + species.lleill_energy -= energy_cost + log_debug("polymorph new_mob") + for(var/obj/belly/B as anything in new_mob.vore_organs) + log_debug("polymorph new_mob belly") + new_mob.vore_organs -= B + qdel(B) + new_mob.vore_organs = list() + new_mob.name = M.name + new_mob.real_name = M.real_name + new_mob.verbs |= /mob/living/proc/revert_beast_form + for(var/lang in M.languages) + new_mob.languages |= lang + M.copy_vore_prefs_to_mob(new_mob) + new_mob.vore_selected = M.vore_selected + if(ishuman(M)) + log_debug("polymorph ishuman part2") + var/mob/living/carbon/human/H = M + if(ishuman(new_mob)) + log_debug("polymorph ishuman(newmob)") + var/mob/living/carbon/human/N = new_mob + N.gender = H.gender + N.identifying_gender = H.identifying_gender + else + log_debug("polymorph gender else") + new_mob.gender = H.gender + else + log_debug("polymorph gender else 2") + new_mob.gender = M.gender + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.identifying_gender = M.gender + + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = new_mob + B.forceMove(new_mob) + B.owner = new_mob + M.vore_organs -= B + new_mob.vore_organs += B + + new_mob.ckey = M.ckey + if(M.ai_holder && new_mob.ai_holder) + var/datum/ai_holder/old_AI = M.ai_holder + old_AI.set_stance(STANCE_SLEEP) + var/datum/ai_holder/new_AI = new_mob.ai_holder + new_AI.hostile = old_AI.hostile + new_AI.retaliate = old_AI.retaliate + M.loc = new_mob + M.forceMove(new_mob) + new_mob.tf_mob_holder = M + new_mob.visible_message("\The [src] has transformed into \the [new_mob]!") + + +/mob/living/carbon/human/proc/spawn_beast_mob(var/chosen_beast) + log_debug("polymorph proc spawn mob") + var/tf_type = chosen_beast + log_debug("polymorph [tf_type]") + if(!ispath(tf_type)) + log_debug("polymorph tf_type fail") + return + log_debug("polymorph tf_type pass") + var/new_mob = new tf_type(get_turf(src)) + return new_mob + +/mob/living/proc/revert_beast_form() + set name = "Revert Beast Form" + set desc = "Return to your humanoid form." + set category = "Abilities" + + visible_message("\The [src] begins significantly shifting their form.") + if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + visible_message("\The [src] ceases shifting their form.") + return 0 + visible_message("\The [src] has reverted to their original form.") + revert_mob_tf() diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index f6bf1a7a88b..0cdd2713362 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -45,6 +45,11 @@ var/list/food_preference = list() //RS edit var/food_preference_bonus = 0 + + // For Lleill and Hanner + var/lleill_energy = 200 + var/lleill_energy_max = 200 + /datum/species/unathi vore_belly_default_variant = "L" diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index afb8652050a..67cfbed5eb1 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -9,7 +9,7 @@ name = "You should not see this..." icon = 'icons/mob/vore/ears_vr.dmi' do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 // Species-unique ears @@ -38,7 +38,7 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY extra_overlay = "lleill-antlers" - species_allowed = list(SPECIES_LLEILL) + species_allowed = list(SPECIES_LLEILL, SPECIES_HANNER) /datum/sprite_accessory/ears/lleill/curled name = "Lleill Ears Curled, colorable" diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index e38e7a501db..3b6dd83b6cb 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -13,7 +13,7 @@ var/mob_offset_x = 0 var/mob_offset_y = 0 do_colouration = 0 //Set to 1 to enable coloration using the tail color. - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use var/list/lower_layer_dirs = list(SOUTH) var/icon_loaf = null diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index ac03b0692d4..51a87583843 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -6,7 +6,7 @@ /datum/sprite_accessory/hair - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use the default hairstyles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use the default hairstyles. /datum/sprite_accessory/hair/astolfo name = "Astolfo" @@ -485,20 +485,20 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/human_face_or_vr.dmi' color_blend_mode = ICON_MULTIPLY - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use the facial hair styles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use the facial hair styles. /datum/sprite_accessory/facial_hair/shaved name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This needed to be manually defined, apparantly. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This needed to be manually defined, apparantly. /datum/sprite_accessory/facial_hair/neck_fluff name = "Neck Fluff" icon = 'icons/mob/human_face_or_vr.dmi' icon_state = "facial_neckfluff" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) /datum/sprite_accessory/facial_hair/vulp_none name = "None" diff --git a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm index 2ee4d148d74..61195e04879 100644 --- a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm @@ -9,7 +9,7 @@ name = "You should not see this..." icon = 'icons/mob/vore/wings_vr.dmi' do_colouration = 0 //Set to 1 to enable coloration using the tail color. - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 var/wing_offset = 0 var/multi_dir = FALSE // Does it use different sprites at different layers? _front will be added for sprites on low layer, _back to high layer diff --git a/vorestation.dme b/vorestation.dme index 097e8d717d1..99fbc8e8d50 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2964,6 +2964,7 @@ #include "code\modules\mob\living\carbon\human\species\species_shapeshift.dm" #include "code\modules\mob\living\carbon\human\species\species_shapeshift_vr.dm" #include "code\modules\mob\living\carbon\human\species\species_vr.dm" +#include "code\modules\mob\living\carbon\human\species\lleill\hanner.dm" #include "code\modules\mob\living\carbon\human\species\lleill\lleill.dm" #include "code\modules\mob\living\carbon\human\species\lleill\lleill_abilities.dm" #include "code\modules\mob\living\carbon\human\species\lleill\lleill_items.dm"