diff --git a/code/__defines/ship_weapons.dm b/code/__defines/ship_weapons.dm
index 6c4d0717ff7..dfa326d8a76 100644
--- a/code/__defines/ship_weapons.dm
+++ b/code/__defines/ship_weapons.dm
@@ -8,6 +8,7 @@
#define SHIP_GUN_ERROR_NO_AMMO "no ammunition loaded"
#define NO_PROJECTILE "no projectile"
+#define SHIP_HAZARD_TARGET "Automatic Hazard Targeting"
#define SHIP_AMMO_CAN_HIT_HAZARDS 1
#define SHIP_AMMO_CAN_HIT_SHIPS 2
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 4b180a27a34..0b4283dd326 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -259,6 +259,7 @@ var/list/ruin_landmarks = list()
/obj/effect/landmark/entry_point
name = "entry point landmark"
icon_state = "dir_arrow"
+ movable_flags = MOVABLE_FLAG_EFFECTMOVE
/obj/effect/landmark/entry_point/Initialize()
..()
diff --git a/code/modules/overmap/overmap_object.dm b/code/modules/overmap/overmap_object.dm
index fd3aa79612d..0590738ba13 100644
--- a/code/modules/overmap/overmap_object.dm
+++ b/code/modules/overmap/overmap_object.dm
@@ -54,6 +54,9 @@
var/obj/machinery/computer/ship/targeting/GS = H.machine
if(GS.targeting)
return
+ if(!istype(GS.connected.loc, /turf/unsimulated/map))
+ to_chat(H, SPAN_WARNING("The safeties won't let you target while you're not on the Overmap!"))
+ return
var/my_sector = map_sectors["[H.z]"]
if(istype(my_sector, /obj/effect/overmap/visitable))
var/obj/effect/overmap/visitable/V = my_sector
diff --git a/code/modules/overmap/ship_weaponry/_ship_gun.dm b/code/modules/overmap/ship_weaponry/_ship_gun.dm
index efc175ffef8..e62b837108f 100644
--- a/code/modules/overmap/ship_weaponry/_ship_gun.dm
+++ b/code/modules/overmap/ship_weaponry/_ship_gun.dm
@@ -398,7 +398,10 @@
var/obj/effect/landmark/LM
if(!selected_entrypoint)
return
- if(selected_entrypoint == "Automatic Hazard Targeting")
+ if(!istype(connected.loc, /turf/unsimulated/map))
+ to_chat(usr, SPAN_WARNING("The safeties are engaged! You need to be undocked in order to fire."))
+ return
+ if(selected_entrypoint == SHIP_HAZARD_TARGET || !selected_entrypoint)
LM = null
else
LM = names_to_entries[selected_entrypoint]
@@ -428,5 +431,6 @@
for(var/obj/effect/O in V.generic_waypoints)
. += capitalize_first_letters(O.name)
names_to_entries[capitalize_first_letters(O.name)] = O
+ . = sortList(.)
if(!length(.))
- . += "Automatic Hazard Targeting" //No entrypoints == hazard
\ No newline at end of file
+ . += SHIP_HAZARD_TARGET //No entrypoints == hazard
\ No newline at end of file
diff --git a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
index ecc2cce366a..e4683614f06 100644
--- a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
+++ b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
@@ -38,58 +38,61 @@
return ..()
/obj/effect/overmap/projectile/proc/check_entry()
+ if(!ammunition)
+ return
var/turf/T = get_turf(src)
- for(var/obj/effect/overmap/visitable/V in T)
- if(V == ammunition.origin)
+ for(var/obj/effect/overmap/A in T)
+ if(A == ammunition.origin)
continue
-
- if((V.check_ownership(entry_target)) || (V == target)) //Target spotted!
- if(istype(V, /obj/effect/overmap/visitable/sector/exoplanet) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_SHIPS))
- //Manually stopping & going invisible because this proc needs to sleep for a bit.
- invisibility = 100
- moving = FALSE
- STOP_PROCESSING(SSprocessing, src) //Also, don't sleep in process().
- var/obj/item/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
- widowmaker.ammo = ammunition
- qdel(ammunition.original_projectile) //No longer needed.
- var/turf/laze = get_turf(entry_target)
- ammunition.original_projectile = widowmaker
- playsound(laze, 'sound/weapons/gunshot/ship_weapons/orbital_travel.ogg')
- laze.visible_message(SPAN_DANGER("A bright star is getting closer from the sky...!"))
- sleep(11 SECONDS) //Let the sound play!
- widowmaker.primed = TRUE
- widowmaker.forceMove(entry_target)
- widowmaker.on_hit(laze, is_landmark_hit = TRUE)
- log_and_message_admins("A projectile ([name]) has entered a z-level at [entry_target.name]! (JMP)")
- qdel(widowmaker)
- qdel(src)
- else if(istype(V, /obj/effect/overmap/visitable) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_SHIPS))
- if(istype(V, /obj/effect/overmap/visitable/ship))
- var/obj/effect/overmap/visitable/ship/VS = V
- if(istype(ammunition.origin, /obj/effect/overmap/visitable/ship))
- var/obj/effect/overmap/visitable/ship/OR = ammunition.origin
- if(VS.fore_dir != OR.fore_dir)
- var/naval_heading = SSatlas.headings_to_naval["[OR.fore_dir]"]["[ammunition.heading]"]
- var/corrected_heading = SSatlas.naval_to_dir["[VS.fore_dir]"][naval_heading]
- ammunition.heading = corrected_heading
- var/obj/item/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
- widowmaker.ammo = ammunition
- qdel(ammunition.original_projectile) //No longer needed.
- ammunition.original_projectile = widowmaker
- widowmaker.primed = TRUE
- var/turf/entry_turf_initial = get_ranged_target_turf(entry_target, reverse_dir[entry_target.dir], 20)
- var/turf/entry_turf = get_ranged_target_turf(entry_turf_initial, pick(list(EAST, WEST)), 5)
- widowmaker.forceMove(entry_turf)
- widowmaker.dir = ammunition.heading
- var/turf/target_turf = get_step(widowmaker, widowmaker.dir)
- widowmaker.on_translate(entry_turf, target_turf)
- log_and_message_admins("A projectile ([widowmaker.name]) has entered a z-level at [entry_target.name], with direction [dir_name(widowmaker.dir)]! (JMP)")
- widowmaker.launch_projectile(target_turf)
- qdel(src)
- else if(istype(V, /obj/effect/overmap/event) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_HAZARDS))
- var/obj/effect/overmap/event/EV = V
- if(EV.can_be_destroyed)
- qdel(EV)
+ if(istype(A, /obj/effect/overmap/visitable))
+ var/obj/effect/overmap/visitable/V = A
+ if((V.check_ownership(entry_target)) || (V == target)) //Target spotted!
+ if(istype(V, /obj/effect/overmap/visitable/sector/exoplanet) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_SHIPS))
+ //Manually stopping & going invisible because this proc needs to sleep for a bit.
+ invisibility = 100
+ moving = FALSE
+ STOP_PROCESSING(SSprocessing, src) //Also, don't sleep in process().
+ var/obj/item/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
+ widowmaker.ammo = ammunition
+ qdel(ammunition.original_projectile) //No longer needed.
+ var/turf/laze = get_turf(entry_target)
+ ammunition.original_projectile = widowmaker
+ playsound(laze, 'sound/weapons/gunshot/ship_weapons/orbital_travel.ogg')
+ laze.visible_message(SPAN_DANGER("A bright star is getting closer from the sky...!"))
+ sleep(11 SECONDS) //Let the sound play!
+ widowmaker.primed = TRUE
+ widowmaker.forceMove(entry_target)
+ widowmaker.on_hit(laze, is_landmark_hit = TRUE)
+ log_and_message_admins("A projectile ([name]) has entered a z-level at [entry_target.name]! (JMP)")
+ qdel(widowmaker)
+ qdel(src)
+ else if(istype(V, /obj/effect/overmap/visitable) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_SHIPS))
+ if(istype(V, /obj/effect/overmap/visitable/ship))
+ var/obj/effect/overmap/visitable/ship/VS = V
+ if(istype(ammunition.origin, /obj/effect/overmap/visitable/ship))
+ var/obj/effect/overmap/visitable/ship/OR = ammunition.origin
+ if(VS.fore_dir != OR.fore_dir)
+ var/naval_heading = SSatlas.headings_to_naval["[OR.fore_dir]"]["[ammunition.heading]"]
+ var/corrected_heading = SSatlas.naval_to_dir["[VS.fore_dir]"][naval_heading]
+ ammunition.heading = corrected_heading
+ var/obj/item/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
+ widowmaker.ammo = ammunition
+ qdel(ammunition.original_projectile) //No longer needed.
+ ammunition.original_projectile = widowmaker
+ widowmaker.primed = TRUE
+ var/turf/entry_turf_initial = get_ranged_target_turf(entry_target, reverse_dir[entry_target.dir], 20)
+ var/turf/entry_turf = get_ranged_target_turf(entry_turf_initial, pick(list(EAST, WEST)), 5)
+ widowmaker.forceMove(entry_turf)
+ widowmaker.dir = ammunition.heading
+ var/turf/target_turf = get_step(widowmaker, widowmaker.dir)
+ widowmaker.on_translate(entry_turf, target_turf)
+ log_and_message_admins("A projectile ([widowmaker.name]) has entered a z-level at [entry_target.name], with direction [dir_name(widowmaker.dir)]! (JMP)")
+ widowmaker.launch_projectile(target_turf)
+ qdel(src)
+ if(istype(A, /obj/effect/overmap/event))
+ var/obj/effect/overmap/event/EV = A
+ if(EV.can_be_destroyed && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_HAZARDS))
+ qdel(EV)
qdel(src)
/obj/effect/overmap/projectile/proc/move_to()
diff --git a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
index c8fb5fd3a08..c2d4f1fd262 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
@@ -304,7 +304,9 @@
icon_state = "safeguard_open"
/obj/machinery/leviathan_safeguard/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/leviathan_key) && !key && !stat && !locked)
+ if(!opened || locked)
+ return
+ if(istype(I, /obj/item/leviathan_key) && !key && !stat)
var/obj/item/leviathan_key/LK = I
if(use_check_and_message(user))
return
@@ -316,7 +318,7 @@
playsound(src, 'sound/effects/ship_weapons/levi_key_insert.ogg')
/obj/machinery/leviathan_safeguard/attack_hand(mob/user)
- if(key && !stat && !locked)
+ if(key && !stat && opened && !locked)
if(use_check_and_message(user))
return
if(do_after(user, 1 SECOND))
@@ -368,12 +370,15 @@
possible_entry_points[O.name] = O
for(var/obj/effect/O in V.entry_points)
possible_entry_points[O.name] = O
+ possible_entry_points = sortList(possible_entry_points)
+ if(istype(linked.targeting, /obj/effect/overmap/event))
+ possible_entry_points += SHIP_HAZARD_TARGET
var/targeted_landmark = input(user, "Select an entry point.", "Leviathan Control") as null|anything in possible_entry_points
if(!targeted_landmark && length(possible_entry_points))
return
var/obj/effect/landmark
- if(length(possible_entry_points))
- landmark = possible_entry_points[targeted_landmark]
+ if(length(possible_entry_points) && !(targeted_landmark == SHIP_HAZARD_TARGET))
+ landmark = possible_entry_points[targeted_landmark]
if(do_after(user, 1 SECOND) && !use_check_and_message(user))
playsound(src, 'sound/effects/ship_weapons/levi_button_press.ogg')
visible_message(SPAN_DANGER("[user] presses \the [src]!"))
diff --git a/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm b/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm
index fe4a63092e2..347e918aca1 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm
@@ -14,7 +14,7 @@
var/mob/living/carbon/human/H = user
if(istype(I, /obj/item/primer) && !primer)
var/obj/item/primer/P = I
- visible_message(SPAN_NOTICE("You start connecting \the [P] to the casing..."), SPAN_NOTICE("[H] starts connecting \the [P] to the casing..."))
+ user.visible_message(SPAN_NOTICE("[H] starts connecting \the [P] to the casing..."), SPAN_NOTICE("You start connecting \the [P] to the casing..."))
if(do_after(H, 3 SECONDS))
visible_message(SPAN_NOTICE("You connect \the [P] to the casing!"), SPAN_NOTICE("[H] connects \the [P] to the casing!"))
H.drop_from_inventory(P)
@@ -22,7 +22,7 @@
playsound(src, 'sound/machines/rig/rig_deploy.ogg')
if(istype(I, /obj/item/warhead) && !warhead)
var/obj/item/warhead/W = I
- visible_message(SPAN_NOTICE("You start connecting \the [W] to the casing..."), SPAN_NOTICE("[H] starts connecting \the [W] to the casing..."))
+ user.visible_message( SPAN_NOTICE("[H] starts connecting \the [W] to the casing..."), SPAN_NOTICE("You start connecting \the [W] to the casing..."))
if(do_after(H, 5 SECONDS))
visible_message(SPAN_NOTICE("You connect \the [W] to the casing!"), SPAN_NOTICE("[H] connects \the [W] to the casing!"))
H.drop_from_inventory(W)
@@ -122,8 +122,8 @@
warhead_type = SHIP_AMMO_IMPACT_HE
slowdown = 2
var/drop_counter = 0
- var/cookoff_devastation = 2
- var/cookoff_heavy = 2
+ var/cookoff_devastation = 0
+ var/cookoff_heavy = 3
var/cookoff_light = 4
/obj/item/warhead/longbow/too_heavy_to_throw()
@@ -162,7 +162,7 @@
icon_state = "armor_piercing_obj"
warhead_state = "armor_piercing"
warhead_type = SHIP_AMMO_IMPACT_AP
- cookoff_devastation = 1
+ cookoff_devastation = 0
cookoff_heavy = 2
cookoff_light = 6
diff --git a/html/changelogs/mattatlas-theraid.yml b/html/changelogs/mattatlas-theraid.yml
new file mode 100644
index 00000000000..2c344587d29
--- /dev/null
+++ b/html/changelogs/mattatlas-theraid.yml
@@ -0,0 +1,48 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: MattAtlas
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Ops techs now have access to the Intrepid armament area and the ammunitions storage."
+ - bugfix: "Ship weapons can now actually hit overmap hazards."
+ - bugfix: "Ship weapons can no longer fire if the ship is not on the overmap."
+ - bugfix: "You can no longer target overmap objects if you're not on the overmap."
+ - bugfix: "Entry point landmarks now properly move with shuttles."
+ - bugfix: "Fixed the Leviathan activation terminal. You can no longer interact with it before unlocking the safeties."
+ - bugfix: "Fixed some chat messages."
+ - bugfix: "Entry point lists are now sorted."
diff --git a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm
index f1803eda227..514adb5127c 100644
--- a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm
+++ b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm
@@ -14599,7 +14599,8 @@
/obj/machinery/door/airlock/glass_command{
id_tag = "intrepid_cockpit";
name = "Close-in Weapons System Bay";
- req_access = list(73)
+ req_access = null;
+ req_one_access = list(73, 31)
},
/obj/machinery/door/firedoor,
/turf/simulated/floor/tiled/dark,
@@ -20754,7 +20755,9 @@
/obj/effect/floor_decal/corner/blue{
dir = 6
},
-/obj/machinery/door/window/eastright,
+/obj/machinery/door/window/eastright{
+ req_access = list(73)
+ },
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
diff --git a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm
index 0ca9b28d7f9..32224ae9819 100644
--- a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm
+++ b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm
@@ -10283,7 +10283,7 @@
name = "Door Bolt Control";
pixel_x = 25;
pixel_y = -7;
- req_one_access = list(10,19,20,36,74);
+ req_one_access = list(10,19,20,31,74);
specialfunctions = 4
},
/obj/machinery/button/remote/blast_door{
@@ -10292,7 +10292,7 @@
name = "Blast Door Control";
pixel_x = 25;
pixel_y = 7;
- req_one_access = list(10,19,20,36,74)
+ req_one_access = list(10,19,20,31,74)
},
/turf/simulated/floor/tiled/full,
/area/horizon/secure_ammunition_storage)
@@ -11768,7 +11768,7 @@
name = "Door Bolt Control";
pixel_x = -25;
pixel_y = 7;
- req_one_access = list(10,19,20,36,74);
+ req_one_access = list(10,19,20,31,74);
specialfunctions = 4
},
/obj/machinery/button/remote/blast_door{
@@ -11777,7 +11777,7 @@
name = "Blast Door Control";
pixel_x = -25;
pixel_y = -7;
- req_one_access = list(10,19,20,36,74)
+ req_one_access = list(10,19,20,31,74)
},
/turf/simulated/floor/tiled/full,
/area/horizon/secure_ammunition_storage)