[MIRROR] [Ready] Hanner Species (#8923)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: Kashargul <KashL@t-online.de>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2
2024-09-11 00:39:52 -07:00
committed by GitHub
parent 8d029978d1
commit eb4f254c80
23 changed files with 703 additions and 60 deletions

View File

@@ -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"

View File

@@ -1,2 +1,3 @@
#define ui_shadekin_display "EAST-1:28,CENTER-3:15"
#define ui_lleill_display "EAST-1:28,CENTER-3:15"
#define ui_xenochimera_danger_display "EAST-1:28,CENTER-3:15"

View File

@@ -331,6 +331,11 @@
xenochimera_danger_display.screen_loc = ui_xenochimera_danger_display
xenochimera_danger_display.icon_state = "danger00"
hud_elements |= xenochimera_danger_display
lleill_display = new /obj/screen/lleill()
lleill_display.screen_loc = ui_lleill_display
lleill_display.icon_state = "lleill"
hud_elements |= lleill_display
//VOREStation Addition end
ling_chem_display = new /obj/screen/ling/chems()

View File

@@ -19,6 +19,10 @@
var/mob/living/carbon/human/H = usr
if(istype(H) && istype(H.species, /datum/species/shadekin))
to_chat(usr,"<span class='notice'><b>Energy:</b> [H.shadekin_get_energy(H)]</span>")
if("glamour")
var/mob/living/carbon/human/H = usr
if(istype(H))
to_chat(usr,"<span class='notice'><b>Energy:</b> [H.species.lleill_energy]/[H.species.lleill_energy_max]</span>")
if("danger level")
var/mob/living/carbon/human/H = usr
if(istype(H) && istype(H.species, /datum/species/xenochimera))
@@ -60,7 +64,7 @@
to_chat(usr, "<span class='notice'>We are currently reviving, and will be done in [round((H.revive_finished - world.time) / 10)] seconds, or [round(((H.revive_finished - world.time) * 0.1) / 60)] minutes.</span>")
else if(H.revive_ready == REVIVING_DONE)
to_chat(usr, "<span class='warning'>You should have a notification + alert for this! Bug report that this is still here!</span>")
if("Ready to Hatch") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
var/mob/living/carbon/human/H = usr
if(istype(H) && istype(H.species, /datum/species/xenochimera)) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.

View File

@@ -117,7 +117,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 */
)

View File

@@ -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."

View File

@@ -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)

View File

@@ -0,0 +1,132 @@
/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/hanner_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)
var/list/lleill_abilities = list(/datum/power/lleill/contact,
/datum/power/lleill/alchemy,
/datum/power/lleill/beastform_hanner)
var/list/lleill_ability_datums = list()
/datum/species/shapeshifter/hanner/New()
..()
for(var/power in lleill_abilities)
var/datum/power/lleill/LP = new power(src)
lleill_ability_datums.Add(LP)
/datum/species/shapeshifter/hanner/proc/add_lleill_abilities(var/mob/living/carbon/human/H)
if(!H.ability_master || !istype(H.ability_master, /obj/screen/movable/ability_master/lleill))
H.ability_master = null
H.ability_master = new /obj/screen/movable/ability_master/lleill(H)
for(var/datum/power/lleill/P in lleill_ability_datums)
if(!(P.verbpath in H.verbs))
H.verbs += P.verbpath
H.ability_master.add_lleill_ability(
object_given = H,
verb_given = P.verbpath,
name_given = P.name,
ability_icon_given = P.ability_icon_state,
arguments = list()
)
spawn (50)
if(H.lleill_display)
H.lleill_display.invisibility = 0
H.lleill_display.icon_state = "lleill-4"
/datum/species/shapeshifter/hanner/add_inherent_verbs(var/mob/living/carbon/human/H)
..()
add_lleill_abilities(H)

View File

