new wizard ability and basic leaper refactor (#79237)

## About The Pull Request
refactors leapers into basic mobs and adds a new ability for wizards.
for 2 points wizards can buy their own leaper pet. they will get a
contract which lets them pick their pet's name and color

![thefrogs](https://github.com/tgstation/tgstation/assets/138636438/8df9b893-d07d-4e51-a9fa-644830cc7a81)

after they sign the contract they will get a frog statue which is used
to contain the leaper. players can use this statue to release or recall
the leaper into the statue. when its in the statue it will slowly regain
health or even revive from the dead, but if it gets gibbed then the
statue will be useless.

also adds a new ai behavior for leapers which lets them go swim in water
(and splash around) for a period of time. i gave this behavior to frogs
and crabs too

when riding the leaper, the players will get access to all its
abilities, it now has new abilities, it can create frog minions that
suicide bomb the enemies and it can also create a shower of poisonous
structures.


https://github.com/tgstation/tgstation/assets/138636438/931aa7b4-09f0-493f-bdb6-f3bdd0915b22

also when riding the leaper, players can point at walls near it so it
will destroy it. alternatively players can give commands to their
leapers to use abilities and to follow them if they are not riding it.
wizards cant be force dismounted from their frogs, and only wizards can
ride the frogs.

this also removes leapers from cytology as they now are much more
dangerous and have a new home


## Why It's Good For The Game
refactors leapers into basic mobs, and gives more gameplay opportunities
for wizards
## Changelog
🆑
refactor: leapers have been refactored into basic mobs please report any
bugs
add: wizards can now summon a leaper pet
removal: removes leapers from cytology
/🆑
This commit is contained in:
Ben10Omintrix
2023-11-06 00:05:29 +00:00
committed by GitHub
parent afe762752a
commit 42c8e1adf9
29 changed files with 866 additions and 369 deletions
@@ -31,7 +31,7 @@
var/static/list/innate_actions = list(
/datum/action/cooldown/mob_cooldown/slippery_ice_floors = BB_DEMON_SLIP_ABILITY,
/datum/action/cooldown/mob_cooldown/ice_demon_teleport = BB_DEMON_TELEPORT_ABILITY,
/datum/action/cooldown/spell/conjure/create_afterimages = BB_DEMON_CLONE_ABILITY,
/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages = BB_DEMON_CLONE_ABILITY,
)
grant_actions_by_list(innate_actions)
@@ -82,7 +82,7 @@
/obj/effect/temp_visual/slippery_ice/proc/add_slippery_component()
AddComponent(/datum/component/slippery, 2 SECONDS)
/datum/action/cooldown/spell/conjure/create_afterimages
/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages
name = "Create After Images"
button_icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi'
button_icon_state = "ice_demon"
@@ -91,27 +91,8 @@
summon_type = list(/mob/living/basic/mining/demon_afterimage)
summon_radius = 1
summon_amount = 2
///max number of after images
var/max_afterimages = 2
///How many clones do we have summoned
var/number_of_afterimages = 0
max_summons = 2
/datum/action/cooldown/spell/conjure/create_afterimages/can_cast_spell(feedback = TRUE)
/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages/post_summon(atom/summoned_object, atom/cast_on)
. = ..()
if(!.)
return FALSE
if(number_of_afterimages >= max_afterimages)
return FALSE
return TRUE
/datum/action/cooldown/spell/conjure/create_afterimages/post_summon(atom/summoned_object, atom/cast_on)
var/mob/living/basic/created_copy = summoned_object
created_copy.AddComponent(/datum/component/joint_damage, overlord_mob = owner)
RegisterSignals(created_copy, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(delete_copy))
number_of_afterimages++
/datum/action/cooldown/spell/conjure/create_afterimages/proc/delete_copy(mob/source)
SIGNAL_HANDLER
UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH))
number_of_afterimages--
summoned_object.AddComponent(/datum/component/joint_damage, overlord_mob = owner)