diff --git a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm
index 40d0f89cd20..a6a11613586 100644
--- a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm
+++ b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm
@@ -91,7 +91,7 @@
/mob/living/proc/set_size,
/mob/living/carbon/human/proc/lleill_contact,
/mob/living/carbon/human/proc/lleill_alchemy,
- /mob/living/carbon/human/proc/lleill_beast_form
+ /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)
diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm
index 9e33bb787e0..9506fd16f90 100644
--- a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm
+++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm
@@ -370,7 +370,8 @@
"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
+ "Kelpie" = /mob/living/simple_mob/vore/horse/kelpie,
+ "Bear" = /mob/living/simple_mob/animal/space/bear/brown/beastmode
)
var/chosen_beast = tgui_input_list(src, "Which form would you like to take?", "Choose Beast Form", beast_options)
@@ -388,18 +389,21 @@
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, "You can't do that in your condition.")
+ 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, "You are too injured to transform into a beast.")
+ return
+
visible_message("\The [src] begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("\The [src] ceases shifting their form.")
return 0
-
-
- log_debug("polymorph else")
- if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
- log_debug("polymorph dead")
- return
-
var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation")
coolanimation.plane = PLANE_LIGHTING_ABOVE
src.overlays += coolanimation
@@ -479,9 +483,141 @@
set desc = "Return to your humanoid form."
set category = "Abilities"
+ if(stat)
+ to_chat(src, "You can't do that in your condition.")
+ return
+
visible_message("\The [src] begins significantly shifting their form.")
if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
visible_message("\The [src] ceases shifting their form.")
return 0
visible_message("\The [src] has reverted to their original form.")
revert_mob_tf()
+
+
+//Hanner variant
+
+/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"
+ if(!ishuman(src))
+ return //If you're not a human you don't have permission to do this.
+
+ var/energy_cost = 100
+
+ if(species.lleill_energy < energy_cost)
+ to_chat(src, "You do not have enough energy to do that! You currently have [species.lleill_energy] energy.")
+ return
+
+ var/list/beast_options = list("Rabbit" = /mob/living/simple_mob/vore/rabbit,
+ "Red Panda" = /mob/living/simple_mob/vore/redpanda,
+ "Fennec" = /mob/living/simple_mob/vore/fennec,
+ "Giant Frog" = /mob/living/simple_mob/vore/aggressive/frog,
+ "Giant Rat" = /mob/living/simple_mob/vore/aggressive/rat,
+ "Wolf" = /mob/living/simple_mob/vore/wolf,
+ "Panther" = /mob/living/simple_mob/vore/aggressive/panther,
+ "Giant Snake" = /mob/living/simple_mob/vore/aggressive/giant_snake,
+ "Otie" = /mob/living/simple_mob/vore/otie,
+ "Squirrel" = /mob/living/simple_mob/vore/squirrel,
+ "Raptor" = /mob/living/simple_mob/vore/raptor,
+ "Giant Bat" = /mob/living/simple_mob/vore/bat,
+ "Horse" = /mob/living/simple_mob/vore/horse,
+ "Horse (Big)" = /mob/living/simple_mob/vore/horse/big,
+ "Kelpie" = /mob/living/simple_mob/vore/horse/kelpie,
+ "Bear" = /mob/living/simple_mob/animal/space/bear/brown/beastmode
+ )
+
+ var/chosen_beast = tgui_input_list(src, "Which form would you like to take?", "Choose Beast Form", beast_options)
+
+ if(!chosen_beast)
+ return
+
+ if(species.lleill_energy < energy_cost)
+ to_chat(src, "You do not have enough energy to do that! You currently have [species.lleill_energy] energy.")
+ 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, "You can't do that in your condition.")
+ 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, "You are too injured to transform into a beast.")
+ return
+
+ visible_message("\The [src] begins significantly shifting their form.")
+ if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE))
+ visible_message("\The [src] ceases shifting their form.")
+ return 0
+
+ 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.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("\The [src] has transformed into \the [chosen_beast]!")
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm
index d9b1cfe6d2c..50c1824a5ba 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm
@@ -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