Horizon mapping cleanup and bugfixes (#21450)

Fixes https://github.com/Aurorastation/Aurora.3/issues/21289
Fixes https://github.com/Aurorastation/Aurora.3/issues/15779

Handles a lot of mapping cleanup, container definitions for the Horizon,
and several bugfixes found along the way.

changes:
- code_imp: "Added set definitions for several Horizon-specific
containers."
- code_imp: "Updated 'full' material stacks on the Horizon from sneaky
var-edited singles to properly defined full stacks"
- code_imp: "Cleaned up all Air Alarms, Fire Alarms, and APCs on the
Horizon that were directional children with their dir var edited."
- code_imp: "Cleaned up all Power Cables on the Horizon that had d1 or
d2 var edited instead of just icon_state."
- code_imp: "Adjusted pixel shifts for 'south' (north-facing) Air
Alarms, Fire Alarms, APCs, and Extinguisher Cabinets to address layering
issues when standing vs. leaning."
- code_imp: "Minor refactor of shuttle/* Air Alarms and APCs to reduce
excess children; req_one_access perms now assigned based on
/area/horizon/shuttle/*."
  - qol: "Adds feedback hint for uses remaining to Emag cards."
- qol: "Added Tip about the shift-click behavior of the 'up-hint'/'Look
Up' button."
- bugfix: "See-through turfs (like lattices/catwalks over open space)
can now be Looked Up through from below."
- bugfix: "Fixed the shift-click behavior of 'up-hint'/'Look Up' button,
allowing you to see nearby turfs that can be Looked Up through."
- bugfix: "Maintenance Panels located on the floor have had their
layering issues fixed."
- bugfix: "Borg eye emissive effects MAYBE no longer visible through
higher z-levels."
- bugfix: "Added missing leanable component to window/shuttle obj type."
This commit is contained in:
Batrachophreno
2025-10-07 22:12:03 +00:00
committed by GitHub
parent dfe57a310f
commit 4d41b0595f
19 changed files with 5002 additions and 5541 deletions
+22 -16
View File
@@ -1,4 +1,4 @@
/*
/**
Screen objects
Todo: improve/re-implement
@@ -11,8 +11,10 @@
icon = 'icons/mob/screen/generic.dmi'
plane = HUD_PLANE
layer = HUD_BASE_LAYER
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
var/datum/hud/hud = null // A reference to the owner HUD, if any.
/// A reference to the object in the slot. Grabs or items, generally.
var/obj/master = null
/// A reference to the owner HUD, if any.
var/datum/hud/hud = null
appearance_flags = NO_CLIENT_COLOR
/atom/movable/screen/Initialize(mapload, ...)
@@ -27,7 +29,7 @@
hud = null
. = ..()
///Screen elements are always on top of the players screen and don't move so yes they are adjacent
/// Screen elements are always on top of the players screen and don't move so yes they are adjacent
/atom/movable/screen/Adjacent(atom/neighbor, atom/target, atom/movable/mover)
return TRUE
@@ -49,8 +51,10 @@
maptext_width = 480
/atom/movable/screen/inventory
var/slot_id //The identifier for the slot. It has nothing to do with ID cards.
var/list/object_overlays = list() // Required for inventory/screen overlays.
/// The identifier for the slot. It has nothing to do with ID cards.
var/slot_id
/// Required for inventory/screen overlays.
var/list/object_overlays = list()
var/color_changed = FALSE
/atom/movable/screen/inventory/MouseEntered()
@@ -294,6 +298,7 @@
if(!usr)
return TRUE
var/list/modifiers = params2list(params)
var/client/viewer_client = usr?.client
switch(name)
if("toggle")
if(usr.hud_used.inventory_shown)
@@ -344,20 +349,21 @@
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
if(H.last_special + 50 > world.time)
to_chat(usr, "You cannot do that again so quickly.")
return
H.last_special = world.time
to_chat(usr, SPAN_NOTICE("You take look around to see if there are any holes in the roof around."))
for(var/turf/T in view(usr.client.view + 3, usr)) // slightly extra to account for moving while looking for openness
for(var/turf/T in view(viewer_client.view, usr))
if(T.density)
continue
var/turf/above_turf = GET_TURF_ABOVE(T)
if(!isopenspace(above_turf))
if(!isopenturf(above_turf))
continue
var/image/up_image = image(icon = 'icons/mob/screen/generic.dmi', icon_state = "arrow_up", loc = T)
up_image.plane = LIGHTING_LAYER + 1
up_image.layer = LIGHTING_LAYER + 1
usr << up_image
QDEL_IN(up_image, 12)
var/image/point_up = image(icon = 'icons/mob/screen/generic.dmi', icon_state = "arrow_up", loc = T)
point_up.plane = DEFAULT_PLANE
point_up.layer = POINTER_LAYER
viewer_client?.images += point_up
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_image_from_client), point_up, viewer_client), 3 SECONDS)
return
if(!isliving(usr))
@@ -367,7 +373,7 @@
var/turf/T = GET_TURF_ABOVE(T1)
if (!T)
to_chat(user, SPAN_NOTICE("There is nothing above you!"))
else if (T.is_hole)
else if (isopenturf(T))
user.look_up_open_space(T1)
else
to_chat(user, SPAN_NOTICE("You see a ceiling staring back at you."))
@@ -466,7 +472,7 @@
name = "mov_intent"
screen_loc = ui_movi
//This updates the run/walk button on the hud
/// This updates the run/walk button on the hud.
/atom/movable/screen/movement_intent/proc/update_move_icon(var/mob/living/user)
if(!user.client)
return
@@ -547,7 +553,7 @@
#undef BLACKLIST_SPECIES_RUNNING
// Hand slots are special to handle the handcuffs overlay
/// Hand slots are special to handle the handcuffs overlay
/atom/movable/screen/inventory/hand
var/image/handcuff_overlay
var/image/disabled_hand_overlay
+2 -1
View File
@@ -57,7 +57,8 @@ GLOBAL_LIST_EMPTY(tips_by_category)
"Role-playing isn't easy, the wiki contains resources to help.",
"Trash piles are bounties of interesting loot, but you can also hide in them, just drag your sprite onto the pile.",
"Switching to another weapon is always faster than reloading.",
"Remember to turn off your VPN before you try and connect."
"Remember to turn off your VPN before you try and connect.",
"You can shift-click the 'up-hint' button (that shows you whether or not the turf above you can be Looked Up through) to see ALL nearby turfs that you can Look Up through."
)
/*
+1
View File
@@ -74,6 +74,7 @@
telecrystal_cost = 1
bluecrystal_cost = 1
path = /obj/item/card/emag
desc = "It's a card that can be used to override, booby-trap, manipulate, take over, and otherwise do nefarious things to a wide variety of objects. Has ten uses."
/datum/uplink_item/item/tools/personal_shield
name = "Personal Shield"
+17 -50
View File
@@ -307,65 +307,32 @@ pixel_x = 10;
req_access = null
highpower = 1
/obj/machinery/alarm/shuttle/intrepid
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_INTREPID)
/obj/machinery/alarm/shuttle/intrepid/north
/obj/machinery/alarm/shuttle/north
PRESET_NORTH
/obj/machinery/alarm/shuttle/intrepid/east
/obj/machinery/alarm/shuttle/east
PRESET_EAST
/obj/machinery/alarm/shuttle/intrepid/west
/obj/machinery/alarm/shuttle/west
PRESET_WEST
/obj/machinery/alarm/shuttle/intrepid/south
/obj/machinery/alarm/shuttle/south
PRESET_SOUTH
/obj/machinery/alarm/shuttle/spark
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_SPARK)
/// Assigns req_one_access perms associated with the area of the shuttle its mapped in.
/obj/machinery/alarm/shuttle/Initialize()
. = ..()
var/area = get_area(src)
/obj/machinery/alarm/shuttle/spark/north
PRESET_NORTH
if(istype(area, /area/horizon/shuttle/intrepid))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_INTREPID)
if(istype(area, /area/horizon/shuttle/quark))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_QUARK)
if(istype(area, /area/horizon/shuttle/mining))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_SPARK)
if(istype(area, /area/horizon/shuttle/canary))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_CANARY)
/obj/machinery/alarm/shuttle/spark/east
PRESET_EAST
/obj/machinery/alarm/shuttle/spark/west
PRESET_WEST
/obj/machinery/alarm/shuttle/spark/south
PRESET_SOUTH
/obj/machinery/alarm/shuttle/quark
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_QUARK)
/obj/machinery/alarm/shuttle/quark/north
PRESET_NORTH
/obj/machinery/alarm/shuttle/quark/east
PRESET_EAST
/obj/machinery/alarm/shuttle/quark/west
PRESET_WEST
/obj/machinery/alarm/shuttle/quark/south
PRESET_SOUTH
/obj/machinery/alarm/shuttle/canary
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_CANARY)
/obj/machinery/alarm/shuttle/canary/north
PRESET_NORTH
/obj/machinery/alarm/shuttle/canary/east
PRESET_EAST
/obj/machinery/alarm/shuttle/canary/west
PRESET_WEST
/obj/machinery/alarm/shuttle/canary/south
PRESET_SOUTH
/obj/machinery/alarm/server/Initialize()
. = ..()
@@ -433,7 +400,7 @@ pixel_x = 10;
/obj/machinery/alarm/set_pixel_offsets()
pixel_x = ((src.dir & (NORTH|SOUTH)) ? 0 : (src.dir == EAST ? 10 : -10))
pixel_y = ((src.dir & (NORTH|SOUTH)) ? (src.dir == NORTH ? 21 : -6) : 0)
pixel_y = ((src.dir & (NORTH|SOUTH)) ? (src.dir == NORTH ? 21 : -4) : 0)
/obj/machinery/alarm/proc/first_run()
alarm_area = get_area(src)
+2 -2
View File
@@ -276,7 +276,7 @@
/obj/machinery/firealarm/set_pixel_offsets()
// Overwrite the mapped in values.
pixel_x = ((dir & (NORTH|SOUTH)) ? 0 : (dir == EAST ? 22 : -22))
pixel_y = ((dir & (NORTH|SOUTH)) ? (dir == NORTH ? 32 : -17) : 0)
pixel_y = ((dir & (NORTH|SOUTH)) ? (dir == NORTH ? 32 : -19) : 0)
// Convenience subtypes for mappers.
/obj/machinery/firealarm/north
@@ -293,7 +293,7 @@
/obj/machinery/firealarm/south
dir = SOUTH
pixel_y = -17
pixel_y = -19
/*
FIRE ALARM CIRCUIT
@@ -86,6 +86,10 @@
origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
var/uses = 10
/obj/item/card/emag/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += SPAN_NOTICE("\The [src] has [uses] use\s left.")
/obj/item/card/emag_broken
desc = "It's a card with a magnetic strip attached to some circuitry. It looks too busted to be used for anything but salvage."
name = "broken cryptographic sequencer"
@@ -54,3 +54,29 @@
new /obj/item/gun/projectile/peac/unloaded(src)
for(var/i = 1 to 4)
new /obj/item/ammo_casing/peac(src)
/obj/structure/closet/secure_closet/guncabinet/station/lessthanlethals
name = "Less than Lethal Ammunitions"
/obj/structure/closet/secure_closet/guncabinet/station/lessthanlethals/fill()
for(var/i = 1 to 15)
new /obj/item/ammo_magazine/c45m/rubber(src)
for(var/i = 1 to 8)
new /obj/item/ammo_magazine/mc9mmt/rubber(src)
for(var/i = 1 to 4)
new /obj/item/storage/box/shells/beanbags(src)
new /obj/item/storage/box/shells/flashshells(src)
new /obj/item/storage/box/shells/stunshells(src)
new /obj/item/storage/box/shells/trackingslugs(src)
/obj/structure/closet/secure_closet/guncabinet/station/lethals
name = "Lethal Ammunitions"
/obj/structure/closet/secure_closet/guncabinet/station/lethals/fill()
for(var/i = 1 to 8)
new /obj/item/ammo_magazine/c45m(src)
for(var/i = 1 to 6)
new /obj/item/ammo_magazine/mc9mmt(src)
new /obj/item/ammo_magazine/a556/carbine/polymer(src)
for(var/i = 1 to 2)
new /obj/item/storage/box/shells/buckshot(src)
@@ -13,39 +13,62 @@
// Standard Refrigerator
/obj/structure/closet/secure_closet/refrigerator/standard/fill()
// 5 Cartons of Milk
for(var/i = 0, i < 5, i++)
for(var/i = 0 to 5)
new /obj/item/reagent_containers/food/drinks/carton/milk(src)
// 2 Cartons of Soy Milk
for(var/i = 0, i < 2, i++)
for(var/i = 0 to 2)
new /obj/item/reagent_containers/food/drinks/carton/soymilk(src)
// 1 Egg Box
for(var/i = 0, i < 2, i++)
for(var/i = 0 to 1)
new /obj/item/storage/box/fancy/egg_box(src)
// 1 Stick of Butter
for(var/i = 0, i < 1, i++)
for(var/i = 0 to 1)
new /obj/item/reagent_containers/food/snacks/spreads/butter(src)
// 4 Random Condiments
for(var/i = 0, i < 4, i++)
for(var/i = 0 to 4)
new /obj/random/condiment(src)
// 2 Random Kitchen Staples
for(var/i = 0, i < 2, i++)
for(var/i = 0 to 2)
new /obj/random/kitchen_staples(src)
// Cafe Refrigerator
/obj/structure/closet/secure_closet/refrigerator/cafe/fill()
// 6 Cartons of Milk
for(var/i = 0, i < 6, i++)
for(var/i = 0 to 6)
new /obj/item/reagent_containers/food/drinks/carton/milk(src)
// 3 Egg Boxes
// 3 Bags of Flour
for(var/i = 0, i < 3, i++)
for(var/i = 0 to 3)
new /obj/item/storage/box/fancy/egg_box(src)
new /obj/item/reagent_containers/food/condiment/flour(src)
// 2 Cartons of Soymilk and 2 Bags of Sugar
for(var/i = 0, i < 2, i++)
for(var/i = 0 to 2)
new /obj/item/reagent_containers/food/drinks/carton/soymilk(src)
new /obj/item/reagent_containers/food/condiment/sugar(src)
// Horizon Kitchen fridge variants
/obj/structure/closet/secure_closet/refrigerator/station/main
name = "refrigerator"
/obj/structure/closet/secure_closet/refrigerator/station/main/fill()
for(var/i = 0 to 2)
new /obj/item/storage/box/fancy/egg_box(src)
new /obj/item/reagent_containers/food/drinks/carton/milk(src)
new /obj/item/reagent_containers/food/drinks/carton/soymilk(src)
new /obj/item/reagent_containers/food/drinks/carton/cream(src)
new /obj/item/reagent_containers/food/condiment/soysauce(src)
/obj/structure/closet/secure_closet/refrigerator/station/alt
name = "refrigerator"
/obj/structure/closet/secure_closet/refrigerator/station/alt/fill()
for(var/i = 0 to 2)
new /obj/item/reagent_containers/food/condiment/flour(src)
new /obj/item/reagent_containers/food/condiment/rice(src)
new /obj/item/storage/box/large/produce/adhomai(src)
new /obj/item/storage/box/large/produce/moghes(src)
new /obj/item/storage/box/large/produce/nralakk(src)
//
// Freezers
//
@@ -133,10 +156,8 @@
// Standard Kitchen Cabinet
/obj/structure/closet/secure_closet/kitchen_cabinet/standard/fill()
for(var/i = 0, i < 2, i++)
for(var/i = 0 to 2)
new /obj/item/reagent_containers/food/condiment/flour(src)
new /obj/item/reagent_containers/food/condiment/sugar(src)
new /obj/item/reagent_containers/food/condiment/shaker/spacespice(src)
//
// Miscellaneous
@@ -104,3 +104,10 @@
locked = TRUE
secure = TRUE
req_access = list(ACCESS_MEDICAL_EQUIP)
/obj/structure/closet/walllocker/medical/secure/donor_blood
name = "O- Blood Locker"
/obj/structure/closet/walllocker/medical/secure/donor_blood/fill()
for(var/i = 0 to 3)
new /obj/item/reagent_containers/blood/OMinus(src)
+2 -2
View File
@@ -29,7 +29,7 @@
/obj/structure/extinguisher_cabinet/south
dir = SOUTH
pixel_y = -23
pixel_y = -26
/obj/structure/extinguisher_cabinet/Initialize(mapload)
. = ..()
@@ -41,7 +41,7 @@
/obj/structure/extinguisher_cabinet/set_pixel_offsets()
pixel_x = dir & (NORTH|SOUTH) ? 0 : (dir == EAST ? 21 : 4)
pixel_y = dir & (NORTH|SOUTH) ? (dir == NORTH ? 24 : -23) : 4
pixel_y = dir & (NORTH|SOUTH) ? (dir == NORTH ? 24 : -26) : 4
/obj/structure/extinguisher_cabinet/attackby(obj/item/attacking_item, mob/user)
if(isrobot(user))
@@ -50,16 +50,18 @@ ABSTRACT_TYPE(/obj/structure/engineer_maintenance)
/obj/structure/engineer_maintenance/Initialize(mapload)
. = ..()
name = panel_location == PANEL_LOCATION_FLOOR ? "maintenance panel" : "large maintenance panel" // floor panels are smaller than the wall mounted ones
// Floor panels are smaller and should be layered beneath dropped objects other structures.
if(panel_location == PANEL_LOCATION_FLOOR)
name = "maintenance_panel"
layer = EXPOSED_WIRE_TERMINAL_LAYER
else
name = "large maintenance panel"
icon_number = pick(icon_numbers_and_descriptions)
detailed_desc = icon_numbers_and_descriptions[icon_number]
for(var/tool_type in panel_tools)
var/atom/tool = tool_type
panel_tool_names += initial(tool.name)
var/turf/target_turf = panel_location == PANEL_LOCATION_FLOOR ? get_turf(src) : get_step(src, NORTH)
RegisterSignal(target_turf, COMSIG_ATOM_DECONSTRUCTED, PROC_REF(remove_self))
/obj/structure/engineer_maintenance/proc/remove_self()
SIGNAL_HANDLER
qdel(src)
+6
View File
@@ -5,6 +5,7 @@
icon_state = "lattice"
density = FALSE
anchored = TRUE
opacity = FALSE
w_class = WEIGHT_CLASS_NORMAL
layer = ABOVE_TILE_LAYER
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
@@ -27,6 +28,11 @@
. += "Add a <b>metal floor tile</b> to build a floor on top of the lattice."
. += "Lattices can be made by applying <b>metal rods</b> to a space tile."
/obj/structure/lattice/disassembly_hints(mob/user, distance, is_adjacent)
. += ..()
if(name == "lattice")
. += "Lattices can be broken back down into metal rods with a <b>welder</b>."
/obj/structure/lattice/Initialize()
. = ..()
for(var/obj/structure/lattice/LAT in loc)
+4
View File
@@ -571,6 +571,10 @@
layer = FULL_WINDOW_LAYER
rad_resistance_modifier = 4
/obj/structure/window/shuttle/mouse_drop_receive(atom/dropping, mob/user, params)
//Adds the component only once. We do it here & not in Initialize() because there are tons of walls & we don't want to add to their init times
LoadComponent(/datum/component/leanable, dropping)
/obj/structure/window/shuttle/legion
name = "reinforced cockpit window"
icon = 'icons/obj/smooth/shuttle_window_legion.dmi'
@@ -138,9 +138,9 @@
footsound = T.footstep_sound
if (client)
var/turf/B = GET_TURF_ABOVE(T)
var/turf/T1 = GET_TURF_ABOVE(T)
if(up_hint)
up_hint.icon_state = "uphint[(B ? !!B.is_hole : 0)]"
up_hint.icon_state = "uphint[(T1 ? !!isopenturf(T1) : 0)]"
if (!stat && !lying)
if ((x == last_x && y == last_y) || !footsound)
@@ -33,7 +33,7 @@
return
var/eye_plane = src.plane
if(lights_on && layer == MOB_LAYER) // in case you're hiding. so eyes don't go through tables.
eye_plane = EFFECTS_ABOVE_LIGHTING_PLANE //make them glow in the dark if the lamp is on
eye_plane = MOB_EMISSIVE_LAYER //make them glow in the dark if the lamp is on
var/eyeprefix = module_sprites[icontype][ROBOT_EYES]
if(speed == -2) // For combat drones with the mobility module.
cached_eye_overlays = list(
+28 -78
View File
@@ -1468,7 +1468,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/critical
is_critical = TRUE
@@ -1487,7 +1487,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/critical/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/low
cell_type = /obj/item/cell
@@ -1506,7 +1506,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/low/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/high
cell_type = /obj/item/cell/high
@@ -1525,7 +1525,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/high/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/isolation
cell_type = /obj/item/cell
@@ -1546,7 +1546,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/isolation/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/vault
cell_type = /obj/item/cell
@@ -1566,91 +1566,41 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/vault/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/shuttle/intrepid
/obj/machinery/power/apc/shuttle
cell_type = /obj/item/cell/high
req_access = null
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_INTREPID)
/obj/machinery/power/apc/shuttle/intrepid/north
/obj/machinery/power/apc/shuttle/north
dir = NORTH
pixel_y = 22
/obj/machinery/power/apc/shuttle/intrepid/east
/obj/machinery/power/apc/shuttle/east
dir = EAST
pixel_x = 12
/obj/machinery/power/apc/shuttle/intrepid/west
/obj/machinery/power/apc/shuttle/west
dir = WEST
pixel_x = -12
/obj/machinery/power/apc/shuttle/intrepid/south
/obj/machinery/power/apc/shuttle/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/shuttle/canary
cell_type = /obj/item/cell/high
req_access = null
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_CANARY)
/// Assigns req_one_access perms associated with the area of the shuttle its mapped in.
/obj/machinery/power/apc/shuttle/Initialize()
. = ..()
var/area = get_area(src)
/obj/machinery/power/apc/shuttle/canary/north
dir = NORTH
pixel_y = 22
/obj/machinery/power/apc/shuttle/canary/east
dir = EAST
pixel_x = 12
/obj/machinery/power/apc/shuttle/canary/west
dir = WEST
pixel_x = -12
/obj/machinery/power/apc/shuttle/canary/south
dir = SOUTH
pixel_y = -4
ABSTRACT_TYPE(/obj/machinery/power/apc/shuttle/quark)
cell_type = /obj/item/cell/high
req_access = null
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_QUARK)
/obj/machinery/power/apc/shuttle/quark/north
dir = NORTH
pixel_y = 22
/obj/machinery/power/apc/shuttle/quark/east
dir = EAST
pixel_x = 12
/obj/machinery/power/apc/shuttle/quark/west
dir = WEST
pixel_x = -12
/obj/machinery/power/apc/shuttle/quark/south
dir = SOUTH
pixel_y = -4
/obj/machinery/power/apc/shuttle/spark
cell_type = /obj/item/cell/high
req_access = null
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_SPARK)
/obj/machinery/power/apc/shuttle/spark/north
dir = NORTH
pixel_y = 22
/obj/machinery/power/apc/shuttle/spark/east
dir = EAST
pixel_x = 12
/obj/machinery/power/apc/shuttle/spark/west
dir = WEST
pixel_x = -12
/obj/machinery/power/apc/shuttle/spark/south
dir = SOUTH
pixel_y = -4
if(istype(area, /area/horizon/shuttle/intrepid))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_INTREPID)
if(istype(area, /area/horizon/shuttle/quark))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_QUARK)
if(istype(area, /area/horizon/shuttle/mining))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_SPARK)
if(istype(area, /area/horizon/shuttle/canary))
req_one_access = list(ACCESS_ENGINE_EQUIP, ACCESS_CANARY)
// Construction site APC, starts turned off
/obj/machinery/power/apc/high/inactive
@@ -1679,7 +1629,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc/shuttle/quark)
/obj/machinery/power/apc/super/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/super/critical
is_critical = TRUE
@@ -1698,7 +1648,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc/shuttle/quark)
/obj/machinery/power/apc/super/critical/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/hyper
cell_type = /obj/item/cell/hyper
@@ -1717,7 +1667,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc/shuttle/quark)
/obj/machinery/power/apc/hyper/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
/obj/machinery/power/apc/empty
start_charge = 0
@@ -1736,7 +1686,7 @@ ABSTRACT_TYPE(/obj/machinery/power/apc/shuttle/quark)
/obj/machinery/power/apc/empty/south
dir = SOUTH
pixel_y = -4
pixel_y = -8
#undef UPDATE_CELL_IN
#undef UPDATE_OPENED1
+40
View File
@@ -444,5 +444,45 @@
return test_status
// At present, only fire alarms have NSEW as immediate children, whereas APCs and Air Alarms also have them as sub-children.
// In the future, areas should have additional vars to populate APC data automatically, allowing them to have directional
// immediate children too for mapping testing.
/datum/unit_test/map_test/no_panel_dir_var_edits
name = "MAP: Check for Fire Alarm dir var edits"
/datum/unit_test/map_test/no_panel_dir_var_edits/start_test()
var/test_status = UNIT_TEST_PASSED
var/checks = 0
var/failed_checks = 0
var/firealarm_increment
var/turf/T
for(var/obj/machinery/firealarm/F in world)
T = get_turf(F)
firealarm_increment = 0
if(istype(F, /obj/machinery/firealarm/north))
if(F.dir != NORTH)
firealarm_increment++
if(istype(F, /obj/machinery/firealarm/south))
if(F.dir != SOUTH)
firealarm_increment++
if(istype(F, /obj/machinery/firealarm/east))
if(F.dir != EAST)
firealarm_increment++
if(istype(F, /obj/machinery/firealarm/west))
if(F.dir != WEST)
firealarm_increment++
checks++
if(firealarm_increment > 1)
failed_checks++
TEST_FAIL("Manually var edited [F] at ([F.x],[F.y],[F.z]) in [T.loc].")
if(failed_checks)
TEST_FAIL("\[[failed_checks] / [checks]\] Some fire alarms had their dir var manually edited instead of using a preset variant. Please also check new APCs and air alarms in the area.")
else
TEST_PASS("All \[[checks]\] fire alarms mapped properly.")
return test_status
#undef SUCCESS
#undef FAILURE
@@ -0,0 +1,26 @@
# Your name.
author: Batrachophrenoboocosmomachia
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- code_imp: "Added set definitions for several Horizon-specific containers."
- code_imp: "Updated 'full' material stacks on the Horizon from sneaky var-edited singles to properly defined full stacks"
- code_imp: "Cleaned up all Air Alarms, Fire Alarms, and APCs on the Horizon that were directional children with their dir var edited."
- code_imp: "Cleaned up all Power Cables on the Horizon that had d1 or d2 var edited instead of just icon_state."
- code_imp: "Adjusted pixel shifts for 'south' (north-facing) Air Alarms, Fire Alarms, APCs, and Extinguisher Cabinets to address layering issues when standing vs. leaning."
- code_imp: "Minor refactor of shuttle/* Air Alarms and APCs to reduce excess children; req_one_access perms now assigned based on /area/horizon/shuttle/*."
- qol: "Adds feedback hint for uses remaining to Emag cards."
- qol: "Added Tip about the shift-click behavior of the 'up-hint'/'Look Up' button."
- bugfix: "See-through turfs (like lattices/catwalks over open space) can now be Looked Up through from below."
- bugfix: "Fixed the shift-click behavior of 'up-hint'/'Look Up' button, allowing you to see nearby turfs that can be Looked Up through."
- bugfix: "Maintenance Panels located on the floor have had their layering issues fixed."
- bugfix: "Borg eye emissive effects MAYBE no longer visible through higher z-levels."
- bugfix: "Added missing leanable component to window/shuttle obj type."
- bugfix: "Add missing APC to D1 maintenance area."
File diff suppressed because it is too large Load Diff