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