diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 270c08b774f..75cdd4456ab 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -14,36 +14,32 @@ /obj/vehicle/ridden/scooter/wrench_act(mob/living/user, obj/item/I) ..() to_chat(user, "You begin to remove the handlebars...") - if(I.use_tool(src, user, 40, volume=50)) - var/obj/vehicle/ridden/scooter/skateboard/improvised/S = new(drop_location()) - new /obj/item/stack/rods(drop_location(), 2) - to_chat(user, "You remove the handlebars from [src].") - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - S.buckle_mob(H) - qdel(src) + if(!I.use_tool(src, user, 40, volume=50)) + return TRUE + var/obj/vehicle/ridden/scooter/skateboard/improvised/skater = new(drop_location()) + new /obj/item/stack/rods(drop_location(), 2) + to_chat(user, "You remove the handlebars from [src].") + if(has_buckled_mobs()) + var/mob/living/carbon/carbons = buckled_mobs[1] + unbuckle_mob(carbons) + skater.buckle_mob(carbons) + qdel(src) return TRUE /obj/vehicle/ridden/scooter/Moved() . = ..() - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m + for(var/mob/living/buckled_mob as anything in buckled_mobs) if(buckled_mob.num_legs > 0) buckled_mob.pixel_y = 5 else buckled_mob.pixel_y = -4 -/obj/vehicle/ridden/scooter/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) - if(!istype(M)) - return FALSE - return ..() - /obj/vehicle/ridden/scooter/skateboard name = "skateboard" desc = "An old, battered skateboard. It's still rideable, but probably unsafe." icon_state = "skateboard" density = FALSE + ///Sparks datum for when we grind on tables var/datum/effect_system/spark_spread/sparks ///Whether the board is currently grinding var/grinding = FALSE @@ -66,7 +62,7 @@ /obj/vehicle/ridden/scooter/skateboard/Destroy() if(sparks) QDEL_NULL(sparks) - . = ..() + return ..() /obj/vehicle/ridden/scooter/skateboard/relaymove(mob/living/user, direction) if (grinding || world.time < next_crash) @@ -119,43 +115,42 @@ icon_state = "[initial(icon_state)]" return - var/mob/living/L = buckled_mobs[1] - L.adjustStaminaLoss(instability*0.5) - if (L.getStaminaLoss() >= 100) + var/mob/living/skater = buckled_mobs[1] + skater.adjustStaminaLoss(instability*0.5) + if (skater.getStaminaLoss() >= 100) obj_flags = CAN_BE_HIT playsound(src, 'sound/effects/bang.ogg', 20, TRUE) - unbuckle_mob(L) + unbuckle_mob(skater) var/atom/throw_target = get_edge_target_turf(src, pick(GLOB.cardinals)) - L.throw_at(throw_target, 2, 2) - visible_message("[L] loses [L.p_their()] footing and slams on the ground!") - L.Paralyze(40) + skater.throw_at(throw_target, 2, 2) + visible_message("[skater] loses [skater.p_their()] footing and slams on the ground!") + skater.Paralyze(40) grinding = FALSE icon_state = "[initial(icon_state)]" - else - playsound(src, 'sound/vehicles/skateboard_roll.ogg', 50, TRUE) - if(prob (25)) - var/turf/location = get_turf(loc) - if(location) - location.hotspot_expose(1000,1000) - sparks.start() //the most radical way to start plasma fires - addtimer(CALLBACK(src, .proc/grind), 1) + return + playsound(src, 'sound/vehicles/skateboard_roll.ogg', 50, TRUE) + if(prob(25)) + var/turf/location = get_turf(src) + if(location) + location.hotspot_expose(1000,1000) + sparks.start() //the most radical way to start plasma fires + addtimer(CALLBACK(src, .proc/grind), 1) /obj/vehicle/ridden/scooter/skateboard/MouseDrop(atom/over_object) . = ..() - var/mob/living/carbon/Skater = usr - if(!istype(Skater)) + var/mob/living/carbon/skater = usr + if(!istype(skater)) return - if (over_object == Skater) - pick_up_board(Skater) + if (over_object == skater) + pick_up_board(skater) -/obj/vehicle/ridden/scooter/skateboard/proc/pick_up_board(mob/living/carbon/Skater) - if (Skater.incapacitated() || !Adjacent(Skater)) +/obj/vehicle/ridden/scooter/skateboard/proc/pick_up_board(mob/living/carbon/skater) + if (skater.incapacitated() || !Adjacent(skater)) return if(has_buckled_mobs()) - to_chat(Skater, "You can't lift this up when somebody's on it.") + to_chat(skater, "You can't lift this up when somebody's on it.") return - var/board = new board_item_type(get_turf(Skater)) - Skater.put_in_hands(board) + skater.put_in_hands(new board_item_type(get_turf(skater))) qdel(src) /obj/vehicle/ridden/scooter/skateboard/pro @@ -193,16 +188,16 @@ w_class = WEIGHT_CLASS_NORMAL /obj/item/scooter_frame/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/sheet/iron)) - if(!I.tool_start_check(user, amount=5)) - return - to_chat(user, "You begin to add wheels to [src].") - if(I.use_tool(src, user, 80, volume=50, amount=5)) - to_chat(user, "You finish making wheels for [src].") - new /obj/vehicle/ridden/scooter/skateboard/improvised(user.loc) - qdel(src) - else + if(!istype(I, /obj/item/stack/sheet/iron)) return ..() + if(!I.tool_start_check(user, amount=5)) + return + to_chat(user, "You begin to add wheels to [src].") + if(!I.use_tool(src, user, 80, volume=50, amount=5)) + return + to_chat(user, "You finish making wheels for [src].") + new /obj/vehicle/ridden/scooter/skateboard/improvised(user.loc) + qdel(src) /obj/item/scooter_frame/wrench_act(mob/living/user, obj/item/I) ..() @@ -216,33 +211,35 @@ return /obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/rods)) - if(!I.tool_start_check(user, amount=2)) - return - to_chat(user, "You begin making handlebars for [src].") - if(I.use_tool(src, user, 25, volume=50, amount=2)) - to_chat(user, "You add the rods to [src], creating handlebars.") - var/obj/vehicle/ridden/scooter/S = new(loc) - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - S.buckle_mob(H) - qdel(src) - else + if(!istype(I, /obj/item/stack/rods)) return ..() + if(!I.tool_start_check(user, amount=2)) + return + to_chat(user, "You begin making handlebars for [src].") + if(!I.use_tool(src, user, 25, volume=50, amount=2)) + return + to_chat(user, "You add the rods to [src], creating handlebars.") + var/obj/vehicle/ridden/scooter/skaterskoot = new(loc) + if(has_buckled_mobs()) + var/mob/living/carbon/skaterboy = buckled_mobs[1] + unbuckle_mob(skaterboy) + skaterskoot.buckle_mob(skaterboy) + qdel(src) /obj/vehicle/ridden/scooter/skateboard/improvised/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE + . = ..() + if(.) + return to_chat(user, "You begin to deconstruct and remove the wheels on [src]...") - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, "You deconstruct the wheels on [src].") - new /obj/item/stack/sheet/iron(drop_location(), 5) - new /obj/item/scooter_frame(drop_location()) - if(has_buckled_mobs()) - var/mob/living/carbon/H = buckled_mobs[1] - unbuckle_mob(H) - qdel(src) + if(!I.use_tool(src, user, 20, volume=50)) + return + to_chat(user, "You deconstruct the wheels on [src].") + new /obj/item/stack/sheet/iron(drop_location(), 5) + new /obj/item/scooter_frame(drop_location()) + if(has_buckled_mobs()) + var/mob/living/carbon/skatergirl = buckled_mobs[1] + unbuckle_mob(skatergirl) + qdel(src) return TRUE //Wheelys @@ -256,13 +253,15 @@ var/obj/item/clothing/shoes/wheelys/shoes = null ///Name of the wheels, for visible messages var/wheel_name = "wheels" + ///Component typepath to attach in [/obj/vehicle/ridden/scooter/skateboard/wheelys/proc/make_ridable()] + var/component_type = /datum/component/riding/vehicle/scooter/skateboard/wheelys /obj/vehicle/ridden/scooter/skateboard/wheelys/make_ridable() - AddElement(/datum/element/ridable, /datum/component/riding/vehicle/scooter/skateboard/wheelys) + AddElement(/datum/element/ridable, component_type) /obj/vehicle/ridden/scooter/skateboard/wheelys/post_unbuckle_mob(mob/living/M) if(!has_buckled_mobs()) - to_chat(M, "You pop the wheels back into place.") + to_chat(M, "You pop the [wheel_name] back into place.") moveToNullspace() shoes.toggle_wheels(FALSE) return ..() @@ -283,15 +282,11 @@ name = "roller skates" desc = "An EightO brand pair of roller skates. Vintage, yet functional!" instability = 8 - -/obj/vehicle/ridden/scooter/skateboard/wheelys/rollerskates/make_ridable() - AddElement(/datum/element/ridable, /datum/component/riding/vehicle/scooter/skateboard/wheelys/rollerskates) + component_type = /datum/component/riding/vehicle/scooter/skateboard/wheelys/rollerskates /obj/vehicle/ridden/scooter/skateboard/wheelys/skishoes name = "ski shoes" desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." instability = 8 wheel_name = "skis" - -/obj/vehicle/ridden/scooter/skateboard/wheelys/skishoes/make_ridable() - AddElement(/datum/element/ridable, /datum/component/riding/vehicle/scooter/skateboard/wheelys/skishoes) + component_type = /datum/component/riding/vehicle/scooter/skateboard/wheelys/skishoes diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 7f62e45d4f0..46f7502997a 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -31,8 +31,8 @@ . = ..() if(istype(A, /obj/machinery/door)) var/obj/machinery/door/conditionalwall = A - for(var/m in occupants) - conditionalwall.bumpopen(m) + for(var/occupant in occupants) + conditionalwall.bumpopen(occupant) /obj/vehicle/sealed/after_add_occupant(mob/M) . = ..() diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index fb1f169e8e9..d73e4cae7e0 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -28,39 +28,45 @@ smoke.set_up(0, src) smoke.start() -/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, params) - if(W.tool_behaviour == TOOL_WELDER && !user.combat_mode) - if(obj_integrity < max_integrity) - if(W.use_tool(src, user, 0, volume = 50, amount = 1)) - user.visible_message("[user] repairs some damage to [name].", "You repair some damage to \the [src].") - obj_integrity += min(10, max_integrity-obj_integrity) - if(obj_integrity == max_integrity) - to_chat(user, "It looks to be fully repaired now.") - return TRUE +/obj/vehicle/ridden/secway/welder_act(mob/living/user, obj/item/I) + . = ..() + if(.) + return + if(obj_integrity >= max_integrity) + to_chat(user, "It is fully repaired already!") + return + if(!I.use_tool(src, user, 0, volume = 50, amount = 1)) + return + user.visible_message("[user] repairs some damage to [name].", "You repair some damage to \the [src].") + obj_integrity += min(10, max_integrity-obj_integrity) + if(obj_integrity >= max_integrity) + to_chat(user, "It looks to be fully repaired now.") + STOP_PROCESSING(SSobj, src) - if(istype(W, /obj/item/food/grown/banana)) - // ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now! - user.visible_message("[user] begins stuffing [W] into [src]'s tailpipe.", "You begin stuffing [W] into [src]'s tailpipe...", ignored_mobs = occupants) - if(do_after(user, 3 SECONDS, src)) - if(user.transferItemToLoc(W, src)) - user.visible_message("[user] stuffs [W] into [src]'s tailpipe.", "You stuff [W] into [src]'s tailpipe.", ignored_mobs = occupants) - eddie_murphy = W +/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, params) + if(!istype(W, /obj/item/food/grown/banana)) + return ..() + // ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now! + user.visible_message("[user] begins stuffing [W] into [src]'s tailpipe.", "You begin stuffing [W] into [src]'s tailpipe...", ignored_mobs = occupants) + if(!do_after(user, 3 SECONDS, src)) return TRUE - return ..() + if(user.transferItemToLoc(W, src)) + user.visible_message("[user] stuffs [W] into [src]'s tailpipe.", "You stuff [W] into [src]'s tailpipe.", ignored_mobs = occupants) + eddie_murphy = W + return TRUE /obj/vehicle/ridden/secway/attack_hand(mob/living/user, list/modifiers) - if(eddie_murphy) // v lol - user.visible_message("[user] begins cleaning [eddie_murphy] out of [src].", "You begin cleaning [eddie_murphy] out of [src]...") - if(do_after(user, 60, target = src)) - user.visible_message("[user] cleans [eddie_murphy] out of [src].", "You manage to get [eddie_murphy] out of [src].") - eddie_murphy.forceMove(drop_location()) - eddie_murphy = null - return - return ..() + if(!eddie_murphy) + return ..() + user.visible_message("[user] begins cleaning [eddie_murphy] out of [src].", "You begin cleaning [eddie_murphy] out of [src]...") + if(!do_after(user, 60, target = src)) + return ..() + user.visible_message("[user] cleans [eddie_murphy] out of [src].", "You manage to get [eddie_murphy] out of [src].") + eddie_murphy.forceMove(drop_location()) + eddie_murphy = null /obj/vehicle/ridden/secway/examine(mob/user) . = ..() - if(eddie_murphy) . += "Something appears to be stuck in its exhaust..." @@ -72,9 +78,10 @@ STOP_PROCESSING(SSobj,src) return ..() +//bullets will have a 60% chance to hit any riders /obj/vehicle/ridden/secway/bullet_act(obj/projectile/P) - if(prob(60) && buckled_mobs) - for(var/mob/M in buckled_mobs) - M.bullet_act(P) - return TRUE - return ..() + if(!buckled_mobs || prob(40)) + return ..() + for(var/mob/rider as anything in buckled_mobs) + rider.bullet_act(P) + return TRUE diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index c22399c66da..76daf9ce369 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -3,13 +3,11 @@ icon = 'icons/obj/bike.dmi' icon_state = "speedbike_blue" layer = LYING_MOB_LAYER - var/overlay_state = "cover_blue" - var/mutable_appearance/overlay + var/cover_iconstate = "cover_blue" /obj/vehicle/ridden/speedbike/Initialize() . = ..() - overlay = mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER) - add_overlay(overlay) + add_overlay(image(icon, cover_iconstate, ABOVE_MOB_LAYER)) AddElement(/datum/element/ridable, /datum/component/riding/vehicle/speedbike) /obj/vehicle/ridden/speedbike/Move(newloc,move_dir) @@ -19,7 +17,7 @@ /obj/vehicle/ridden/speedbike/red icon_state = "speedbike_red" - overlay_state = "cover_red" + cover_iconstate = "cover_red" //BM SPEEDWAGON @@ -29,15 +27,15 @@ icon = 'icons/obj/car.dmi' icon_state = "speedwagon" layer = LYING_MOB_LAYER - var/static/mutable_appearance/overlay = mutable_appearance(icon, "speedwagon_cover", ABOVE_MOB_LAYER) max_buckled_mobs = 4 - var/crash_all = FALSE //CHAOS pixel_y = -48 pixel_x = -48 + ///Determines whether we throw all things away when ramming them or just mobs, varedit only + var/crash_all = FALSE /obj/vehicle/ridden/speedwagon/Initialize() . = ..() - add_overlay(overlay) + add_overlay(image(icon, "speedwagon_cover", ABOVE_MOB_LAYER)) AddElement(/datum/element/ridable, /datum/component/riding/vehicle/speedwagon) /obj/vehicle/ridden/speedwagon/Bump(atom/A) @@ -45,22 +43,22 @@ if(!A.density || !has_buckled_mobs()) return - var/atom/throw_target = get_edge_target_turf(A, dir) if(crash_all) if(ismovable(A)) var/atom/movable/AM = A - AM.throw_at(throw_target, 4, 3) + AM.throw_at(get_edge_target_turf(A, dir), 4, 3) visible_message("[src] crashes into [A]!") playsound(src, 'sound/effects/bang.ogg', 50, TRUE) - if(ishuman(A)) - var/mob/living/carbon/human/H = A - H.Paralyze(100) - H.adjustStaminaLoss(30) - H.apply_damage(rand(20,35), BRUTE) - if(!crash_all) - H.throw_at(throw_target, 4, 3) - visible_message("[src] crashes into [H]!") - playsound(src, 'sound/effects/bang.ogg', 50, TRUE) + if(!ishuman(A)) + return + var/mob/living/carbon/human/rammed = A + rammed.Paralyze(100) + rammed.adjustStaminaLoss(30) + rammed.apply_damage(rand(20,35), BRUTE) + if(!crash_all) + rammed.throw_at(get_edge_target_turf(A, dir), 4, 3) + visible_message("[src] crashes into [rammed]!") + playsound(src, 'sound/effects/bang.ogg', 50, TRUE) /obj/vehicle/ridden/speedwagon/Moved() . = ..()