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"])")