diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 025d8d2fb9..6135faf88f 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -284,9 +284,9 @@ return -/atom/proc/hitby(atom/movable/AM as mob|obj) +/atom/proc/hitby(atom/movable/source) if (density) - AM.throwing = 0 + source.throwing = 0 return //returns 1 if made bloody, returns 0 otherwise diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index b080ddd9b1..1a9abbace3 100644 --- a/code/game/gamemodes/events/clang.dm +++ b/code/game/gamemodes/events/clang.dm @@ -69,6 +69,7 @@ name = "Immovable Rod" desc = "What the fuck is that?" icon = 'icons/obj/objects.dmi' + w_class = 100 //Affects how much damage it does to stuff icon_state = "immrod" density = TRUE anchored = TRUE diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index e142a696e3..83ac93e166 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -121,13 +121,14 @@ return destroy() -/obj/machinery/camera/hitby(AM as mob|obj) +/obj/machinery/camera/hitby(atom/movable/source) ..() - if (istype(AM, /obj)) - var/obj/item/O = AM - if(O.throwforce >= src.toughness) - visible_message(span_boldwarning("[src] was hit by [O].")) - take_damage(O.throwforce) + if (!isobj(source)) + return + var/obj/item/O = source + if(O.throwforce >= src.toughness) + visible_message(span_boldwarning("[src] was hit by [O].")) + take_damage(O.throwforce) /obj/machinery/camera/proc/setViewRange(var/num = 7) src.view_range = num diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 760be0f817..af652de037 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -197,18 +197,21 @@ -/obj/machinery/door/hitby(AM as mob|obj, var/speed=5) - +/obj/machinery/door/hitby(atom/movable/source, var/speed=5) ..() - visible_message(span_danger("[src.name] was hit by [AM].")) + visible_message(span_danger("[src.name] was hit by [source].")) var/tforce = 0 - if(ismob(AM)) - tforce = 15 * (speed/5) - else - tforce = AM:throwforce * (speed/5) + if(ismob(source)) + tforce = 15 * (speed/THROWFORCE_SPEED_DIVISOR) + else if(isobj(source)) + var/obj/object = source + if(isitem(object)) + var/obj/item/our_item = object + tforce = our_item.throwforce * (speed/THROWFORCE_SPEED_DIVISOR) + else + tforce = object.w_class * (speed/THROWFORCE_SPEED_DIVISOR) playsound(src, hitsound, 100, 1) take_damage(tforce) - return /obj/machinery/door/attack_ai(mob/user as mob) return src.attack_hand(user) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2fd4304ddb..4a08902218 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1113,11 +1113,10 @@ src.log_append_to_last("Armor saved.") return -/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper +/obj/mecha/hitby(atom/movable/source) //wrapper ..() - src.log_message("Hit by [A].",1) - call((proc_res["dynhitby"]||src), "dynhitby")(A) - return + src.log_message("Hit by [source].",1) //CHOMPEdit - Don't have JSON logging yet. + call((proc_res["dynhitby"]||src), "dynhitby")(source) //CHOMPEdit - Don't have JSON logging yet. //I think this is relative to throws. /obj/mecha/proc/dynhitby(atom/movable/A) diff --git a/code/game/objects/effects/alien/alien egg.dm b/code/game/objects/effects/alien/alien egg.dm deleted file mode 100644 index c2c899194d..0000000000 --- a/code/game/objects/effects/alien/alien egg.dm +++ /dev/null @@ -1,96 +0,0 @@ -#define MAX_PROGRESS 100 - -/obj/structure/alien/egg //CHOMPedit this entire file is a CHOMPedit - desc = "It looks like a weird egg." - name = "egg" - icon_state = "egg_growing" - density = 0 - anchored = 1 - var/progress = 0 - -/obj/structure/alien/egg/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/alien/egg/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/alien/egg/CanUseTopic(var/mob/user) - return isobserver(user) ? STATUS_INTERACTIVE : STATUS_CLOSE - -/obj/structure/alien/egg/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["spawn"]) - attack_ghost(usr) - -/obj/structure/alien/egg/process() - progress++ - if(progress >= MAX_PROGRESS) - for(var/mob/observer/dead/O) //CHOMPedit fixed the snowflake ghost_pod notification. - if(O.client) - to_chat(O, span_notice("An alien is ready to hatch! (spawn)")) - STOP_PROCESSING(SSobj, src) - update_icon() - -/obj/structure/alien/egg/update_icon() - if(progress == -1) - icon_state = "egg_hatched" - else if(progress < MAX_PROGRESS) - icon_state = "egg_growing" - else - icon_state = "egg" - -/obj/structure/alien/egg/attack_ghost(var/mob/observer/ghost/user) - if(progress == -1) //Egg has been hatched. - return - - if(progress < MAX_PROGRESS) - to_chat(user, "\The [src] has not yet matured.") - return - - if(!user.MayRespawn(1)) - return - - // Check for bans properly. - if(jobban_isbanned(user, MODE_XENOMORPH)) - to_chat(user, span_danger("You are banned from playing a Genaprawn.")) //CHOMPedit - return - - var/confirm = tgui_alert(user, "Are you sure you want to join as a Genaprawn larva?", "Become Larva", list("No", "Yes")) //CHOMPedit - - if(!src || confirm != "Yes") - return - - if(!user || !user.ckey) - return - - if(progress == -1) //Egg has been hatched. - to_chat(user, "Too slow...") - return - - flick("egg_opening",src) - progress = -1 // No harvesting pls. - sleep(5) - - if(!src || !user) - visible_message(span_alium("\The [src] writhes with internal motion, but nothing comes out.")) - progress = MAX_PROGRESS // Someone else can have a go. - return // What a pain. - - // Create the mob, transfer over key. - var/mob/living/carbon/alien/larva/larva = new(get_turf(src)) - larva.ckey = user.ckey - spawn(-1) - if(user) qdel(user) // Remove the keyless ghost if it exists. - - visible_message(span_alium("\The [src] splits open with a wet slithering noise, and \the [larva] writhes free!")) - - // Turn us into a hatched egg. - name = "hatched alien egg" - desc += " This one has hatched." - update_icon() - -#undef MAX_PROGRESS diff --git a/code/game/objects/effects/alien/alien.dm b/code/game/objects/effects/alien/alien.dm deleted file mode 100644 index c6d001265d..0000000000 --- a/code/game/objects/effects/alien/alien.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/structure/alien ////CHOMPedit This entire file is a CHOMPedit, for new eggs - name = "alien thing" - desc = "There's something alien about this." - icon = 'icons/mob/alien.dmi' - layer = ABOVE_JUNK_LAYER - var/health = 50 - -/obj/structure/alien/proc/healthcheck() - if(health <=0) - set_density(0) - qdel(src) - return - -/obj/structure/alien/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/structure/alien/ex_act(severity) - switch(severity) - if(1.0) - health-=50 - if(2.0) - health-=50 - if(3.0) - if (prob(50)) - health-=50 - else - health-=25 - healthcheck() - return - -/obj/structure/alien/hitby(AM as mob|obj) - ..() - visible_message(span_danger("\The [src] was hit by \the [AM].")) - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return - -/obj/structure/alien/attack_generic() - attack_hand(usr) - -/obj/structure/alien/attackby(var/obj/item/W, var/mob/user) - health = max(0, health - W.force) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - healthcheck() - ..() - return - -/obj/structure/alien/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 - if(istype(mover) && mover.checkpass(PASSGLASS)) - return !opacity - return !density diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 157c0b8548..4049671428 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -15,8 +15,8 @@ GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/mop) w_class = ITEMSIZE_NORMAL flags = NOCONDUCT attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - var/mopping = 0 - var/mopcount = 0 + ///How long it takes to mop a tile. + var/mop_time = 4 SECONDS /obj/item/mop/Initialize(mapload) . = ..() @@ -31,7 +31,7 @@ GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/mop) user.visible_message(span_warning("[user] begins to clean \the [get_turf(A)].")) - if(do_after(user, 4 SECONDS, target = src)) + if(do_after(user, mop_time, target = src, max_interact_count = 9)) var/turf/T = get_turf(A) if(T) T.wash(CLEAN_SCRUB) @@ -59,23 +59,4 @@ GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/mop) w_class = ITEMSIZE_NORMAL flags = NOCONDUCT attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") - -/obj/item/mop/advanced/Initialize(mapload) - . = ..() - create_reagents(30) - -/obj/item/mop/advanced/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) - if(reagents.total_volume < 1) - to_chat(user, span_notice("Your mop is dry!")) - return - - user.visible_message(span_warning("[user] begins to clean \the [get_turf(A)].")) - - if(do_after(user, 2 SECONDS, target = src)) - var/turf/T = get_turf(A) - if(T) - T.wash(CLEAN_SCRUB) - reagents.trans_to_turf(T, 1, 10) - to_chat(user, span_notice("You have finished mopping!")) + mop_time = 2 SECONDS diff --git a/code/game/objects/structures/alien/alien.dm b/code/game/objects/structures/alien/alien.dm index 5011b900b9..970e7b67d0 100644 --- a/code/game/objects/structures/alien/alien.dm +++ b/code/game/objects/structures/alien/alien.dm @@ -33,14 +33,19 @@ healthcheck() return -/obj/structure/alien/hitby(AM as mob|obj) +/obj/structure/alien/hitby(atom/movable/source) ..() - visible_message(span_danger("\The [src] was hit by \the [AM].")) - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce + visible_message(span_danger("\The [src] was hit by \the [source].")) + var/tforce + if(ismob(source)) + tforce = 15 + else if(isobj(source)) + var/obj/object = source + if(isitem(object)) + var/obj/item/our_item = object + tforce = our_item.throwforce + else + tforce = object.w_class playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) health = max(0, health - tforce) healthcheck() diff --git a/code/game/objects/structures/gargoyle.dm b/code/game/objects/structures/gargoyle.dm index 6713920800..b8d940c4c1 100644 --- a/code/game/objects/structures/gargoyle.dm +++ b/code/game/objects/structures/gargoyle.dm @@ -285,17 +285,17 @@ tail_image.layer = BODY_LAYER + ((dir in tail_lower_dirs) ? TAIL_LOWER_LAYER : tail_layering) add_overlay(tail_image) -/obj/structure/gargoyle/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR) +/obj/structure/gargoyle/hitby(atom/movable/source ,var/speed = THROWFORCE_SPEED_DIVISOR) var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve() if(!gargoyle) return - if(istype(AM,/obj/item) && gargoyle.vore_selected && gargoyle.trash_catching) - var/obj/item/I = AM + if(isitem(source) && gargoyle.vore_selected && gargoyle.trash_catching) + var/obj/item/I = source if(gargoyle.adminbus_trash || is_type_in_list(I, GLOB.edible_trash) && I.trash_eatable && !is_type_in_list(I, GLOB.item_vore_blacklist)) - gargoyle.hitby(AM, speed) + gargoyle.hitby(source, speed) return - else if(isliving(AM)) - var/mob/living/L = AM + else if(isliving(source)) + var/mob/living/L = source if(gargoyle.throw_vore && L.throw_vore && gargoyle.can_be_drop_pred && L.can_be_drop_prey) var/drop_prey_temp = FALSE if(gargoyle.can_be_drop_prey) diff --git a/code/game/objects/structures/low_wall.dm b/code/game/objects/structures/low_wall.dm index d5b4f789fb..9669acc504 100644 --- a/code/game/objects/structures/low_wall.dm +++ b/code/game/objects/structures/low_wall.dm @@ -257,14 +257,14 @@ take_damage(damage) return -/obj/structure/low_wall/hitby(AM as mob|obj, var/speed) +/obj/structure/low_wall/hitby(atom/movable/source, var/speed) ..() var/tforce = 0 - if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm - var/mob/I = AM + if(ismob(source)) // All mobs have a multiplier and a size according to mob_defines.dm + var/mob/I = source tforce = I.mob_size * (speed/THROWFORCE_SPEED_DIVISOR) - else if(isitem(AM)) - var/obj/item/O = AM + else if(isitem(source)) + var/obj/item/O = source tforce = O.throwforce * (speed/THROWFORCE_SPEED_DIVISOR) if (tforce < 15) return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 7275f945a4..ad8d5912a9 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -162,21 +162,21 @@ return !anchored // If it's anchored, it'll block air. return TRUE // Don't stop airflow from the other sides. -/obj/structure/window/hitby(AM as mob|obj) +/obj/structure/window/hitby(atom/movable/source) ..() - visible_message(span_danger("[src] was hit by [AM].")) + visible_message(span_danger("[src] was hit by [source].")) var/tforce = 0 - if(ismob(AM)) + if(ismob(source)) tforce = 40 - else if(isobj(AM)) - var/obj/item/I = AM + else if(isobj(source)) + var/obj/item/I = source tforce = I.throwforce if(reinf) tforce *= 0.25 if(health - tforce <= 7 && !reinf) anchored = FALSE update_verbs() update_nearby_icons() - step(src, get_dir(AM, src)) + step(src, get_dir(source, src)) take_damage(tforce) /obj/structure/window/attack_tk(mob/user as mob) diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index a105ac6c1a..2a94f78c62 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -61,8 +61,8 @@ if(burn_stuff(AM)) START_PROCESSING(SSturfs, src) -/turf/simulated/floor/lava/hitby(atom/movable/AM) - if(burn_stuff(AM)) +/turf/simulated/floor/lava/hitby(atom/movable/source) + if(burn_stuff(source)) START_PROCESSING(SSturfs, src) /turf/simulated/floor/lava/process() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index ef0bb32d5f..5f438f3b28 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -96,13 +96,19 @@ take_damage(damage) return -/turf/simulated/wall/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) +/turf/simulated/wall/hitby(atom/movable/source, var/speed=THROWFORCE_SPEED_DIVISOR) ..() - if(ismob(AM)) + if(ismob(source)) return - - var/tforce = AM:throwforce * (speed/THROWFORCE_SPEED_DIVISOR) - if (tforce < 15) + var/tforce = 0 + if(isobj(source)) + var/obj/object = source + if(isitem(object)) + var/obj/item/our_item = object + tforce = our_item.throwforce * (speed/THROWFORCE_SPEED_DIVISOR) + else + tforce = object.w_class * (speed/THROWFORCE_SPEED_DIVISOR) + if(tforce < 15) return take_damage(tforce) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 2df61717b7..a0fa4812f5 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -347,14 +347,16 @@ return // Called when turf is hit by a thrown object -/turf/hitby(atom/movable/AM as mob|obj, var/speed) - if(density) - if(!get_gravity(AM)) //Checked a different codebase for reference. Turns out it's only supposed to happen in no-gravity - spawn(2) - step(AM, turn(AM.last_move, 180)) //This makes it float away after hitting a wall in 0G - if(isliving(AM)) - var/mob/living/M = AM - M.turf_collision(src, speed) +/turf/hitby(atom/movable/source, var/speed) + if(!density) + return + + if(!get_gravity(source)) //Checked a different codebase for reference. Turns out it's only supposed to happen in no-gravity + spawn(2) + step(source, turn(source.last_move, 180)) //This makes it float away after hitting a wall in 0G + if(isliving(source)) + var/mob/living/M = source + M.turf_collision(src, speed) /turf/AllowDrop() return TRUE diff --git a/code/game/turfs/unsimulated/sky_vr.dm b/code/game/turfs/unsimulated/sky_vr.dm index 01e603052e..6249efb101 100644 --- a/code/game/turfs/unsimulated/sky_vr.dm +++ b/code/game/turfs/unsimulated/sky_vr.dm @@ -41,15 +41,15 @@ do_fall(AM) -/turf/unsimulated/floor/sky/hitby(var/atom/movable/AM, var/speed) +/turf/unsimulated/floor/sky/hitby(var/atom/movable/source, var/speed) . = ..() if(!does_skyfall) return //We don't do that - do_fall(AM) + do_fall(source) -/turf/unsimulated/floor/sky/proc/do_fall(atom/movable/AM) +/turf/unsimulated/floor/sky/proc/do_fall(atom/movable/source) //Bye var/attempts = 100 var/turf/simulated/T @@ -65,8 +65,8 @@ if(!T) return - AM.forceMove(T) - if(isliving(AM)) - var/mob/living/L = AM - message_admins("\The [AM] fell out of the sky.") + source.forceMove(T) + if(isliving(source)) + var/mob/living/L = source + message_admins("\The [source] fell out of the sky.") L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index fdcb825a9f..9b385944ae 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -101,10 +101,10 @@ return 1 //end the search! return 0 -/obj/item/assembly/mousetrap/hitby(var/atom/movable/A) +/obj/item/assembly/mousetrap/hitby(var/atom/movable/source) if(!armed) return ..() - visible_message(span_warning("[src] is triggered by [A].")) + visible_message(span_warning("[src] is triggered by [source].")) triggered(null) /obj/item/assembly/mousetrap/armed diff --git a/code/modules/awaymissions/redgate.dm b/code/modules/awaymissions/redgate.dm index 1f1f02f866..92b156dd40 100644 --- a/code/modules/awaymissions/redgate.dm +++ b/code/modules/awaymissions/redgate.dm @@ -1759,39 +1759,41 @@ ball.item_state = "[initial(ball.item_state)]" ball.update_icon() -/obj/structure/hyperball_goal/hitby(obj/B as obj) +/obj/structure/hyperball_goal/hitby(atom/movable/source) . = ..() - if(istype(B,/obj/item/laserdome_hyperball)) - var/obj/item/laserdome_hyperball/ball = B - if(prob(range_dunk_chance)) - if(ball.last_team != goal_team) - GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball for [capitalize(ball.last_team)] team! [num2text(range_dunk_points)] points scored!","Laserdome Announcer","Entertainment") - score += range_dunk_points //increment our score! - if(score < score_limit) //announce the current score and how many more captures are needed - GLOB.global_announcer.autosay("[num2text(score_limit-score)] points remain until [capitalize(ball.last_team)] team wins.","Laserdome Announcer","Entertainment") - else if(score >= score_limit) //now, if score equals or exceeds the score limit, announce that our team won and reset the score for all flag bases nearby - GLOB.global_announcer.autosay("+|[uppertext(ball.last_team)] TEAM HAS WON THE MATCH!|+","Laserdome Announcer","Entertainment") - for(var/obj/structure/hyperball_goal/HB in src.loc.loc.contents) //this feels dirty, but it works - HB.score = 0 - else if(ball.last_team == goal_team) //discourage people from dunking the ball into their own goal as a quick way to teleport it back to the midfield - switch(goal_team) //this gets a bit fiddly because we store our score on the target's goal, so we need to scan the map for the opposing team's goal and deduct points from it - if("blue") - for(var/obj/structure/hyperball_goal/red/HGR in src.loc.loc.contents) - HGR.score = max(0,HGR.score-range_dunk_points) - GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball and scored an own goal! +Points |de-ducted!|+ [capitalize(goal_team)] team score is now: [HGR.score].","Laserdome Announcer","Entertainment") - if("red") - for(var/obj/structure/hyperball_goal/blue/HGB in src.loc.loc.contents) - HGB.score = max(0,HGB.score-range_dunk_points) - GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball and scored an own goal! +Points |de-ducted!|+ [capitalize(goal_team)] team score is now: [HGB.score].","Laserdome Announcer","Entertainment") + if(!istype(source, /obj/item/laserdome_hyperball)) + return - ball.loc = ball.start_pos //teleport the ball back to the midfield - ball.icon_state = "[initial(ball.icon_state)]" - ball.item_state = "[initial(ball.item_state)]" - ball.update_icon() - else - //todo; throw the ball in a random direction - src.visible_message("\The [ball] bounces off \the [src]'s rim!") - GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball and +missed!+ |Oooh!|","Laserdome Announcer","Entertainment") + var/obj/item/laserdome_hyperball/ball = source + if(prob(range_dunk_chance)) + if(ball.last_team != goal_team) + GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball for [capitalize(ball.last_team)] team! [num2text(range_dunk_points)] points scored!","Laserdome Announcer","Entertainment") + score += range_dunk_points //increment our score! + if(score < score_limit) //announce the current score and how many more captures are needed + GLOB.global_announcer.autosay("[num2text(score_limit-score)] points remain until [capitalize(ball.last_team)] team wins.","Laserdome Announcer","Entertainment") + else if(score >= score_limit) //now, if score equals or exceeds the score limit, announce that our team won and reset the score for all flag bases nearby + GLOB.global_announcer.autosay("+|[uppertext(ball.last_team)] TEAM HAS WON THE MATCH!|+","Laserdome Announcer","Entertainment") + for(var/obj/structure/hyperball_goal/HB in src.loc.loc.contents) //this feels dirty, but it works + HB.score = 0 + else if(ball.last_team == goal_team) //discourage people from dunking the ball into their own goal as a quick way to teleport it back to the midfield + switch(goal_team) //this gets a bit fiddly because we store our score on the target's goal, so we need to scan the map for the opposing team's goal and deduct points from it + if("blue") + for(var/obj/structure/hyperball_goal/red/HGR in src.loc.loc.contents) + HGR.score = max(0,HGR.score-range_dunk_points) + GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball and scored an own goal! +Points |de-ducted!|+ [capitalize(goal_team)] team score is now: [HGR.score].","Laserdome Announcer","Entertainment") + if("red") + for(var/obj/structure/hyperball_goal/blue/HGB in src.loc.loc.contents) + HGB.score = max(0,HGB.score-range_dunk_points) + GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball and scored an own goal! +Points |de-ducted!|+ [capitalize(goal_team)] team score is now: [HGB.score].","Laserdome Announcer","Entertainment") + + ball.loc = ball.start_pos //teleport the ball back to the midfield + ball.icon_state = "[initial(ball.icon_state)]" + ball.item_state = "[initial(ball.item_state)]" + ball.update_icon() + else + //todo; throw the ball in a random direction + src.visible_message("\The [ball] bounces off \the [src]'s rim!") + GLOB.global_announcer.autosay("[ball.last_holder] threw the HYPERball and +missed!+ |Oooh!|","Laserdome Announcer","Entertainment") /obj/structure/prop/machine/biosyphon/laserdome name = "Laserdome Orientation Holo" diff --git a/code/modules/food/kitchen/smartfridge/smartfridge_vr.dm b/code/modules/food/kitchen/smartfridge/smartfridge_vr.dm index e35c7878f0..1708bf97fe 100644 --- a/code/modules/food/kitchen/smartfridge/smartfridge_vr.dm +++ b/code/modules/food/kitchen/smartfridge/smartfridge_vr.dm @@ -19,22 +19,22 @@ /* * Allow thrown items into smartfridges */ -/obj/machinery/smartfridge/hitby(var/atom/movable/A, speed) +/obj/machinery/smartfridge/hitby(var/atom/movable/source, speed) . = ..() - if(accept_check(A) && A.thrower) + if(accept_check(source) && source.thrower) //Try to find what job they are via ID var/obj/item/card/id/thrower_id - if(ismob(A.thrower)) - var/mob/T = A.thrower + if(ismob(source.thrower)) + var/mob/T = source.thrower thrower_id = T.GetIdCard() //98% chance the expert makes it if(expert_job && thrower_id && thrower_id.rank == expert_job && prob(98)) - stock(A) + stock(source) //20% chance a non-expert makes it else if(prob(20)) - stock(A) + stock(source) /* * Chemistry 'chemavator' (multi-z chem storage) diff --git a/code/modules/maint_recycler/code/maint_recycler.dm b/code/modules/maint_recycler/code/maint_recycler.dm index b15b371eb7..54bafdb839 100644 --- a/code/modules/maint_recycler/code/maint_recycler.dm +++ b/code/modules/maint_recycler/code/maint_recycler.dm @@ -244,23 +244,25 @@ -/obj/machinery/maint_recycler/hitby(atom/movable/AM) +/obj/machinery/maint_recycler/hitby(atom/movable/source) . = ..() - if(istype(AM, /obj/item) && !istype(AM, /obj/item/projectile)) //no mob throwing. - if(prob(75)) - if(get_item_whitelist(AM) == RECYCLER_ALLOWED) - if(inserted_item == null) - visible_message("\The [AM] lands in \the [src].",runemessage = "swish") - AM.forceMove(src) - inserted_item = AM - update_icon() - playsound(src, 'code/modules/maint_recycler/sfx/voice/a wonderful throw.ogg', 75) - set_screen_state("screen_happy",10) - return - else - deny_act(AM,null) + if(!isitem(source) || istype(source, /obj/item/projectile)) //no mob throwing. + return - visible_message("\The [AM] bounces off of the rim of \the [src]'s processing compartment!") + if(prob(75)) + if(get_item_whitelist(source) == RECYCLER_ALLOWED) + if(inserted_item == null) + visible_message("\The [source] lands in \the [src].",runemessage = "swish") + source.forceMove(src) + inserted_item = source + update_icon() + playsound(src, 'code/modules/maint_recycler/sfx/voice/a wonderful throw.ogg', 75) + set_screen_state("screen_happy",10) + return + else + deny_act(source, null) + + visible_message("\The [source] bounces off of the rim of \the [src]'s processing compartment!") /obj/machinery/maint_recycler/proc/deny_act(var/obj/item/O,var/mob/user) set_screen_state("screen_deny",10) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index eb7351bdcd..afb7e3cec6 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -389,7 +389,7 @@ emp_act return 1 //this proc handles being hit by a thrown atom -/mob/living/carbon/human/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR) +/mob/living/carbon/human/hitby(atom/movable/source, var/speed = THROWFORCE_SPEED_DIVISOR) if(src.is_incorporeal()) return // if(buckled && buckled == AM) @@ -398,8 +398,8 @@ emp_act //VORESTATION EDIT START - Allows for thrown vore! //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. // I put more comments here for ease of reading. - if(isliving(AM)) - var/mob/living/thrown_mob = AM + if(isliving(source)) + var/mob/living/thrown_mob = source if(isanimal(thrown_mob) && !allowmobvore && !thrown_mob.ckey) //Is the thrown_mob an animal and we don't allow mobvore? return // PERSON BEING HIT: CAN BE DROP PRED, ALLOWS THROW VORE. @@ -423,8 +423,8 @@ emp_act return //VORESTATION EDIT END - Allows for thrown vore! - if(istype(AM,/obj/item)) - var/obj/item/O = AM + if(isitem(source)) + var/obj/item/O = source if(stat != DEAD && trash_catching && vore_selected) if(adminbus_trash || is_type_in_list(O, GLOB.edible_trash) && O.trash_eatable && !is_type_in_list(O, GLOB.item_vore_blacklist)) visible_message(span_vwarning("[O] is thrown directly into [src]'s [lowertext(vore_selected.name)]!")) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 1ea39c7c50..3fb31cb608 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -268,11 +268,11 @@ return 1 //this proc handles being hit by a thrown atom -/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR)//Standardization and logging -Sieve +/mob/living/hitby(atom/movable/source, var/speed = THROWFORCE_SPEED_DIVISOR)//Standardization and logging -Sieve if(is_incorporeal()) return - if(istype(AM,/obj/item)) - var/obj/item/O = AM + if(isitem(source)) + var/obj/item/O = source if(stat != DEAD && trash_catching && vore_selected) if(adminbus_trash || is_type_in_list(O, GLOB.edible_trash) && O.trash_eatable && !is_type_in_list(O, GLOB.item_vore_blacklist)) visible_message(span_vwarning("[O] is thrown directly into [src]'s [lowertext(vore_selected.name)]!")) @@ -337,8 +337,8 @@ //VORESTATION EDIT START - Allows for thrown vore! //CHOMPEdit Start //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. - if(isliving(AM)) - var/mob/living/thrown_mob = AM + if(isliving(source)) + var/mob/living/thrown_mob = source // PERSON BEING HIT: CAN BE DROP PRED, ALLOWS THROW VORE. // PERSON BEING THROWN: DEVOURABLE, ALLOWS THROW VORE, CAN BE DROP PREY. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm index 15e22e6874..040900e723 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm @@ -1439,13 +1439,13 @@ var/mobstuff = TRUE //if false, we don't care about dogs, and that's terrible var/we_process = FALSE //don't start another process while you're processing, idiot -/turf/simulated/floor/water/digestive_enzymes/Entered(atom/movable/AM) - if(digest_stuff(AM) && !we_process) +/turf/simulated/floor/water/digestive_enzymes/Entered(atom/movable/source) + if(digest_stuff(source) && !we_process) START_PROCESSING(SSturfs, src) we_process = TRUE -/turf/simulated/floor/water/digestive_enzymes/hitby(atom/movable/AM) - if(digest_stuff(AM) && !we_process) +/turf/simulated/floor/water/digestive_enzymes/hitby(atom/movable/source) + if(digest_stuff(source) && !we_process) START_PROCESSING(SSturfs, src) we_process = TRUE @@ -1454,12 +1454,12 @@ we_process = FALSE return PROCESS_KILL -/turf/simulated/floor/water/digestive_enzymes/proc/can_digest(atom/movable/AM as mob|obj) +/turf/simulated/floor/water/digestive_enzymes/proc/can_digest(atom/movable/digest_target) . = FALSE - if(AM.loc != src) + if(digest_target.loc != src) return FALSE - if(isitem(AM)) - var/obj/item/I = AM + if(isitem(digest_target)) + var/obj/item/I = digest_target if(I.unacidable || I.throwing || I.is_incorporeal()) return FALSE var/food = FALSE @@ -1476,8 +1476,8 @@ yum += 50 linked_mob.adjust_nutrition(yum) return TRUE - if(isliving(AM)) - var/mob/living/L = AM + if(isliving(digest_target)) + var/mob/living/L = digest_target if(L.unacidable || !L.digestable || L.buckled || L.hovering || L.throwing || L.is_incorporeal()) return FALSE if(ishuman(L)) @@ -1488,7 +1488,7 @@ return TRUE else return TRUE -/turf/simulated/floor/water/digestive_enzymes/proc/digest_stuff(atom/movable/AM) //I'm so sorry +/turf/simulated/floor/water/digestive_enzymes/proc/digest_stuff(atom/movable/digest_target) //I'm so sorry . = FALSE var/damage = 1 @@ -1574,7 +1574,7 @@ if(!we_process) START_PROCESSING(SSturfs, src) -/turf/simulated/floor/flesh/mover/hitby(atom/movable/AM) +/turf/simulated/floor/flesh/mover/hitby(atom/movable/source) if(!we_process) START_PROCESSING(SSturfs, src) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 8b382b410e..3572062e95 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -84,9 +84,9 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr A.fall() // Called when thrown object lands on this turf. -/turf/simulated/open/hitby(var/atom/movable/AM, var/speed) +/turf/simulated/open/hitby(var/atom/movable/source, var/speed) . = ..() - AM.fall() + source.fall() /turf/simulated/open/examine(mob/user, distance, infix, suffix) . = ..() diff --git a/code/modules/recycling/disposal_machines.dm b/code/modules/recycling/disposal_machines.dm index 199fcf2201..e0937ef2fc 100644 --- a/code/modules/recycling/disposal_machines.dm +++ b/code/modules/recycling/disposal_machines.dm @@ -419,22 +419,22 @@ update() // update icon return -/obj/machinery/disposal/hitby(atom/movable/AM) +/obj/machinery/disposal/hitby(atom/movable/source) . = ..() - if(istype(AM, /obj/item) && !istype(AM, /obj/item/projectile)) + if(isitem(source) && !istype(source, /obj/item/projectile)) if(prob(75)) - AM.forceMove(src) - visible_message("\The [AM] lands in \the [src].") + source.forceMove(src) + visible_message("\The [source] lands in \the [src].") else - visible_message("\The [AM] bounces off of \the [src]'s rim!") + visible_message("\The [source] bounces off of \the [src]'s rim!") - if(istype(AM,/mob/living)) + if(isliving(source)) if(prob(75)) - var/mob/living/to_be_dunked = AM - if(ishuman(AM) ||to_be_dunked.client) - log_and_message_admins("[AM] was thrown into \the [src]", null) - AM.forceMove(src) - visible_message("\The [AM] lands in \the [src].") + var/mob/living/to_be_dunked = source + if(ishuman(source) ||to_be_dunked.client) + log_and_message_admins("[source] was thrown into \the [src]", null) + source.forceMove(src) + visible_message("\The [source] lands in \the [src].") /obj/machinery/disposal/wall name = "inset disposal unit" diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index d7536808b2..f73dd14de9 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -28,18 +28,18 @@ AM.forceMove(src) flush() -/obj/machinery/disposal/deliveryChute/hitby(atom/movable/AM) - if(!QDELETED(AM) || (istype(AM, /obj/item) || istype(AM, /mob/living)) && !istype(AM, /obj/item/projectile)) +/obj/machinery/disposal/deliveryChute/hitby(atom/movable/source) + if(!QDELETED(source) || (isitem(source) || isliving(source)) && !istype(source, /obj/item/projectile)) switch(dir) if(NORTH) - if(AM.loc.y != src.loc.y+1) return ..() + if(source.loc.y != src.loc.y+1) return ..() if(EAST) - if(AM.loc.x != src.loc.x+1) return ..() + if(source.loc.x != src.loc.x+1) return ..() if(SOUTH) - if(AM.loc.y != src.loc.y-1) return ..() + if(source.loc.y != src.loc.y-1) return ..() if(WEST) - if(AM.loc.x != src.loc.x-1) return ..() - AM.forceMove(src) + if(source.loc.x != src.loc.x-1) return ..() + source.forceMove(src) flush() /obj/machinery/disposal/deliveryChute/attackby(var/obj/item/I, var/mob/user) diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index bd6d01ba7f..538a224c72 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -91,16 +91,21 @@ qdel(src) -/obj/machinery/shield/hitby(AM as mob|obj) +/obj/machinery/shield/hitby(atom/movable/source) //Let everyone know we've been hit! - visible_message(span_danger("\The [src] was hit by [AM].")) + visible_message(span_danger("\The [src] was hit by [source].")) //Super realistic, resource-intensive, real-time damage calculations. var/tforce = 0 - if(ismob(AM)) + if(ismob(source)) tforce = 40 - else - tforce = AM:throwforce + if(isobj(source)) + var/obj/object = source + if(isitem(object)) + var/obj/item/our_item = object + tforce = our_item.throwforce + else + tforce = object.w_class src.health -= tforce diff --git a/modular_chomp/code/game/objects/structures/desert_planet_structures.dm b/modular_chomp/code/game/objects/structures/desert_planet_structures.dm index 334cbcb640..d7b62e30bd 100644 --- a/modular_chomp/code/game/objects/structures/desert_planet_structures.dm +++ b/modular_chomp/code/game/objects/structures/desert_planet_structures.dm @@ -25,11 +25,11 @@ name = "sandy pebble" density = FALSE -/obj/structure/prop/desert_rock/pebble/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) +/obj/structure/prop/desert_rock/pebble/Crossed(atom/movable/source) + if(source.is_incorporeal()) return - if(istype(AM, /mob/living)) - var/mob/living/M = AM + if(istype(source, /mob/living)) + var/mob/living/M = source if(M.m_intent == I_RUN && prob(5)) M.Weaken(2) to_chat(M, "You trip over the [src]!") diff --git a/modular_chomp/code/game/turfs/simulated/shuttlewalls.dm b/modular_chomp/code/game/turfs/simulated/shuttlewalls.dm index 671cfbe1b5..1915cc9ff7 100644 --- a/modular_chomp/code/game/turfs/simulated/shuttlewalls.dm +++ b/modular_chomp/code/game/turfs/simulated/shuttlewalls.dm @@ -90,12 +90,15 @@ take_damage(damage) return -/turf/simulated/shuttlewalls/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) +/turf/simulated/shuttlewalls/hitby(atom/movable/source, var/speed=THROWFORCE_SPEED_DIVISOR) ..() - if(ismob(AM)) + if(ismob(source)) return - var/tforce = AM:throwforce * (speed/THROWFORCE_SPEED_DIVISOR) + var/tforce = 0 + if(isitem(source)) + var/obj/item/O = source + tforce = O.throwforce * (speed/THROWFORCE_SPEED_DIVISOR) if (tforce < 15) return diff --git a/modular_chomp/code/modules/lore_codex/cooking_codex.dm b/modular_chomp/code/modules/lore_codex/cooking_codex.dm index 2979b6fbf5..5f8ee3683b 100644 --- a/modular_chomp/code/modules/lore_codex/cooking_codex.dm +++ b/modular_chomp/code/modules/lore_codex/cooking_codex.dm @@ -91,10 +91,10 @@ if(LAZYLEN(R.items)) var/i = 0 - for(var/atom/movable/AM as anything in R.items) // Atom typepath + for(var/atom/movable/source in R.items) // Atom typepath if(i) text += ", " - text += "[capitalize(initial(AM.name))]" + text += "[capitalize(initial(source.name))]" i++ D.data += span_bold("Material Objects") + ": [text ? text : "none"]
" text = "" diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm index 36506b2deb..8dbee90bfe 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm @@ -334,11 +334,11 @@ ANT STRUCTURES name = "spore trap" var/modifiertype = /datum/modifier/berserk -/obj/effect/ant_structure/trap/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) +/obj/effect/ant_structure/trap/Crossed(atom/movable/source) + if(source.is_incorporeal()) return - if(anchored && isliving(AM)) - var/mob/living/L = AM + if(anchored && isliving(source)) + var/mob/living/L = source if(L == /mob/living/simple_mob/animal/tyr/mineral_ants) return else if(L.m_intent == I_RUN) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/heads.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/heads.dm index bc10cc7bac..baac16eb8a 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/heads.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/heads.dm @@ -544,10 +544,10 @@ var/health = 5 var/modifiertype = /datum/modifier/poisoned/weak -/obj/effect/slimeattack/Crossed(atom/movable/AM as mob|obj) - if(AM.is_incorporeal()) +/obj/effect/slimeattack/Crossed(atom/movable/source) + if(source.is_incorporeal()) return - Bumped(AM) + Bumped(source) /obj/effect/slimeattack/attackby(var/obj/item/W, var/mob/user) user.setClickCooldown(user.get_attack_speed(W))