From f40f07b0334805821aca51fc113a3481c7961bac Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 1 Apr 2020 12:05:27 +0300 Subject: [PATCH] [READY]Skateboard overhaul (#45657) * skeet skeet * scoot * removes debug message * merge conflict * oopsie * polish, new board types * begone * actioninja review * passtable trait * fixes indent * dwarfism check * check for existing flag * check existing trait * screwdriver returns FALSE --- code/__HELPERS/mobs.dm | 13 +++ code/datums/mutations/body.dm | 4 +- code/game/objects/items/weaponry.dm | 29 ++++- code/modules/vehicles/scooter.dm | 136 ++++++++++++++++++----- code/modules/vehicles/vehicle_actions.dm | 38 +++++++ code/modules/vending/games.dm | 2 + icons/mob/actions/actions_vehicle.dmi | Bin 1670 -> 2684 bytes sound/vehicles/skateboard_ollie.ogg | Bin 0 -> 11140 bytes sound/vehicles/skateboard_roll.ogg | Bin 0 -> 10708 bytes 9 files changed, 192 insertions(+), 30 deletions(-) create mode 100644 sound/vehicles/skateboard_ollie.ogg create mode 100644 sound/vehicles/skateboard_roll.ogg diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 339069a364..5f53bab65c 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -582,3 +582,16 @@ GLOBAL_LIST_EMPTY(species_list) chosen = pick(mob_spawn_meancritters) var/mob/living/simple_animal/C = new chosen(spawn_location) return C + +/proc/passtable_on(target, source) + var/mob/living/L = target + if (!HAS_TRAIT(L, TRAIT_PASSTABLE) && L.pass_flags & PASSTABLE) + ADD_TRAIT(L, TRAIT_PASSTABLE, INNATE_TRAIT) + ADD_TRAIT(L, TRAIT_PASSTABLE, source) + L.pass_flags |= PASSTABLE + +/proc/passtable_off(target, source) + var/mob/living/L = target + REMOVE_TRAIT(L, TRAIT_PASSTABLE, source) + if(!HAS_TRAIT(L, TRAIT_PASSTABLE)) + L.pass_flags &= ~PASSTABLE diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index a32220aa43..453a36e66b 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -64,14 +64,14 @@ if(..()) return owner.transform = owner.transform.Scale(1, 0.8) - owner.pass_flags |= PASSTABLE + passtable_on(owner, GENETIC_MUTATION) owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..") /datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner) if(..()) return owner.transform = owner.transform.Scale(1, 1.25) - owner.pass_flags &= ~PASSTABLE + passtable_off(owner, GENETIC_MUTATION) owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..") diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index b7b25f0b5a..c7bf31a7d3 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -488,7 +488,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 icon_state = "catwhip" /obj/item/melee/skateboard - name = "skateboard" + name = "improvised skateboard" desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." icon_state = "skateboard" item_state = "skateboard" @@ -496,11 +496,36 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throwforce = 4 w_class = WEIGHT_CLASS_NORMAL attack_verb = list("smacked", "whacked", "slammed", "smashed") + ///The vehicle counterpart for the board + var/board_item_type = /obj/vehicle/ridden/scooter/skateboard /obj/item/melee/skateboard/attack_self(mob/user) - new /obj/vehicle/ridden/scooter/skateboard(get_turf(user)) + new board_item_type(get_turf(user)) qdel(src) +/obj/item/melee/skateboard/pro + name = "skateboard" + desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made." + icon_state = "skateboard2" + item_state = "skateboard2" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro + custom_premium_price = 300 + +/obj/item/melee/skateboard/hoverboard + name = "hoverboard" + desc = "A blast from the past, so retro!" + icon_state = "hoverboard_red" + item_state = "hoverboard_red" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard + custom_premium_price = 2015 + +/obj/item/melee/skateboard/hoverboard/admin + name = "\improper Board Of Directors" + desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." + icon_state = "hoverboard_nt" + item_state = "hoverboard_nt" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin + /obj/item/melee/baseball_bat name = "baseball bat" desc = "There ain't a skull in the league that can withstand a swatter." diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 0dd7ff32a8..d60201eec8 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -40,11 +40,23 @@ . = ..() /obj/vehicle/ridden/scooter/skateboard - name = "skateboard" - desc = "An unfinished scooter which can only barely be called a skateboard. It's still rideable, but probably unsafe. Looks like you'll need to add a few rods to make handlebars. Alt-click to adjust speed." + name = "improvised skateboard" + desc = "An unfinished scooter which can only barely be called a skateboard. It's still rideable, but probably unsafe. Looks like you'll need to add a few rods to make handlebars." icon_state = "skateboard" density = FALSE - var/adjusted_speed = FALSE + arms_required = 0 + fall_off_if_missing_arms = FALSE + var/datum/effect_system/spark_spread/sparks + ///Whether the board is currently grinding + var/grinding = FALSE + ///Stores the time of the last crash plus a short cooldown, affects availability and outcome of certain actions + var/next_crash + ///Stores the default icon state + var/board_icon = "skateboard" + ///The handheld item counterpart for the board + var/board_item_type = /obj/item/melee/skateboard + ///Stamina drain multiplier + var/instability = 10 /obj/vehicle/ridden/scooter/skateboard/Initialize() . = ..() @@ -54,6 +66,23 @@ D.set_vehicle_dir_layer(NORTH, OBJ_LAYER) D.set_vehicle_dir_layer(EAST, OBJ_LAYER) D.set_vehicle_dir_layer(WEST, OBJ_LAYER) + sparks = new + sparks.set_up(1, 0, src) + sparks.attach(src) + +/obj/vehicle/ridden/scooter/skateboard/Destroy() + if(sparks) + QDEL_NULL(sparks) + . = ..() + +/obj/vehicle/ridden/scooter/skateboard/relaymove() + if (grinding || world.time < next_crash) + return FALSE + return ..() + +/obj/vehicle/ridden/scooter/skateboard/generate_actions() + . = ..() + initialize_controller_action_type(/datum/action/vehicle/ridden/scooter/skateboard/ollie, VEHICLE_CONTROL_DRIVE) /obj/vehicle/ridden/scooter/skateboard/post_buckle_mob(mob/living/M)//allows skateboards to be non-dense but still allows 2 skateboarders to collide with each other density = TRUE @@ -68,17 +97,52 @@ . = ..() if(A.density && has_buckled_mobs()) var/mob/living/H = buckled_mobs[1] - var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) - unbuckle_mob(H) - H.throw_at(throw_target, 4, 3) - H.Knockdown(100) - H.adjustStaminaLoss(40) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) - if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3) - H.updatehealth() - visible_message("[src] crashes into [A], sending [H] flying!") - playsound(src, 'sound/effects/bang.ogg', 50, 1) + H.adjustStaminaLoss(instability*6) + playsound(src, 'sound/effects/bang.ogg', 40, TRUE) + if(!iscarbon(H) || H.getStaminaLoss() >= 100 || grinding || world.time < next_crash) + var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) + unbuckle_mob(H) + H.throw_at(throw_target, 3, 2) + var/head_slot = H.get_item_by_slot(SLOT_HEAD) + if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) + H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) + H.updatehealth() + visible_message("[src] crashes into [A], sending [H] flying!") + H.Paralyze(80) + else + var/backdir = turn(dir, 180) + vehicle_move(backdir) + H.spin(4, 1) + next_crash = world.time + 10 + +///Moves the vehicle forward and if it lands on a table, repeats +/obj/vehicle/ridden/scooter/skateboard/proc/grind() + vehicle_move(dir) + if(has_buckled_mobs() && locate(/obj/structure/table) in loc.contents) + var/mob/living/L = buckled_mobs[1] + L.adjustStaminaLoss(instability*0.5) + if (L.getStaminaLoss() >= 100) + playsound(src, 'sound/effects/bang.ogg', 20, TRUE) + unbuckle_mob(L) + 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) + grinding = FALSE + icon_state = board_icon + return + 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), 2) + return + else + grinding = FALSE + icon_state = board_icon /obj/vehicle/ridden/scooter/skateboard/MouseDrop(atom/over_object) . = ..() @@ -89,22 +153,42 @@ to_chat(M, "You can't lift this up when somebody's on it.") return if(over_object == M) - var/obj/item/melee/skateboard/board = new /obj/item/melee/skateboard() + var/board = new board_item_type(get_turf(M)) M.put_in_hands(board) qdel(src) -/obj/vehicle/ridden/scooter/skateboard/AltClick(mob/user) - . = ..() - var/datum/component/riding/R = src.GetComponent(/datum/component/riding) - if (!adjusted_speed) - R.vehicle_move_delay = 0 - to_chat(user, "You adjust the wheels on [src] to make it go faster.") - adjusted_speed = TRUE +/obj/vehicle/ridden/scooter/skateboard/pro + name = "skateboard" + desc = "A RaDSTORMz brand professional skateboard. Looks a lot more stable than the average board." + icon_state = "skateboard2" + board_icon = "skateboard2" + board_item_type = /obj/item/melee/skateboard/pro + instability = 6 + +/obj/vehicle/ridden/scooter/skateboard/hoverboard/ + name = "hoverboard" + desc = "A blast from the past, so retro!" + board_item_type = /obj/item/melee/skateboard/hoverboard + instability = 3 + icon_state = "hoverboard_red" + board_icon = "hoverboard_red" + +/obj/vehicle/ridden/scooter/skateboard/hoverboard/screwdriver_act(mob/living/user, obj/item/I) + return FALSE + +/obj/vehicle/ridden/scooter/skateboard/hoverboard/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/stack/rods)) + return else - R.vehicle_move_delay = 1 - to_chat(user, "You adjust the wheels on [src] to make it go slower.") - adjusted_speed = FALSE - return TRUE + return ..() + +/obj/vehicle/ridden/scooter/skateboard/hoverboard/admin + name = "\improper Board Of Directors" + desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." + board_item_type = /obj/item/melee/skateboard/hoverboard/admin + instability = 0 + icon_state = "hoverboard_nt" + board_icon = "hoverboard_nt" //CONSTRUCTION /obj/item/scooter_frame diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index c780ce6fd3..fa6df2b74b 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -164,3 +164,41 @@ if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar)) var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target C.RollTheDice(owner) + + +/datum/action/vehicle/ridden/scooter/skateboard/ollie + name = "Ollie" + desc = "Get some air! Land on a table to do a gnarly grind." + button_icon_state = "skateboard_ollie" + ///Cooldown to next jump + var/next_ollie + +/datum/action/vehicle/ridden/scooter/skateboard/ollie/Trigger() + if(world.time > next_ollie) + var/obj/vehicle/ridden/scooter/skateboard/V = vehicle_target + if (V.grinding) + return + var/mob/living/L = owner + var/turf/landing_turf = get_step(V.loc, V.dir) + L.adjustStaminaLoss(V.instability*2) + if (L.getStaminaLoss() >= 100) + playsound(src, 'sound/effects/bang.ogg', 20, TRUE) + V.unbuckle_mob(L) + L.throw_at(landing_turf, 2, 2) + L.Paralyze(40) + V.visible_message("[L] misses the landing and falls on [L.p_their()] face!") + else + L.spin(4, 1) + animate(L, pixel_y = -6, time = 4) + animate(V, pixel_y = -6, time = 3) + playsound(V, 'sound/vehicles/skateboard_ollie.ogg', 50, TRUE) + passtable_on(L, VEHICLE_TRAIT) + V.pass_flags |= PASSTABLE + L.Move(landing_turf, vehicle_target.dir) + passtable_off(L, VEHICLE_TRAIT) + V.pass_flags &= ~PASSTABLE + if(locate(/obj/structure/table) in V.loc.contents) + V.grinding = TRUE + V.icon_state = "[V.board_icon]-grind" + addtimer(CALLBACK(V, /obj/vehicle/ridden/scooter/skateboard/.proc/grind), 2) + next_ollie = world.time + 5 diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index 14ce7a83b7..e663dca7ce 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -8,6 +8,8 @@ /obj/item/toy/cards/deck/cas = 3, /obj/item/toy/cards/deck/cas/black = 3) contraband = list(/obj/item/dice/fudge = 9) + premium = list(/obj/item/melee/skateboard/pro = 3, + /obj/item/melee/skateboard/hoverboard = 1) refill_canister = /obj/item/vending_refill/games /obj/item/vending_refill/games diff --git a/icons/mob/actions/actions_vehicle.dmi b/icons/mob/actions/actions_vehicle.dmi index cee683c60d89a6b2d756c4eb1f84244aa8c1a7d8..0d8d322653ad995dbad950ce90436dd015ef3f73 100644 GIT binary patch delta 2487 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 T!z>5y00000NkvXXu0mjf{xzL2 diff --git a/sound/vehicles/skateboard_ollie.ogg b/sound/vehicles/skateboard_ollie.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5f0f2fc30b194d3e359f0bb7daa30af4100c9dde GIT binary patch literal 11140 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