mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-22 04:24:20 +01:00
Minor Vehicle Refactor and Balance
This commit is contained in:
@@ -163,7 +163,7 @@
|
||||
desc = "A boat used for traversing lava."
|
||||
icon_state = "goliath_boat"
|
||||
icon = 'icons/obj/lavaland/dragonboat.dmi'
|
||||
keytype = /obj/item/oar
|
||||
held_key_type = /obj/item/oar
|
||||
burn_state = LAVA_PROOF
|
||||
|
||||
/obj/vehicle/lavaboat/relaymove(mob/user, direction)
|
||||
@@ -174,7 +174,7 @@
|
||||
..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Boats don't go on land!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/obj/item/oar
|
||||
name = "oar"
|
||||
@@ -218,7 +218,7 @@
|
||||
/obj/vehicle/lavaboat/dragon
|
||||
name = "mysterious boat"
|
||||
desc = "This boat moves where you will it, without the need for an oar."
|
||||
keytype = null
|
||||
held_key_type = null
|
||||
icon_state = "dragon_boat"
|
||||
generic_pixel_y = 2
|
||||
generic_pixel_x = 1
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "ambulance"
|
||||
desc = "This is what the paramedic uses to run over people they need to take to medbay."
|
||||
icon_state = "docwagon2"
|
||||
keytype = /obj/item/key/ambulance
|
||||
key_type = /obj/item/key/ambulance
|
||||
var/obj/structure/bed/amb_trolley/bed = null
|
||||
var/datum/action/ambulance_alarm/AA
|
||||
var/datum/looping_sound/ambulance_alarm/soundloop
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-earth technologies that are still relevant on most planet-bound outposts."
|
||||
icon = 'icons/vehicles/4wheeler.dmi'
|
||||
icon_state = "fourwheel"
|
||||
keytype = /obj/item/key
|
||||
key_type = /obj/item/key
|
||||
generic_pixel_x = 0
|
||||
generic_pixel_y = 4
|
||||
vehicle_move_delay = 1
|
||||
vehicle_move_delay = 1.5
|
||||
var/static/image/atvcover = null
|
||||
|
||||
/obj/vehicle/atv/New()
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
name = "janicart (pimpin' ride)"
|
||||
desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility."
|
||||
icon_state = "pussywagon"
|
||||
keytype = /obj/item/key/janitor
|
||||
var/obj/item/storage/bag/trash/mybag = null
|
||||
var/floorbuffer = 0
|
||||
key_type = /obj/item/key/janitor
|
||||
var/obj/item/storage/bag/trash/mybag
|
||||
var/floorbuffer = FALSE
|
||||
|
||||
|
||||
/obj/vehicle/janicart/handle_vehicle_offsets()
|
||||
@@ -63,21 +63,20 @@
|
||||
|
||||
/obj/vehicle/janicart/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/storage/bag/trash))
|
||||
if(keytype == /obj/item/key/janitor)
|
||||
if(!user.drop_item())
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You hook the trashbag onto \the [name].</span>")
|
||||
I.loc = src
|
||||
mybag = I
|
||||
else if(istype(I, /obj/item/janiupgrade))
|
||||
if(keytype == /obj/item/key/janitor)
|
||||
floorbuffer = 1
|
||||
qdel(I)
|
||||
to_chat(user,"<span class='notice'>You upgrade \the [name] with the floor buffer.</span>")
|
||||
update_icon()
|
||||
|
||||
..()
|
||||
|
||||
if(!user.drop_item())
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You hook the trashbag onto \the [name].</span>")
|
||||
I.forceMove(src)
|
||||
mybag = I
|
||||
update_icon()
|
||||
return
|
||||
if(istype(I, /obj/item/janiupgrade))
|
||||
floorbuffer = TRUE
|
||||
qdel(I)
|
||||
to_chat(user,"<span class='notice'>You upgrade [src] with the floor buffer.</span>")
|
||||
update_icon()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/janicart/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
name = "secway"
|
||||
desc = "A brave security cyborg gave its life to help you look like a complete tool."
|
||||
icon_state = "secway"
|
||||
keytype = /obj/item/key/security
|
||||
key_type = /obj/item/key/security
|
||||
generic_pixel_x = 0
|
||||
generic_pixel_y = 4
|
||||
vehicle_move_delay = 1.5
|
||||
|
||||
|
||||
/obj/item/key/security
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Wheeeeeeeeeeee."
|
||||
icon = 'icons/obj/vehicles.dmi'
|
||||
icon_state = "snowmobile"
|
||||
keytype = /obj/item/key/snowmobile
|
||||
key_type = /obj/item/key/snowmobile
|
||||
generic_pixel_x = 0
|
||||
generic_pixel_y = 4
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
icon = 'icons/obj/bike.dmi'
|
||||
icon_state = "speedbike_blue"
|
||||
layer = MOB_LAYER - 0.1
|
||||
keytype = null
|
||||
vehicle_move_delay = 0
|
||||
var/overlay_state = "cover_blue"
|
||||
var/image/overlay = null
|
||||
|
||||
@@ -9,8 +9,12 @@
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0)
|
||||
var/keytype = null //item typepath, if non-null an item of this type is needed in your hands to drive this vehicle
|
||||
var/next_vehicle_move = 0 //used for move delays
|
||||
var/key_type
|
||||
var/held_key_type //Similar to above, but the vehicle needs the key in hands as opposed to inserted into the ignition
|
||||
var/obj/item/key/inserted_key
|
||||
var/key_type_exact = TRUE //can subtypes work
|
||||
var/last_vehicle_move = 0 //used for move delays
|
||||
var/last_move_diagonal = FALSE
|
||||
var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower
|
||||
var/auto_door_open = TRUE
|
||||
var/needs_gravity = 0 //To allow non-space vehicles to move in no gravity or not, mostly for adminbus
|
||||
@@ -20,10 +24,56 @@
|
||||
var/spaceworthy = FALSE
|
||||
|
||||
|
||||
/obj/vehicle/New()
|
||||
..()
|
||||
/obj/vehicle/Initialize(mapload)
|
||||
. = ..()
|
||||
handle_vehicle_layer()
|
||||
|
||||
/obj/vehicle/Destroy()
|
||||
QDEL_NULL(inserted_key)
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/examine(mob/user)
|
||||
. = ..()
|
||||
if(key_type)
|
||||
if(!inserted_key)
|
||||
. += "<span class='notice'>Put a key inside it by clicking it with the key.</span>"
|
||||
else
|
||||
. += "<span class='notice'>Alt-click [src] to remove the key.</span>"
|
||||
|
||||
/obj/vehicle/attackby(obj/item/I, mob/user, params)
|
||||
if(key_type && !is_key(inserted_key) && is_key(I))
|
||||
if(user.drop_item())
|
||||
I.forceMove(src)
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src].</span>")
|
||||
if(inserted_key) //just in case there's an invalid key
|
||||
inserted_key.forceMove(drop_location())
|
||||
inserted_key = I
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[I] seems to be stuck to your hand!</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/AltClick(mob/user)
|
||||
if(inserted_key && user.Adjacent(user))
|
||||
if(!(user in buckled_mobs))
|
||||
to_chat(user, "<span class='warning'>You must be riding [src] to remove [src]'s key!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You remove [inserted_key] from [src].</span>")
|
||||
inserted_key.forceMove(drop_location())
|
||||
user.put_in_hands(inserted_key)
|
||||
inserted_key = null
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/proc/is_key(obj/item/I)
|
||||
return I ? (key_type_exact ? (I.type == key_type) : istype(I, key_type)) : FALSE
|
||||
|
||||
/obj/vehicle/proc/held_keycheck(mob/user)
|
||||
if(held_key_type)
|
||||
if(istype(user.l_hand, held_key_type) || istype(user.r_hand, held_key_type))
|
||||
return TRUE
|
||||
else
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
//APPEARANCE
|
||||
/obj/vehicle/proc/handle_vehicle_layer()
|
||||
@@ -49,15 +99,6 @@
|
||||
return
|
||||
|
||||
|
||||
//KEYS
|
||||
/obj/vehicle/proc/keycheck(mob/user)
|
||||
if(keytype)
|
||||
if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype))
|
||||
return TRUE
|
||||
else
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/key
|
||||
name = "key"
|
||||
desc = "A small grey key."
|
||||
@@ -93,25 +134,30 @@
|
||||
|
||||
//MOVEMENT
|
||||
/obj/vehicle/relaymove(mob/user, direction)
|
||||
if(key_type && !is_key(inserted_key))
|
||||
to_chat(user, "<span class='warning'>[src] has no key inserted!</span>")
|
||||
return
|
||||
|
||||
if(user.incapacitated())
|
||||
unbuckle_mob(user)
|
||||
return
|
||||
|
||||
if(world.time < next_vehicle_move)
|
||||
if(world.time < last_vehicle_move + ((last_move_diagonal? 2 : 1) * (vehicle_move_delay + config.human_delay)))
|
||||
return
|
||||
next_vehicle_move = world.time + vehicle_move_delay
|
||||
if(keycheck(user))
|
||||
last_vehicle_move = world.time
|
||||
|
||||
if(held_keycheck(user))
|
||||
var/turf/next = get_step(src, direction)
|
||||
if(!Process_Spacemove(direction) || !isturf(loc))
|
||||
return
|
||||
step(src, direction)
|
||||
|
||||
if(has_buckled_mobs())
|
||||
for(var/m in buckled_mobs)
|
||||
var/mob/living/buckled_mob = m
|
||||
if(buckled_mob.loc != loc)
|
||||
buckled_mob.buckled = null //Temporary, so Move() succeeds.
|
||||
buckled_mob.buckled = src //Restoring
|
||||
if((direction & (direction - 1)) && (loc == next)) //moved diagonally
|
||||
last_move_diagonal = TRUE
|
||||
else
|
||||
last_move_diagonal = FALSE
|
||||
|
||||
if(has_buckled_mobs())
|
||||
if(issimulatedturf(loc))
|
||||
var/turf/simulated/T = loc
|
||||
if(T.wet == TURF_WET_LUBE) //Lube! Fall off!
|
||||
@@ -125,20 +171,15 @@
|
||||
handle_vehicle_layer()
|
||||
handle_vehicle_offsets()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You'll need the keys in one of your hands to drive \the [name].</span>")
|
||||
to_chat(user, "<span class='warning'>You'll need the keys in one of your hands to drive [src].</span>")
|
||||
|
||||
|
||||
/obj/vehicle/Move(NewLoc,Dir=0,step_x=0,step_y=0)
|
||||
/obj/vehicle/Move(NewLoc, Dir = 0, step_x = 0, step_y = 0)
|
||||
. = ..()
|
||||
handle_vehicle_layer()
|
||||
handle_vehicle_offsets()
|
||||
|
||||
|
||||
/obj/vehicle/attackby(obj/item/I, mob/user, params)
|
||||
if(keytype && istype(I, keytype))
|
||||
to_chat(user, "Hold [I] in one of your hands while you drive \the [name].")
|
||||
|
||||
|
||||
/obj/vehicle/Bump(atom/movable/M)
|
||||
if(!spaceworthy && isspaceturf(get_turf(src)))
|
||||
return FALSE
|
||||
|
||||
Reference in New Issue
Block a user