mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 03:26:31 +01:00
Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts: # _maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm # _maps/RandomRuins/SpaceRuins/garbagetruck2.dmm # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # _maps/map_files/tramstation/tramstation.dmm # code/_onclick/hud/new_player.dm # code/datums/components/squashable.dm # code/datums/diseases/advance/symptoms/heal.dm # code/datums/diseases/chronic_illness.dm # code/datums/status_effects/buffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/stamcrit.dm # code/game/machinery/computer/crew.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/wall_mounted.dm # code/game/turfs/closed/indestructible.dm # code/modules/admin/view_variables/filterrific.dm # code/modules/antagonists/heretic/influences.dm # code/modules/cargo/orderconsole.dm # code/modules/client/preferences.dm # code/modules/events/space_vines/vine_mutations.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/carbon/human/death.dm # code/modules/mob/living/carbon/human/species_types/jellypeople.dm # code/modules/mob/living/damage_procs.dm # code/modules/mob/living/living.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mob_spawn/mob_spawn.dm # code/modules/projectiles/ammunition/energy/laser.dm # code/modules/projectiles/guns/ballistic/launchers.dm # code/modules/projectiles/guns/energy/laser.dm # code/modules/reagents/chemistry/machinery/chem_dispenser.dm # code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/medicine_reagents.dm # code/modules/surgery/healing.dm # code/modules/unit_tests/designs.dm # icons/mob/inhands/items_lefthand.dmi # icons/mob/inhands/items_righthand.dmi # tgui/packages/tgui/interfaces/ChemDispenser.tsx
This commit is contained in:
@@ -6,22 +6,79 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
///The final object to construct after mount
|
||||
var/result_path
|
||||
var/wall_external = FALSE // For frames that are external to the wall they are placed on, like light fixtures and cameras.
|
||||
var/pixel_shift //The amount of pixels
|
||||
/// For frames that are external to the wall they are placed on, like light fixtures and cameras.
|
||||
var/wall_external = FALSE
|
||||
//The amount of pixels to shift when mounted
|
||||
var/pixel_shift
|
||||
var/multi_use = 0 //BUBBER EDIT ADDITION - User for lewd portals to allow you to place more than one
|
||||
var/bypass_unpowered = FALSE //BUBBER EDIT ADDITION - Some wallframes can be placed in unpowered areas, specifically lewd portals in this case
|
||||
var/bypass_floor = FALSE //BUBBER EDIT ADDITION - Some wallframes can be placed in areas without floors, specifically lewd portals in this case
|
||||
|
||||
/obj/item/wallframe/proc/try_build(turf/on_wall, mob/user)
|
||||
if(get_dist(on_wall,user) > 1)
|
||||
/**
|
||||
* Returns an structure to mount on from the atom passed
|
||||
* for e.g if its not an closed turf then return an structure on the turf to mount on
|
||||
* Arguments
|
||||
* * atom/structure - the atom or something in this atom we are trying to mount on
|
||||
*/
|
||||
/obj/item/wallframe/proc/find_support_structure(atom/structure)
|
||||
SHOULD_BE_PURE(TRUE)
|
||||
|
||||
return isclosedturf(structure) ? structure : null
|
||||
|
||||
/obj/item/wallframe/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
||||
var/atom/support_structure = find_support_structure(interacting_with)
|
||||
if(isnull(support_structure))
|
||||
return NONE
|
||||
if(!try_build(support_structure, user))
|
||||
return ITEM_INTERACT_FAILURE
|
||||
|
||||
playsound(loc, 'sound/machines/click.ogg', 75, TRUE)
|
||||
user.visible_message(span_notice("[user.name] attaches [src] to the wall."),
|
||||
span_notice("You attach [src] to the wall."),
|
||||
span_hear("You hear clicking."))
|
||||
|
||||
var/floor_to_support = get_dir(user, support_structure)
|
||||
var/obj/hanging_object = new result_path(get_turf(user))
|
||||
hanging_object.setDir(floor_to_support)
|
||||
if(pixel_shift)
|
||||
switch(floor_to_support)
|
||||
if(NORTH)
|
||||
hanging_object.pixel_y = pixel_shift
|
||||
if(SOUTH)
|
||||
hanging_object.pixel_y = -pixel_shift
|
||||
if(EAST)
|
||||
hanging_object.pixel_x = pixel_shift
|
||||
if(WEST)
|
||||
hanging_object.pixel_x = -pixel_shift
|
||||
if(!hanging_object.find_and_hang_on_atom())
|
||||
to_chat(user, span_warning("[src] Could not find all to mount on!."))
|
||||
return
|
||||
after_attach(hanging_object)
|
||||
qdel(src)
|
||||
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/**
|
||||
* Check if we can build on this support structure
|
||||
*
|
||||
* Arguments
|
||||
* * atom/support - the atom we are trying to mount on
|
||||
* * mob/user - the player attempting to do the mount
|
||||
*/
|
||||
/obj/item/wallframe/proc/try_build(atom/support, mob/user)
|
||||
if(get_dist(support, user) > 1)
|
||||
balloon_alert(user, "you are too far!")
|
||||
return
|
||||
var/floor_to_wall = get_dir(user, on_wall)
|
||||
if(!(floor_to_wall in GLOB.cardinals))
|
||||
return FALSE
|
||||
var/floor_to_support = get_dir(user, support)
|
||||
if(!(floor_to_support in GLOB.cardinals))
|
||||
balloon_alert(user, "stand in line with wall!")
|
||||
return
|
||||
return FALSE
|
||||
var/turf/T = get_turf(user)
|
||||
if(!isfloorturf(T))
|
||||
balloon_alert(user, "cannot place here!")
|
||||
return FALSE
|
||||
var/area/A = get_area(T)
|
||||
if(!isfloorturf(T) && !bypass_floor) //BUBBER EDIT - allows for wallmounts in floorless areas
|
||||
balloon_alert(user, "cannot place here!")
|
||||
@@ -29,12 +86,18 @@
|
||||
if(A.always_unpowered && !bypass_unpowered) //BUBBER EDIT - allows for wallmounts in unpowered areas
|
||||
balloon_alert(user, "cannot place in this area!")
|
||||
return
|
||||
if(check_wall_item(T, floor_to_wall, wall_external))
|
||||
if(check_wall_item(T, floor_to_support, wall_external))
|
||||
balloon_alert(user, "already something here!")
|
||||
return
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Stuff to do after wallframe attached to support atom
|
||||
*
|
||||
* Arguments
|
||||
* * obj/attached_to - the object that has been created on the atom
|
||||
*/
|
||||
/obj/item/wallframe/proc/attach(turf/on_wall, mob/user)
|
||||
if(result_path)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 75, TRUE)
|
||||
@@ -55,7 +118,7 @@
|
||||
hanging_object.pixel_x = pixel_shift
|
||||
if(WEST)
|
||||
hanging_object.pixel_x = -pixel_shift
|
||||
hanging_object.find_and_hang_on_wall()
|
||||
hanging_object.find_and_hang_on_atom()
|
||||
after_attach(hanging_object)
|
||||
//BUBBER EDIT START - For lewd_portals, you can place multiple with the same frame.
|
||||
if(multi_use > 1)
|
||||
@@ -69,11 +132,7 @@
|
||||
transfer_fingerprints_to(attached_to)
|
||||
|
||||
/obj/item/wallframe/screwdriver_act(mob/living/user, obj/item/tool)
|
||||
// For camera-building borgs
|
||||
var/turf/wall_turf = get_step(get_turf(user), user.dir)
|
||||
if(iswallturf(wall_turf))
|
||||
wall_turf.item_interaction(user, src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
return interact_with_atom(get_step(get_turf(user), user.dir), user)
|
||||
|
||||
/obj/item/wallframe/wrench_act(mob/living/user, obj/item/tool)
|
||||
var/metal_amt = round(custom_materials[GET_MATERIAL_REF(/datum/material/iron)]/SHEET_MATERIAL_AMOUNT) //Replace this shit later
|
||||
|
||||
Reference in New Issue
Block a user