diff --git a/code/game/objects/items/devices/radio/headset_vr.dm b/code/game/objects/items/devices/radio/headset_vr.dm
index 71a37ac0d7..f8ce34fa04 100644
--- a/code/game/objects/items/devices/radio/headset_vr.dm
+++ b/code/game/objects/items/devices/radio/headset_vr.dm
@@ -19,4 +19,13 @@
/obj/item/device/radio/headset
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/ears.dmi',
- SPECIES_WEREBEAST = 'icons/mob/species/werebeast/ears.dmi')
\ No newline at end of file
+ SPECIES_WEREBEAST = 'icons/mob/species/werebeast/ears.dmi')
+
+/obj/item/device/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans.
+ name = "nonhuman radio implant"
+ desc = "An updated, modular intercom that requires no hands to operate. Takes encryption keys"
+
+/obj/item/device/radio/headset/mob_headset/receive_range(freq, level)
+ if(ismob(src.loc))
+ return ..(freq, level)
+ return -1
\ No newline at end of file
diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm
index ce2c684c09..8d547b76e1 100644
--- a/code/modules/admin/view_variables/topic.dm
+++ b/code/modules/admin/view_variables/topic.dm
@@ -359,13 +359,14 @@
var/list/possibleverbs = list()
possibleverbs += "Cancel" // One for the top...
possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb)
- switch(H.type)
- if(/mob/living/carbon/human)
- possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc)
- if(/mob/living/silicon/robot)
- possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb)
- if(/mob/living/silicon/ai)
- possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
+ if(istype(H,/mob/living/carbon/human))
+ possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc)
+ if(istype(H,/mob/living/silicon/robot))
+ possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb)
+ if(istype(H,/mob/living/silicon/ai))
+ possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
+ if(istype(H,/mob/living/simple_mob))
+ possibleverbs += typesof(/mob/living/simple_mob/proc,/mob/living/simple_mob/verb) //VOREStation edit, Apparently polaris simplemobs have no verbs at all.
possibleverbs -= H.verbs
possibleverbs += "Cancel" // ...And one for the bottom
diff --git a/code/modules/ai/ai_holder_movement.dm b/code/modules/ai/ai_holder_movement.dm
index 55a1098b90..ced4832057 100644
--- a/code/modules/ai/ai_holder_movement.dm
+++ b/code/modules/ai/ai_holder_movement.dm
@@ -142,7 +142,7 @@
if(isturf(holder.loc) && can_act())
wander_delay--
if(wander_delay <= 0)
- if(!wander_when_pulled && holder.pulledby)
+ if(!wander_when_pulled && (holder.pulledby | holder.grabbed_by.len))
ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG)
return
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
index 75b256b22e..92116b4f76 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
@@ -411,12 +411,12 @@
last_special = world.time + 10
status_flags |= LEAPING
- pixel_y = 10
+ pixel_y = pixel_y + 10
src.visible_message("\The [src] leaps at [T]!")
src.throw_at(get_step(get_turf(T),get_turf(src)), 4, 1, src)
playsound(src.loc, 'sound/mecha/mechstep2.ogg', 50, 1)
- pixel_y = 0
+ pixel_y = default_pixel_y
cell.charge -= 750
sleep(5)
diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
index d596b7a502..127bad2295 100644
--- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
@@ -45,6 +45,9 @@
var/mount_offset_x = 5 // Horizontal riding offset.
var/mount_offset_y = 8 // Vertical riding offset
+ var/obj/item/device/radio/headset/mob_headset/mob_radio //Adminbus headset for simplemob shenanigans.
+ does_spin = FALSE
+
// Release belly contents before being gc'd!
/mob/living/simple_mob/Destroy()
release_vore_contents()
@@ -346,3 +349,81 @@
return
if(buckle_mob(M))
visible_message("[M] starts riding [name]!")
+
+/mob/living/simple_mob/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+ if(mob_radio)
+ switch(message_mode)
+ if("intercom")
+ for(var/obj/item/device/radio/intercom/I in view(1, null))
+ I.talk_into(src, message, verb, speaking)
+ used_radios += I
+ if("headset")
+ if(mob_radio && istype(mob_radio,/obj/item/device/radio/headset/mob_headset))
+ mob_radio.talk_into(src,message,null,verb,speaking)
+ used_radios += mob_radio
+ else
+ if(message_mode)
+ if(mob_radio && istype(mob_radio,/obj/item/device/radio/headset/mob_headset))
+ mob_radio.talk_into(src,message, message_mode, verb, speaking)
+ used_radios += mob_radio
+ else
+ ..()
+
+/mob/living/simple_mob/proc/leap()
+ set name = "Pounce Target"
+ set category = "Abilities"
+ set desc = "Select a target to pounce at."
+
+ if(last_special > world.time)
+ to_chat(src, "Your legs need some more rest.")
+ return
+
+ if(incapacitated(INCAPACITATION_DISABLED))
+ to_chat(src, "You cannot leap in your current state.")
+ return
+
+ var/list/choices = list()
+ for(var/mob/living/M in view(3,src))
+ choices += M
+ choices -= src
+
+ var/mob/living/T = input(src,"Who do you wish to leap at?") as null|anything in choices
+
+ if(!T || !src || src.stat) return
+
+ if(get_dist(get_turf(T), get_turf(src)) > 3) return
+
+ if(last_special > world.time)
+ return
+
+ if(usr.incapacitated(INCAPACITATION_DISABLED))
+ to_chat(src, "You cannot leap in your current state.")
+ return
+
+ last_special = world.time + 10
+ status_flags |= LEAPING
+ pixel_y = pixel_y + 10
+
+ src.visible_message("\The [src] leaps at [T]!")
+ src.throw_at(get_step(get_turf(T),get_turf(src)), 4, 1, src)
+ playsound(src.loc, 'sound/effects/bodyfall1.ogg', 50, 1)
+ pixel_y = default_pixel_y
+
+ sleep(5)
+
+ if(status_flags & LEAPING) status_flags &= ~LEAPING
+
+ if(!src.Adjacent(T))
+ to_chat(src, "You miss!")
+ return
+
+ if(ishuman(T))
+ var/mob/living/carbon/human/H = T
+ if(H.species.lightweight == 1)
+ H.Weaken(3)
+ return
+ var/armor_block = run_armor_check(T, "melee")
+ var/armor_soak = get_armor_soak(T, "melee")
+ T.apply_damage(20, HALLOSS,, armor_block, armor_soak)
+ if(prob(33))
+ T.apply_effect(3, WEAKEN, armor_block)
\ No newline at end of file
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index faf2d43d66..0afa43f649 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -225,7 +225,7 @@
//Clean up our own business
items_preserved.Cut()
- if(isanimal(owner))
+ if(!ishuman(owner))
owner.update_icons()
//Print notifications/sound if necessary
@@ -273,7 +273,7 @@
Pred.bloodstr.trans_to(Prey, Pred.reagents.total_volume / absorbed_count)
//Clean up our own business
- if(isanimal(owner))
+ if(!ishuman(owner))
owner.update_icons()
//Print notifications/sound if necessary
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index e879eeddd5..39f480fda5 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -184,7 +184,8 @@
if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains)
handle_remains_leaving(M)
digestion_death(M)
- owner.update_icons()
+ if(!ishuman(owner))
+ owner.update_icons()
if(compensation > 0)
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 9d8e712b2d..fd361677cc 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -28,6 +28,7 @@
var/can_be_drop_prey = FALSE
var/can_be_drop_pred = TRUE // Mobs are pred by default.
var/next_preyloop // For Fancy sound internal loop
+ var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans.
//
// Hook for generic creation of stuff on new creatures
@@ -366,9 +367,8 @@
SA.prey_excludes[src] = world.time
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "JMP" : "null"])")
- if(isanimal(B.owner))
- var/mob/living/simple_mob/SA = B.owner
- SA.update_icons()
+ if(!ishuman(B.owner))
+ B.owner.update_icons()
//You're in a dogborg!
else if(istype(loc, /obj/item/device/dogborg/sleeper))
@@ -589,7 +589,7 @@
to_chat(src, "You are not allowed to eat this.")
return
- if(is_type_in_list(I,edible_trash))
+ if(is_type_in_list(I,edible_trash) | adminbus_trash)
if(I.hidden_uplink)
to_chat(src, "You really should not be eating this.")
message_admins("[key_name(src)] has attempted to ingest an uplink item. ([src ? "JMP" : "null"])")