@@ -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
@@ -86,11 +83,13 @@
/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_invisibility,
/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_invisibility,
// /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_beast_form
)
//organs, going with just the basics for now
@@ -124,6 +123,15 @@
base_species = SPECIES_LLEILL
var/list/lleill_abilities = list(/datum/power/lleill/invisibility,
/datum/power/lleill/transmute,
/datum/power/lleill/rings,
/datum/power/lleill/contact,
/datum/power/lleill/alchemy,
/datum/power/lleill/beastform)
var/list/lleill_ability_datums = list()
// Shapeshifters have some behaviour that doesn't play well with this species so I have taken the main parts needed for here.
/datum/species/lleill/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H)
@@ -185,3 +193,50 @@
if(!S || S.name == src.name)
return ..()
return S?.get_tail_hair(H)
/datum/species/lleill/New()
..()
for(var/power in lleill_abilities)
var/datum/power/lleill/LP = new power(src)
lleill_ability_datums.Add(LP)
/datum/species/lleill/proc/add_lleill_abilities(var/mob/living/carbon/human/H)
if(!H.ability_master || !istype(H.ability_master, /obj/screen/movable/ability_master/lleill))
H.ability_master = null
H.ability_master = new /obj/screen/movable/ability_master/lleill(H)
for(var/datum/power/lleill/P in lleill_ability_datums)
if(!(P.verbpath in H.verbs))
H.verbs += P.verbpath
H.ability_master.add_lleill_ability(
object_given = H,
verb_given = P.verbpath,
name_given = P.name,
ability_icon_given = P.ability_icon_state,
arguments = list()
)
spawn (50)
if(H.lleill_display)
H.lleill_display.invisibility = 0
H.lleill_display.icon_state = "lleill-4"
/datum/species/proc/update_lleill_hud(var/mob/living/carbon/human/H)
var/relative_energy = ((lleill_energy/lleill_energy_max)*100)
if(H.lleill_display)
H.lleill_display.invisibility = 0
switch(relative_energy)
if(0 to 24)
H.lleill_display.icon_state = "lleill-0"
if(25 to 49)
H.lleill_display.icon_state = "lleill-1"
if(50 to 74)
H.lleill_display.icon_state = "lleill-2"
if(75 to 99)
H.lleill_display.icon_state = "lleill-3"
if(100 to INFINITY)
H.lleill_display.icon_state = "lleill-4"
return
/datum/species/lleill/add_inherent_verbs(var/mob/living/carbon/human/H)
..()
add_lleill_abilities(H)

View File

