From 308f7e32fc6095267b8f3ea07ede4a9c9b0e1e02 Mon Sep 17 00:00:00 2001 From: SatinIsle Date: Fri, 6 Sep 2024 13:44:52 +0100 Subject: [PATCH] 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. --- .../carbon/human/species/lleill/hanner.dm | 2 +- .../human/species/lleill/lleill_abilities.dm | 152 +++++++++++++++++- .../subtypes/vore/zz_vore_overrides.dm | 7 + 3 files changed, 152 insertions(+), 9 deletions(-) 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