mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-06 06:40:42 +01:00
cdc32fed9c
## About The Pull Request Laptops have a slowdown when held in hand that could easily be bypassed by just dragging the laptop instead so you can interact with it with no slowdown. It is the same slowdown from dragging lockers with 1.5, and by tests, looks like the same slowdown given to laptop when held even if I couldn't easily find the value properly defined anywhere... ## Why It's Good For The Game If we designed Laptops to be better PDAs but with a bulkyness side effect, kinda silly to let it be easily bypassed like this... ## Changelog 🆑 Guillaume Prata fix: Laptops now give a slowdown when dragged, patching the easy trick of dragging a laptop to bypass the slowdown for carrying it on hand. /🆑
127 lines
3.0 KiB
Plaintext
127 lines
3.0 KiB
Plaintext
/obj/item/modular_computer/laptop
|
|
name = "laptop"
|
|
desc = "A portable laptop computer."
|
|
|
|
icon = 'icons/obj/modular_laptop.dmi'
|
|
icon_state = "laptop-closed"
|
|
icon_state_powered = "laptop"
|
|
icon_state_unpowered = "laptop-off"
|
|
icon_state_menu = "menu"
|
|
|
|
hardware_flag = PROGRAM_LAPTOP
|
|
max_idle_programs = 3
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
|
|
// No running around with open laptops in hands.
|
|
item_flags = SLOWS_WHILE_IN_HAND
|
|
|
|
drag_slowdown = 0
|
|
screen_on = FALSE // Starts closed
|
|
var/start_open = TRUE // unless this var is set to 1
|
|
var/icon_state_closed = "laptop-closed"
|
|
var/w_class_open = WEIGHT_CLASS_BULKY
|
|
var/slowdown_open = 1
|
|
|
|
/obj/item/modular_computer/laptop/examine(mob/user)
|
|
. = ..()
|
|
if(screen_on)
|
|
. += span_notice("Alt-click to close it.")
|
|
|
|
/obj/item/modular_computer/laptop/Initialize(mapload)
|
|
. = ..()
|
|
|
|
if(start_open && !screen_on)
|
|
toggle_open()
|
|
|
|
/obj/item/modular_computer/laptop/update_icon_state()
|
|
if(!screen_on)
|
|
icon_state = icon_state_closed
|
|
return
|
|
return ..()
|
|
|
|
/obj/item/modular_computer/laptop/update_overlays()
|
|
if(!screen_on)
|
|
cut_overlays()
|
|
return
|
|
return ..()
|
|
|
|
/obj/item/modular_computer/laptop/attack_self(mob/user)
|
|
if(!screen_on)
|
|
try_toggle_open(user)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/modular_computer/laptop/verb/open_computer()
|
|
set name = "Toggle Open"
|
|
set category = "Object"
|
|
set src in view(1)
|
|
|
|
try_toggle_open(usr)
|
|
|
|
/obj/item/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location)
|
|
. = ..()
|
|
if(over_object == usr || over_object == src)
|
|
try_toggle_open(usr)
|
|
return
|
|
if(istype(over_object, /atom/movable/screen/inventory/hand))
|
|
var/atom/movable/screen/inventory/hand/H = over_object
|
|
var/mob/M = usr
|
|
|
|
if(M.stat != CONSCIOUS || HAS_TRAIT(M, TRAIT_HANDS_BLOCKED))
|
|
return
|
|
if(!isturf(loc) || !Adjacent(M))
|
|
return
|
|
M.put_in_hand(src, H.held_index)
|
|
|
|
/obj/item/modular_computer/laptop/attack_hand(mob/user, list/modifiers)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(screen_on && isturf(loc))
|
|
return attack_self(user)
|
|
|
|
/obj/item/modular_computer/laptop/proc/try_toggle_open(mob/living/user)
|
|
if(issilicon(user))
|
|
return
|
|
if(!isturf(loc) && !ismob(loc)) // No opening it in backpack.
|
|
return
|
|
if(!user.can_perform_action(src))
|
|
return
|
|
|
|
toggle_open(user)
|
|
|
|
|
|
/obj/item/modular_computer/laptop/AltClick(mob/user)
|
|
. = ..()
|
|
if(!can_interact(user))
|
|
return
|
|
if(screen_on) // Close it.
|
|
try_toggle_open(user)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null)
|
|
if(screen_on)
|
|
to_chat(user, span_notice("You close \the [src]."))
|
|
slowdown = initial(slowdown)
|
|
w_class = initial(w_class)
|
|
drag_slowdown = initial(drag_slowdown)
|
|
else
|
|
to_chat(user, span_notice("You open \the [src]."))
|
|
slowdown = slowdown_open
|
|
w_class = w_class_open
|
|
drag_slowdown = slowdown_open
|
|
if(isliving(loc))
|
|
var/mob/living/localmob = loc
|
|
localmob.update_equipment_speed_mods()
|
|
localmob.update_pull_movespeed()
|
|
|
|
screen_on = !screen_on
|
|
update_appearance()
|
|
|
|
|
|
|
|
// Laptop frame, starts empty and closed.
|
|
/obj/item/modular_computer/laptop/buildable
|
|
start_open = FALSE
|