@@ -4,9 +4,10 @@
// Essentially the same as traitor cloaking, using the same proc for it.
/datum/power/lleill/invisibility
name = "Invisibility"
name = "Invisibility (75)"
desc = "Change your appearance to match your surroundings, becoming completely invisible to the naked eye."
verbpath = /mob/living/carbon/human/proc/lleill_invisibility
ability_icon_state = "ling_camoflage"
/mob/living/carbon/human/proc/lleill_invisibility()
set name = "Invisibility (75)"
@@ -15,30 +16,25 @@
var/energy_cost = 75
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't go invisible when weakened like this.</span>")
return
if(!cloaked)
if(LL.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
return
cloak()
block_hud = 1
hud_updateflag = 1
to_chat(src, "<span class='warning'>Your fur shimmers and shifts around you, hiding you from the naked eye.</span>")
LL.lleill_energy -= energy_cost
species.lleill_energy -= energy_cost
else
uncloak()
block_hud = 0
hud_updateflag = 1
to_chat(src, "<span class='warning'>The brustling of your fur settles down and you become visible once again.</span>")
species.update_lleill_hud(src)
/mob/living/carbon/human/proc/lleill_select_shape()
@@ -96,6 +92,12 @@
regenerate_icons()
/datum/power/lleill/transmute
name = "Transmute Object (50)"
desc = "Convert an object into a piece of glamour."
verbpath = /mob/living/carbon/human/proc/lleill_transmute
ability_icon_state = "lleill_transmute"
/mob/living/carbon/human/proc/lleill_transmute()
set name = "Transmute Object (50)"
set desc = "Convert an object into a piece of glamour."
@@ -115,14 +117,8 @@
var/energy_cost = 50
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(LL.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
return
if(stat)
@@ -155,7 +151,14 @@
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
species.update_lleill_hud(src)
/datum/power/lleill/rings
name = "Glamour Rings"
desc = "Place or teleport to a glamour ring."
verbpath = /mob/living/carbon/human/proc/lleill_rings
ability_icon_state = "lleill_ring"
/mob/living/carbon/human/proc/lleill_rings()
set name = "Place/Use Rings"
@@ -166,22 +169,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, "<span class='warning'>Only a lleill can use that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't go do that when weakened like this.</span>")
return
if(buckled)
to_chat(src,"<span class='warning'>You can't do that when restrained.</span>")
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, "<span class='warning'>You do not have enough energy to do that!</span>")
return
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
@@ -192,9 +190,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, "<span class='warning'>You do not have enough energy to do that!</span>")
return
if(!src.teleporters.len)
@@ -214,7 +212,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)
@@ -231,6 +229,13 @@
if(M.devourable && M.can_be_drop_prey)
M.forceMove(vore_selected)
to_chat(M,"<span class='vwarning'>In a bright flash of white light, you suddenly find yourself trapped in \the [src]'s [vore_selected.name]!</span>")
species.update_lleill_hud(src)
/datum/power/lleill/contact
name = "Energy Transfer"
desc = "Take the energy of another creature by making physical contact with them, the other party must consent. This will make them feel drained."
verbpath = /mob/living/carbon/human/proc/lleill_contact
ability_icon_state = "lleill_contact"
/mob/living/carbon/human/proc/lleill_contact()
set name = "Energy Transfer"
@@ -238,7 +243,6 @@
set category = "Abilities.Lleill" //CHOMPEdit
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 +256,6 @@
"Custom"
)
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(stat)
to_chat(src, "<span class='warning'>You can't go do that when weakened like this.</span>")
return
@@ -313,7 +314,7 @@
else
src.visible_message("<b>\The [src]</b> and \the [chosen_target] break contact before energy has been transferred.")
src.visible_message("<b>\The [src]</b> 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, "<span class='warning'>You feel revitalised.</span>")
chosen_target.tiredness += 70
@@ -321,6 +322,13 @@
chosen_target.remove_blood(40) //removes enough blood to make them feel a bit woozy, mostly just for flavour
chosen_target.eye_blurry += 20
to_chat(chosen_target, "<span class='warning'>You feel considerably weakened for the moment.</span>")
species.update_lleill_hud(src)
/datum/power/lleill/alchemy
name = "Alchemy (25)"
desc = "Convert a potion material into a potion without the use of a base or alembic."
verbpath = /mob/living/carbon/human/proc/lleill_alchemy
ability_icon_state = "lleill_alchemy"
/mob/living/carbon/human/proc/lleill_alchemy()
set name = "Alchemy (25)"
@@ -329,14 +337,9 @@
var/energy_cost = 25
var/datum/species/lleill/LL = species
if(!istype(LL))
to_chat(src, "<span class='warning'>Only a lleill can use that!</span>")
return
if(LL.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that!</span>")
if(species.lleill_energy < energy_cost)
to_chat(src, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
return
if(stat)
@@ -367,4 +370,332 @@
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
species.update_lleill_hud(src)
/datum/power/lleill/beastform
name = "Beast Form (100)"
desc = "Take the form of a non-humanoid creature."
verbpath = /mob/living/carbon/human/proc/lleill_beast_form
ability_icon_state = "lleill_beast"
/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.Lleill" //CHOMPEdit
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, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
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,
"Dire Wolf" = /mob/living/simple_mob/vore/wolf/direwolf,
"Fox" = /mob/living/simple_mob/animal/passive/fox/beastmode,
"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,
"Bear" = /mob/living/simple_mob/animal/space/bear/brown/beastmode,
"Seagull" = /mob/living/simple_mob/vore/seagull,
"Sheep" = /mob/living/simple_mob/vore/sheep,
"Azure Tit" = /mob/living/simple_mob/animal/passive/bird/azure_tit/beastmode,
"Robin" = /mob/living/simple_mob/animal/passive/bird/european_robin/beastmode,
"Cat" = /mob/living/simple_mob/animal/passive/cat/black/beastmode,
"Tamaskan Dog" = /mob/living/simple_mob/animal/passive/dog/tamaskan,
"Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
"Bull Terrier" = /mob/living/simple_mob/animal/passive/dog/bullterrier,
"Duck" = /mob/living/simple_mob/animal/sif/duck,
"Cow" = /mob/living/simple_mob/animal/passive/cow,
"Chicken" = /mob/living/simple_mob/animal/passive/chicken,
"Goat" = /mob/living/simple_mob/animal/goat,
"Penguin" = /mob/living/simple_mob/animal/passive/penguin,
"Goose" = /mob/living/simple_mob/animal/space/goose
)
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, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
return
var/mob/living/M = src
log_debug("polymorph start")
if(!istype(M))
log_debug("polymorph istype")
return
if(M.stat) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
log_debug("polymorph stat")
to_chat(src, "<span class='warning'>You can't do that in your condition.</span>")
return
if(M.health <= 10) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
log_debug("polymorph injured")
to_chat(src, "<span class='warning'>You are too injured to transform into a beast.</span>")
return
visible_message("<b>\The [src]</b> begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("<b>\The [src]</b> ceases shifting their form.")
return 0
var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation")
coolanimation.plane = PLANE_LIGHTING_ABOVE
src.overlays += coolanimation
spawn(10)
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
new_mob.verbs |= /mob/living/proc/set_size
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("<b>\The [src]</b> has transformed into \the [chosen_beast]!")
species.update_lleill_hud(src)
/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.Lleill" //CHOMPEdit
if(stat)
to_chat(src, "<span class='warning'>You can't do that in your condition.</span>")
return
visible_message("<b>\The [src]</b> begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("<b>\The [src]</b> ceases shifting their form.")
return 0
visible_message("<b>\The [src]</b> has reverted to their original form.")
revert_mob_tf()
//Hanner variant
/datum/power/lleill/beastform_hanner
name = "Beast Form (100)"
desc = "Take the form of a non-humanoid creature."
verbpath = /mob/living/carbon/human/proc/hanner_beast_form
ability_icon_state = "lleill_beast"
/mob/living/carbon/human/proc/hanner_beast_form()
set name = "Beast Form (100)"
set desc = "Take the form of a non-humanoid creature."
set category = "Abilities.Lleill" //CHOMPEdit
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, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
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,
"Dire Wolf" = /mob/living/simple_mob/vore/wolf/direwolf,
"Fox" = /mob/living/simple_mob/animal/passive/fox/beastmode,
"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,
"Bear" = /mob/living/simple_mob/animal/space/bear/brown/beastmode,
"Seagull" = /mob/living/simple_mob/vore/seagull,
"Sheep" = /mob/living/simple_mob/vore/sheep,
"Azure Tit" = /mob/living/simple_mob/animal/passive/bird/azure_tit/beastmode,
"Robin" = /mob/living/simple_mob/animal/passive/bird/european_robin/beastmode,
"Cat" = /mob/living/simple_mob/animal/passive/cat/black/beastmode,
"Tamaskan Dog" = /mob/living/simple_mob/animal/passive/dog/tamaskan,
"Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
"Bull Terrier" = /mob/living/simple_mob/animal/passive/dog/bullterrier,
"Duck" = /mob/living/simple_mob/animal/sif/duck,
"Cow" = /mob/living/simple_mob/animal/passive/cow,
"Chicken" = /mob/living/simple_mob/animal/passive/chicken,
"Goat" = /mob/living/simple_mob/animal/goat,
"Penguin" = /mob/living/simple_mob/animal/passive/penguin,
"Goose" = /mob/living/simple_mob/animal/space/goose
)
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, "<span class='warning'>You do not have enough energy to do that! You currently have [species.lleill_energy] energy.</span>")
return
var/mob/living/M = src
log_debug("polymorph start")
if(!istype(M))
log_debug("polymorph istype")
return
if(M.stat) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
log_debug("polymorph stat")
to_chat(src, "<span class='warning'>You can't do that in your condition.</span>")
return
if(M.health <= 10) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
log_debug("polymorph injured")
to_chat(src, "<span class='warning'>You are too injured to transform into a beast.</span>")
return
visible_message("<b>\The [src]</b> begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("<b>\The [src]</b> ceases shifting their form.")
return 0
var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation")
coolanimation.plane = PLANE_LIGHTING_ABOVE
src.overlays += coolanimation
spawn(10)
src.overlays -= coolanimation
log_debug("polymorph not dead")
var/mob/living/simple_mob/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
new_mob.verbs |= /mob/living/proc/set_size
new_mob.hasthermals = 0
new_mob.health = M.health
new_mob.maxHealth = M.health
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("<b>\The [src]</b> has transformed into \the [chosen_beast]!")

View File

@@ -0,0 +1,48 @@
/obj/screen/lleill
name = "glamour"
icon = 'icons/mob/lleill_hud.dmi'
invisibility = 101
/obj/screen/movable/ability_master/lleill
name = "Lleill Abilities"
icon = 'icons/mob/screen_spells.dmi'
icon_state = "grey_spell_ready"
ability_objects = list()
showing = 0
open_state = "master_open"
closed_state = "master_closed"
screen_loc = ui_spell_master
/obj/screen/movable/ability_master/lleill/update_abilities(forced = 0, mob/user) //Different proc to prevent indexing
update_icon()
if(user && user.client)
if(!(src in user.client.screen))
user.client.screen += src
for(var/obj/screen/ability/ability in ability_objects)
ability.update_icon(forced)
/obj/screen/ability/verb_based/lleill
icon_state = "grey_spell_base"
background_base_state = "grey"
/obj/screen/movable/ability_master/proc/add_lleill_ability(var/object_given, var/verb_given, var/name_given, var/ability_icon_given, var/arguments)
if(!object_given)
message_admins("ERROR: add_lleill_ability() was not given an object in its arguments.")
if(!verb_given)
message_admins("ERROR: add_lleill_ability() was not given a verb/proc in its arguments.")
if(get_ability_by_proc_ref(verb_given))
return // Duplicate
var/obj/screen/ability/verb_based/lleill/A = new /obj/screen/ability/verb_based/lleill()
A.ability_master = src
A.object_used = object_given
A.verb_to_call = verb_given
A.ability_icon_state = ability_icon_given
A.name = name_given
if(arguments)
A.arguments_to_use = arguments
ability_objects.Add(A)
if(my_mob.client)
toggle_open(2)

View File

@@ -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"

View File

@@ -91,3 +91,9 @@
/decl/mob_organ_names/bird
hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing")
/mob/living/simple_mob/animal/passive/bird/european_robin/beastmode
movement_cooldown = 1
/mob/living/simple_mob/animal/passive/bird/azure_tit/beastmode
movement_cooldown = 1

View File

@@ -156,6 +156,9 @@ var/list/_cat_default_emotes = list(
icon_state = "cat3"
item_state = "cat3"
/mob/living/simple_mob/animal/passive/cat/black/beastmode
movement_cooldown = 1
/mob/living/simple_mob/animal/passive/cat/bones
name = "Bones"
desc = "That's Bones the cat. He's a laid back, black cat. Meow."

View File

@@ -244,3 +244,6 @@
min_n2 = 0
max_n2 = 0
minbodytemp = 0
/mob/living/simple_mob/animal/passive/fox/beastmode
movement_cooldown = 1

View File

@@ -112,6 +112,13 @@
icon_gib = "bear-gib"
vore_icons = SA_ICON_LIVING
/mob/living/simple_mob/animal/space/bear/brown/beastmode
movement_cooldown = 2
melee_damage_lower = 5
melee_damage_upper = 15
attack_armor_pen = 0
/mob/living/simple_mob/animal/space/carp
icon = 'icons/mob/vore.dmi'
vore_active = 1

View File

@@ -6,6 +6,7 @@
var/disconnect_time = null //Time of client loss, set by Logout(), for timekeeping
var/obj/screen/shadekin/shadekin_display = null
var/obj/screen/shadekin/lleill_display = null
var/obj/screen/xenochimera/danger_level/xenochimera_danger_display = null
var/size_multiplier = 1 //multiplier for the mob's icon size

View File

@@ -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"

View File

@@ -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

View File

@@ -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_SHADEKIN_YW, 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_SHADEKIN_YW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_HANNER) //This lets all races use the default hairstyles.
/datum/sprite_accessory/hair/astolfo
name = "Astolfo"
@@ -486,20 +486,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, SPECIES_VOX) //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_VOX, SPECIES_HANNER) //This lets all races use the facial hair styles.
/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"

View File

@@ -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

BIN
icons/mob/lleill_hud.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -3180,8 +3180,10 @@
#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_hud.dm"
#include "code\modules\mob\living\carbon\human\species\lleill\lleill_items.dm"
#include "code\modules\mob\living\carbon\human\species\outsider\event.dm"
#include "code\modules\mob\living\carbon\human\species\outsider\replicant.dm"