mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
[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:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
@@ -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()
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 */
|
||||
)
|
||||
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
132
code/modules/mob/living/carbon/human/species/lleill/hanner.dm
Normal file
132
code/modules/mob/living/carbon/human/species/lleill/hanner.dm
Normal 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)
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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]!")
|
||||
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -244,3 +244,6 @@
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fox/beastmode
|
||||
movement_cooldown = 1
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
BIN
icons/mob/lleill_hud.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user