diff --git a/modular_chomp/code/modules/mob/living/simple_mob/simple_mob_abilities.dm b/modular_chomp/code/modules/mob/living/simple_mob/simple_mob_abilities.dm
index 1cbf23f263..49a561bd9f 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/simple_mob_abilities.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/simple_mob_abilities.dm
@@ -303,4 +303,35 @@
new /obj/effect/alien/acid(get_turf(O), O)
visible_message("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!")
- return
\ No newline at end of file
+ return
+
+// spin blatantly stolen from BlackMajor's bigdragon
+/mob/living/simple_mob/proc/speen(var/range = 2)
+ var/list/thrownatoms = list()
+ for(var/mob/living/victim in oview(range, src))
+ thrownatoms += victim
+ src.spin(12,1)
+ for(var/am in thrownatoms)
+ var/atom/movable/AM = am
+ if(AM == src || AM.anchored)
+ continue
+ addtimer(CALLBACK(src, .proc/speen_throw, am), 1)
+ playsound(src, "sound/weapons/punchmiss.ogg", 50, 1)
+
+//Split repulse into two parts so I can recycle this later
+/mob/living/simple_mob/proc/speen_throw(var/atom/movable/AM, var/gentle = 0, var/damage = 10)
+ var/maxthrow = 7
+ var/atom/throwtarget
+ throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(AM, src)))
+
+ if (!throwtarget) // default case is north if unset
+ throwtarget = locate(src.x, world.maxy, src.z)
+
+ if(isliving(AM))
+ var/mob/living/M = AM
+ M.Weaken(1.5)
+ if(!gentle)
+ M.adjustBruteLoss(damage)
+ to_chat(M, "You're thrown back by [src]!")
+ playsound(src, get_sfx("punch"), 50, 1)
+ AM.throw_at(throwtarget, maxthrow, 3, src)
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/xenomorph.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/xenomorph.dm
similarity index 61%
rename from modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/xenomorph.dm
rename to modular_chomp/code/modules/mob/living/simple_mob/subtypes/xenomorph.dm
index aec4be7910..c3e8b129c1 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/xenomorph.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/xenomorph.dm
@@ -3,13 +3,9 @@
// Base type (Mostly initialises as an ability-less xeno hunter
/mob/living/simple_mob/xeno_ch
- name = "xenomorph"
- desc = "A chitin-covered bipedal creature with an eerie skittery nature."
+ name = "badly spawned xenomorph"
+ desc = "A chitin-covered bipedal creature with an eerie skittery nature. this one was spawned in wrong."
- icon_dead = "alienh_dead"
- icon_living = "alienh"
- icon_rest = "alienh_sleep"
- icon_state = "alienh"
icon = 'modular_chomp/icons/mob/xenos_32.dmi'
vis_height = 32
@@ -50,6 +46,38 @@
'sound/voice/hiss5.ogg')
has_hands = TRUE
+ can_enter_vent_with = list( /obj/item/weapon/implant,
+ /obj/item/device/radio/borg,
+ /obj/item/weapon/holder,
+ /obj/machinery/camera,
+ /obj/belly,
+ /obj/screen,
+ /atom/movable/emissive_blocker,
+ /obj/item/weapon/material,
+ /obj/item/weapon/melee,
+ /obj/item/stack/,
+ /obj/item/weapon/tool,
+ /obj/item/weapon/reagent_containers/food,
+ /obj/item/weapon/coin,
+ /obj/item/weapon/aliencoin,
+ /obj/item/weapon/ore,
+ /obj/item/weapon/disk/nuclear,
+ /obj/item/toy,
+ /obj/item/weapon/card,
+ /obj/item/device/radio,
+ /obj/item/device/perfect_tele_beacon,
+ /obj/item/weapon/clipboard,
+ /obj/item/weapon/paper,
+ /obj/item/weapon/pen,
+ /obj/item/canvas,
+ /obj/item/paint_palette,
+ /obj/item/paint_brush,
+ /obj/item/device/camera,
+ /obj/item/weapon/photo,
+ /obj/item/device/camera_film,
+ /obj/item/device/taperecorder,
+ /obj/item/device/tape)
+
var/xeno_build_time = 5 //time to build a structure
//HUD
@@ -58,7 +86,7 @@
var/datum/action/innate/xeno_ch/xeno_acidspit/acidspit_action = new
var/datum/action/innate/xeno_ch/xeno_corrode/corrode_action = new
var/datum/action/innate/xeno_ch/xeno_pounce/pounce_action = new
-
+ var/datum/action/innate/xeno_ch/xeno_spin/spin_action = new
/mob/living/simple_mob/xeno_ch/Initialize()
..()
@@ -75,9 +103,15 @@
// Xenomorph hunter subtype
/mob/living/simple_mob/xeno_ch/hunter
name = "xenomorph hunter"
+ desc = "A chitin-covered bipedal creature with an eerie skittery nature."
movement_cooldown = 1
+ icon_dead = "alienh_dead"
+ icon_living = "alienh"
+ icon_rest = "alienh_sleep"
+ icon_state = "alienh"
+
icon_state_prepounce = "alienh_pounce"
icon_pounce = 'modular_chomp/icons/mob/xenoleap_96.dmi'
icon_state_pounce = "alienh_leap"
@@ -86,38 +120,6 @@
icon_pounce_x = -32
icon_pounce_y = -32
- can_enter_vent_with = list( /obj/item/weapon/implant,
- /obj/item/device/radio/borg,
- /obj/item/weapon/holder,
- /obj/machinery/camera,
- /obj/belly,
- /obj/screen,
- /atom/movable/emissive_blocker,
- /obj/item/weapon/material,
- /obj/item/weapon/melee,
- /obj/item/stack/,
- /obj/item/weapon/tool,
- /obj/item/weapon/reagent_containers/food,
- /obj/item/weapon/coin,
- /obj/item/weapon/aliencoin,
- /obj/item/weapon/ore,
- /obj/item/weapon/disk/nuclear,
- /obj/item/toy,
- /obj/item/weapon/card,
- /obj/item/device/radio,
- /obj/item/device/perfect_tele_beacon,
- /obj/item/weapon/clipboard,
- /obj/item/weapon/paper,
- /obj/item/weapon/pen,
- /obj/item/canvas,
- /obj/item/paint_palette,
- /obj/item/paint_brush,
- /obj/item/device/camera,
- /obj/item/weapon/photo,
- /obj/item/device/camera_film,
- /obj/item/device/taperecorder,
- /obj/item/device/tape)
-
/mob/living/simple_mob/xeno_ch/hunter/Login()
. = ..()
verbs |= /mob/living/simple_mob/proc/pounce_toggle
@@ -125,6 +127,41 @@
verbs |= /mob/living/proc/hide
pounce_action.Grant(src)
+//Xenomorph Sentinel subtype
+/mob/living/simple_mob/xeno_ch/sentinel
+ name = "xenomorph sentinel"
+ desc = "A chitin-covered bipedal creature with an acrid scent about it."
+
+ movement_cooldown = 1.5
+
+ icon_dead = "aliens_dead"
+ icon_living = "aliens"
+ icon_rest = "aliens_sleep"
+ icon_state = "aliens"
+
+ icon_state_prepounce = "aliens_pounce"
+ icon_pounce = 'modular_chomp/icons/mob/xenoleap_96.dmi'
+ icon_state_pounce = "aliens_leap"
+ icon_overlay_spit = "alienspit"
+ icon_overlay_spit_pounce = "alienspit_leap"
+ icon_pounce_x = -32
+ icon_pounce_y = -32
+
+
+/mob/living/simple_mob/xeno_ch/sentinel/Login()
+ . = ..()
+ verbs |= /mob/living/simple_mob/proc/pounce_toggle
+ verbs |= /mob/living/proc/hide
+ verbs |= /mob/living/simple_mob/proc/neurotoxin
+ verbs |= /mob/living/simple_mob/proc/acidspit
+ verbs |= /mob/living/simple_mob/proc/corrosive_acid
+ pounce_action.Grant(src)
+ neurotox_action.Grant(src)
+ acidspit_action.Grant(src)
+ corrode_action.Grant(src)
+
+
+//Xenomorph queen subtype
/mob/living/simple_mob/xeno_ch/queen
name = "xenomorph queen"
desc = "A towering chitin-covered bipedal creature with a rather intimidating aura about them."
@@ -150,9 +187,11 @@
verbs |= /mob/living/simple_mob/proc/neurotoxin
verbs |= /mob/living/simple_mob/proc/acidspit
verbs |= /mob/living/simple_mob/proc/corrosive_acid
+ verbs |= /mob/living/simple_mob/proc/speen
neurotox_action.Grant(src)
acidspit_action.Grant(src)
corrode_action.Grant(src)
+ spin_action.Grant(src)
/mob/living/simple_mob/xeno_ch/queen/maid
name = "xenomorph maid queen"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/xenomorph_abilities.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/xenomorph_abilities.dm
similarity index 86%
rename from modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/xenomorph_abilities.dm
rename to modular_chomp/code/modules/mob/living/simple_mob/subtypes/xenomorph_abilities.dm
index 556bced054..f7153d2eee 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/xenomorph_abilities.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/xenomorph_abilities.dm
@@ -5,7 +5,7 @@
var/list/options = list("Resin Door","Resin Membrane","Nest","Resin Wall","Weed Node")
for(var/option in options)
- LAZYSET(options, option, image('modular_chomp/icons/effects/xenobuild_icons.dmi', option))
+ LAZYSET(options, option, image('modular_chomp/icons/mob/xeno_screen.dmi', option))
var/choice = show_radial_menu(src, src, options, radius = 60)
if(!choice || QDELETED(src) || src.incapacitated())
return FALSE
@@ -52,7 +52,7 @@
/datum/action/innate/xeno_ch
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_ALIVE
- button_icon = 'modular_chomp/icons/effects/xenobuild_icons.dmi'
+ button_icon = 'modular_chomp/icons/mob/xeno_screen.dmi'
var/mob/living/simple_mob/xeno_ch/parent_xeno
@@ -100,9 +100,18 @@
/datum/action/innate/xeno_ch/xeno_pounce/Activate()
parent_xeno.pounce_toggle()
-/mob/living/simple_mob/xeno_ch/proc/grantactions()
+/datum/action/innate/xeno_ch/xeno_spin
+ name = "Spin"
+ button_icon_state = "Spin"
+
+/datum/action/innate/xeno_ch/xeno_spin/Activate()
+ parent_xeno.speen()
+
+
+/mob/living/simple_mob/xeno_ch/proc/grantallactions()
build_action.Grant(src)
neurotox_action.Grant(src)
acidspit_action.Grant(src)
corrode_action.Grant(src)
- pounce_action.Grant(src)
\ No newline at end of file
+ pounce_action.Grant(src)
+ spin_action.Grant(src)
\ No newline at end of file
diff --git a/modular_chomp/icons/effects/xenobuild_icons.dmi b/modular_chomp/icons/mob/xeno_screen.dmi
similarity index 100%
rename from modular_chomp/icons/effects/xenobuild_icons.dmi
rename to modular_chomp/icons/mob/xeno_screen.dmi
diff --git a/vorestation.dme b/vorestation.dme
index 38ef8a9738..e8b35050a9 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -4491,6 +4491,6 @@
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\protean\protean_species.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\simple_mob_abilities.dm"
-#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\xenomorph.dm"
-#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\xenomorph_abilities.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\xenomorph_abilities.dm"
// END_INCLUDE