From 073852c664b67d97f17930bbe1f0b7dcead431f4 Mon Sep 17 00:00:00 2001 From: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Tue, 12 Mar 2024 09:33:26 -0400 Subject: [PATCH] Adds more unit tests for improper cables (#24262) * cablening + remove a duplicate proc * okay compile im dumb * oops * okay im dumber than I thought * lmao * OKAY IT WORKS PROPERLY NOW * lets test these maps to see if they pass * maybe this works * undo the testing * unfuck map files * unfuck shit maybe? * PLEASE i think fucking merge hooks are fucking me * okay goodbye merge hooks * PLEASE --- _maps/map_files/MetaStation/MetaStation.dmm | 10 ------- _maps/map_files/cerestation/cerestation.dmm | 15 ++++++++++ code/__HELPERS/mob_helpers.dm | 12 -------- code/game/machinery/doors/windowdoor.dm | 2 +- .../objects/items/weapons/tanks/jetpack.dm | 2 +- .../vampire/vampire_powers/vampire_powers.dm | 2 +- .../modules/maze_generation/maze_generator.dm | 2 +- .../maze_generator_blockwise.dm | 2 +- code/modules/mod/mod_control.dm | 2 +- code/modules/unit_tests/map_tests.dm | 30 +++++++++++++++++++ 10 files changed, 51 insertions(+), 28 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index a20764e7f3d..67661f47273 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -78450,11 +78450,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/structure/disposalpipe/segment, @@ -86955,11 +86950,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/all/security/doors, /obj/structure/disposalpipe/segment, diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index 80b8af7434f..8a825d593f1 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -36466,6 +36466,11 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -69862,6 +69867,11 @@ /obj/structure/disposalpipe/segment/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/spawner/random_spawners/dirt_frequent, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -85205,6 +85215,11 @@ "uxM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, diff --git a/code/__HELPERS/mob_helpers.dm b/code/__HELPERS/mob_helpers.dm index 72e6e508e13..d5611804724 100644 --- a/code/__HELPERS/mob_helpers.dm +++ b/code/__HELPERS/mob_helpers.dm @@ -1,15 +1,3 @@ -/proc/GetOppositeDir(dir) - switch(dir) - if(NORTH) return SOUTH - if(SOUTH) return NORTH - if(EAST) return WEST - if(WEST) return EAST - if(SOUTHWEST) return NORTHEAST - if(NORTHWEST) return SOUTHEAST - if(NORTHEAST) return SOUTHWEST - if(SOUTHEAST) return NORTHWEST - return 0 - /proc/random_underwear(gender, species = "Human") var/list/pick_list = list() switch(gender) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index d7ab332c877..b79f6c96820 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -135,7 +135,7 @@ /obj/machinery/door/window/unrestricted_side(mob/M) var/mob_dir = get_dir(src, M) if(mob_dir == 0) // If the mob is inside the tile - mob_dir = GetOppositeDir(dir) // Set it to the inside direction of the windoor + mob_dir = reverse_direction(dir) // Set it to the inside direction of the windoor return mob_dir & unres_sides diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index de8f623604c..eace17ea30d 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -23,7 +23,7 @@ /obj/item/tank/jetpack/on_mob_move(direction, mob/user) if(on) - var/turf/T = get_step(src, GetOppositeDir(direction)) + var/turf/T = get_step(src, reverse_direction(direction)) if(!has_gravity(T)) new /obj/effect/particle_effect/ion_trails(T, direction) diff --git a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm index 62e17c54130..ed1c9723aff 100644 --- a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm @@ -242,7 +242,7 @@ // - V - Attacker facing south // - - - // Victim at 135 or more degrees of where the victim is facing. - if(attacker_dir & GetOppositeDir(attacker_to_victim)) + if(attacker_dir & reverse_direction(attacker_to_victim)) return DEVIATION_FULL // - - - diff --git a/code/modules/maze_generation/maze_generator.dm b/code/modules/maze_generation/maze_generator.dm index b3c47b3f5d7..04b72a6aca4 100644 --- a/code/modules/maze_generation/maze_generator.dm +++ b/code/modules/maze_generation/maze_generator.dm @@ -121,7 +121,7 @@ // On both tiles for(var/obj/structure/window/reinforced/mazeglass/W in T3) - if(W.dir == GetOppositeDir(text2num(D))) + if(W.dir == reverse_direction(text2num(D))) qdel(W) // Mark as visited diff --git a/code/modules/maze_generation/maze_generator_blockwise.dm b/code/modules/maze_generation/maze_generator_blockwise.dm index 94850e2ea38..f6905bd1144 100644 --- a/code/modules/maze_generation/maze_generator_blockwise.dm +++ b/code/modules/maze_generation/maze_generator_blockwise.dm @@ -68,7 +68,7 @@ var/turf/T3 = unvisited_neighbours["[D]"] // Pick random dir turf // Remove the color between the two - var/turf/T4 = get_step(T3, GetOppositeDir(text2num(D))) + var/turf/T4 = get_step(T3, reverse_direction(text2num(D))) T4?.color = MAZEGEN_TURF_CELL // Mark as visited diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index e91733f3e6a..fb3ffcaee37 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -243,7 +243,7 @@ /obj/item/mod/control/on_mob_move(direction, mob/user) if(!jetpack_active || !isturf(user.loc)) return - var/turf/T = get_step(src, GetOppositeDir(direction)) + var/turf/T = get_step(src, reverse_direction(direction)) if(!has_gravity(T)) new /obj/effect/particle_effect/ion_trails(T, direction) diff --git a/code/modules/unit_tests/map_tests.dm b/code/modules/unit_tests/map_tests.dm index 791ac602caa..fa8415727a7 100644 --- a/code/modules/unit_tests/map_tests.dm +++ b/code/modules/unit_tests/map_tests.dm @@ -124,3 +124,33 @@ /datum/map_per_tile_test/nearspace_checker/CheckTile(turf/T) if(T.loc.type == /area/space/nearstation && !is_type_in_list(T, allowed_turfs)) Fail(T, "nearspace area contains a non-space turf: [T], ([T.type])") + + +/datum/map_per_tile_test/cable_adjacency_checker + +/datum/map_per_tile_test/cable_adjacency_checker/CheckTile(turf/T) + for(var/obj/structure/cable/cable in T.contents) + check_direction(T, cable.d1, "d1") + check_direction(T, cable.d2, "d2") + +/datum/map_per_tile_test/cable_adjacency_checker/proc/check_direction(origin_turf, direction, report_name) + if(!direction) // cable direction = 0, which means its a node + return TRUE + var/turf/potential_cable_turf = get_step(origin_turf, direction) + var/reversed_direction = reverse_direction(direction) + for(var/obj/structure/cable/other_cable in potential_cable_turf.contents) + if(reversed_direction == other_cable.d1 || reversed_direction == other_cable.d2) + return TRUE + + Fail(origin_turf, "tile has an unconnected cable ([report_name] connection: [uppertext(dir2text(direction))]).") + return FALSE + +/datum/map_per_tile_test/duplicate_cable_check + +/datum/map_per_tile_test/duplicate_cable_check/CheckTile(turf/T) + var/obj/structure/cable/cable = locate() in T.contents + for(var/obj/structure/cable/other_cable in T.contents) + if(cable == other_cable) + continue // same object, continue + if(cable.d1 == other_cable.d1 && cable.d2 == other_cable.d2) + Fail(T, "tile has duplicated cables.")