Tweaks to beast form

The hanner now get a version of beast form that limits their max health to whatever theirs was before transforming, this can make them take very serious damage and even lose limbs in beast form if they use it to fight.

Added a beast form variant of the bear which is way less OP.
This commit is contained in:
SatinIsle
2024-09-06 13:44:52 +01:00
parent e091c1ffef
commit 308f7e32fc
3 changed files with 152 additions and 9 deletions
@@ -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)
@@ -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, "<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
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, "<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
/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, "<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,
"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, "<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.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]!")
@@ -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