diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index 9bef4c0cbc6..67fc8fd0517 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -241,20 +241,20 @@ M.Weaken(5) ..() -/mob/living/bot/mulebot/proc/runOver(var/mob/living/carbon/human/H) - if(istype(H)) // No safety checks - WILL run over lying humans. Stop ERPing in the maint! - visible_message("[src] drives over [H]!") +/mob/living/bot/mulebot/proc/runOver(var/mob/living/M) + if(istype(M)) // At this point, MULEBot has somehow crossed over onto your tile with you still on it. CRRRNCH. + visible_message("[src] drives over [M]!") playsound(src, 'sound/effects/splat.ogg', 50, 1) var/damage = rand(5, 7) - H.apply_damage(2 * damage, BRUTE, BP_HEAD) - H.apply_damage(2 * damage, BRUTE, BP_TORSO) - H.apply_damage(0.5 * damage, BRUTE, BP_L_LEG) - H.apply_damage(0.5 * damage, BRUTE, BP_R_LEG) - H.apply_damage(0.5 * damage, BRUTE, BP_L_ARM) - H.apply_damage(0.5 * damage, BRUTE, BP_R_ARM) + M.apply_damage(2 * damage, BRUTE, BP_HEAD) + M.apply_damage(2 * damage, BRUTE, BP_TORSO) + M.apply_damage(0.5 * damage, BRUTE, BP_L_LEG) + M.apply_damage(0.5 * damage, BRUTE, BP_R_LEG) + M.apply_damage(0.5 * damage, BRUTE, BP_L_ARM) + M.apply_damage(0.5 * damage, BRUTE, BP_R_ARM) - blood_splatter(src, H, 1) + blood_splatter(src, M, 1) ..() /mob/living/bot/mulebot/relaymove(var/mob/user, var/direction) diff --git a/code/modules/mob/living/bot/mulebot_vr.dm b/code/modules/mob/living/bot/mulebot_vr.dm new file mode 100644 index 00000000000..aec8f309838 --- /dev/null +++ b/code/modules/mob/living/bot/mulebot_vr.dm @@ -0,0 +1,5 @@ +/mob/living/bot/mulebot/handle_micro_bump_helping() // Can't drive over micros or macros regardless of intent. + return 0 + +/mob/living/bot/mulebot/handle_micro_bump_other() // Can't drive over micros or macros regardless of intent. + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 77427c098cb..6510f049dde 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -253,20 +253,14 @@ return // called when something steps onto a human -// this handles mulebots and vehicles -// and now mobs on fire +// this handles mobs on fire - mulebot and vehicle code has been relocated to /mob/living/Crossed() /mob/living/carbon/human/Crossed(var/atom/movable/AM) if(AM.is_incorporeal()) return - if(istype(AM, /mob/living/bot/mulebot)) - var/mob/living/bot/mulebot/MB = AM - MB.runOver(src) - - if(istype(AM, /obj/vehicle)) - var/obj/vehicle/V = AM - V.RunOver(src) spread_fire(AM) + + ..() // call parent because we moved behavior to parent // Get rank from ID, ID inside PDA, PDA, ID in wallet, etc. /mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e8e5fd3361b..a472366b03e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -244,6 +244,19 @@ default behaviour is: return TRUE return ..() +// Called when something steps onto us. This allows for mulebots and vehicles to run things over. <3 +/mob/living/Crossed(var/atom/movable/AM) // Transplanting this from /mob/living/carbon/human/Crossed() + if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts + return + + if(istype(AM, /mob/living/bot/mulebot)) + var/mob/living/bot/mulebot/MB = AM + MB.runOver(src) + + if(istype(AM, /obj/vehicle)) + var/obj/vehicle/V = AM + V.RunOver(src) + /mob/living/verb/succumb() set hidden = 1 if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index cc66674b878..49f9d5b6a45 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -360,7 +360,7 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) drop.drips |= drips // If there's no data to copy, call it quits here. - if(!source) + if(!istype(source)) return B // Update appearance. diff --git a/code/modules/vehicles/Securitrain_vr.dm b/code/modules/vehicles/Securitrain_vr.dm index bb8b0c66f05..1de6b05e369 100644 --- a/code/modules/vehicles/Securitrain_vr.dm +++ b/code/modules/vehicles/Securitrain_vr.dm @@ -166,28 +166,28 @@ else verbs += /obj/vehicle/train/security/engine/verb/stop_engine -/obj/vehicle/train/security/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/security/RunOver(var/mob/living/M) var/list/parts = list(BP_HEAD, BP_TORSO, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM) - H.apply_effects(5, 5) + M.apply_effects(5, 5) for(var/i = 0, i < rand(1,3), i++) - H.apply_damage(rand(1,5), BRUTE, pick(parts)) + M.apply_damage(rand(1,5), BRUTE, pick(parts)) -/obj/vehicle/train/security/trolley/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/security/trolley/RunOver(var/mob/living/M) ..() - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])") -/obj/vehicle/train/security/engine/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/security/engine/RunOver(var/mob/living/M) ..() if(is_train_head() && istype(load, /mob/living/carbon/human)) var/mob/living/carbon/human/D = load - to_chat(D, "You ran over \the [H]!" - visible_message("\The [src] ran over \the [H]!") - add_attack_logs(D,H,"Ran over with [src.name]") - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") + to_chat(D, "You ran over \the [M]!" + visible_message("\The [src] ran over \the [M]!") + add_attack_logs(D,M,"Ran over with [src.name]") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])") else - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])") //------------------------------------------- diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 94437458cff..a118b1c2583 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -152,28 +152,28 @@ else verbs += /obj/vehicle/train/engine/verb/stop_engine -/obj/vehicle/train/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/RunOver(var/mob/living/M) var/list/parts = list(BP_HEAD, BP_TORSO, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM) - H.apply_effects(5, 5) + M.apply_effects(5, 5) for(var/i = 0, i < rand(1,3), i++) - H.apply_damage(rand(1,5), BRUTE, pick(parts)) + M.apply_damage(rand(1,5), BRUTE, pick(parts)) -/obj/vehicle/train/trolley/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/trolley/RunOver(var/mob/living/M) ..() - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])") -/obj/vehicle/train/engine/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/engine/RunOver(var/mob/living/M) ..() if(is_train_head() && istype(load, /mob/living/carbon/human)) var/mob/living/carbon/human/D = load - to_chat(D, "You ran over [H]!") - visible_message("\The [src] ran over [H]!") - add_attack_logs(D,H,"Ran over with [src.name]") - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") + to_chat(D, "You ran over [M]!") + visible_message("\The [src] ran over [M]!") + add_attack_logs(D,M,"Ran over with [src.name]") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])") else - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])") //------------------------------------------- diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm index 657d4976f42..3524895ba27 100644 --- a/code/modules/vehicles/quad.dm +++ b/code/modules/vehicles/quad.dm @@ -142,15 +142,15 @@ add_attack_logs(D,M,"Ran over with [src.name]") -/obj/vehicle/train/engine/quadbike/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/engine/quadbike/RunOver(var/mob/living/M) ..() var/list/throw_dirs = list(1, 2, 4, 8, 5, 6, 9, 10) if(!emagged) throw_dirs -= dir if(tow) - throw_dirs -= get_dir(H, tow) //Don't throw it at the trailer either. - var/turf/T = get_step(H, pick(throw_dirs)) - H.throw_at(T, 1, 1, src) + throw_dirs -= get_dir(M, tow) //Don't throw it at the trailer either. + var/turf/T = get_step(M, pick(throw_dirs)) + M.throw_at(T, 1, 1, src) /* * Trailer bits and bobs. diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm index aa2c29744c3..ff7a4a5b297 100644 --- a/code/modules/vehicles/rover_vr.dm +++ b/code/modules/vehicles/rover_vr.dm @@ -164,28 +164,28 @@ else verbs += /obj/vehicle/train/rover/engine/verb/stop_engine -/obj/vehicle/train/rover/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/rover/RunOver(var/mob/living/M) var/list/parts = list(BP_HEAD, BP_TORSO, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM) - H.apply_effects(5, 5) + M.apply_effects(5, 5) for(var/i = 0, i < rand(1,3), i++) - H.apply_damage(rand(1,5), BRUTE, pick(parts)) + M.apply_damage(rand(1,5), BRUTE, pick(parts)) -/obj/vehicle/train/rover/trolley/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/rover/trolley/RunOver(var/mob/living/M) ..() - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])") -/obj/vehicle/train/rover/engine/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/train/rover/engine/RunOver(var/mob/living/M) ..() if(is_train_head() && istype(load, /mob/living/carbon/human)) var/mob/living/carbon/human/D = load - to_chat(D, "You ran over \the [H]!") - visible_message("\The [src] ran over \the [H]!") - add_attack_logs(D,H,"Ran over with [src.name]") - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") + to_chat(D, "You ran over \the [M]!") + visible_message("\The [src] ran over \the [M]!") + add_attack_logs(D,M,"Ran over with [src.name]") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey]), driven by [D.name] ([D.ckey])") else - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + attack_log += text("\[[time_stamp()]\] ran over [M.name] ([M.ckey])") //------------------------------------------- diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index e43228c4bed..44be1f6bd38 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -292,7 +292,7 @@ cell = null powercheck() -/obj/vehicle/proc/RunOver(var/mob/living/carbon/human/H) +/obj/vehicle/proc/RunOver(var/mob/living/M) return //write specifics for different vehicles //------------------------------------------- diff --git a/vorestation.dme b/vorestation.dme index 14cbc0e081b..b3222523831 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2435,6 +2435,7 @@ #include "code\modules\mob\living\bot\floorbot.dm" #include "code\modules\mob\living\bot\medbot.dm" #include "code\modules\mob\living\bot\mulebot.dm" +#include "code\modules\mob\living\bot\mulebot_vr.dm" #include "code\modules\mob\living\bot\secbot.dm" #include "code\modules\mob\living\bot\SLed209bot.dm" #include "code\modules\mob\living\carbon\breathe.dm"