From 0cc8562336a8fd1e867d8fe21345a8c8046aaf88 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:20:30 -0400 Subject: [PATCH 01/35] Working Joe Announcement Removal (#4373) # About the pull request Removes the shipside announcement for working joes joining. # Explain why it's good for the game Frankly, Working Joes aren't nearly important enough to have a message about them joining the round. They should be quiet and (vaguely) efficient in their tasks. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow del: Removed the shipside announcement for working joes joining /:cl: --- code/game/jobs/job/civilians/support/working_joe.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/game/jobs/job/civilians/support/working_joe.dm b/code/game/jobs/job/civilians/support/working_joe.dm index ce1c8010c216..bdc7d3aa071b 100644 --- a/code/game/jobs/job/civilians/support/working_joe.dm +++ b/code/game/jobs/job/civilians/support/working_joe.dm @@ -46,11 +46,6 @@ else . = {"You are a Working Joe for Hazardous Environments! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. You are a variant of the Working Joe built for tougher environments and fulfill the specific duty of dangerous repairs or maintenance. Your primary task is to maintain the reactor, SMES and AI Core. Your secondary task is to respond to hazardous environments, such as an atmospheric breach or biohazard spill, and assist with repairs when ordered to by either an AI Mainframe, or a Commisioned Officer. You should not be seen outside of emergencies besides in Engineering and the AI Core! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} - -/datum/job/civilian/working_joe/announce_entry_message(mob/living/carbon/human/H) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ai_announcement), "[H.real_name] has been activated."), 1.5 SECONDS) - return ..() - /obj/effect/landmark/start/working_joe name = JOB_WORKING_JOE icon_state = "wj_spawn" From 9f5b5cf6b7a9478f0dd86f8ee9e3d393dcedd5b0 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 06:29:23 +0100 Subject: [PATCH 02/35] Automatic changelog for PR #4373 [ci skip] --- html/changelogs/AutoChangeLog-pr-4373.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4373.yml diff --git a/html/changelogs/AutoChangeLog-pr-4373.yml b/html/changelogs/AutoChangeLog-pr-4373.yml new file mode 100644 index 000000000000..a2d3ba29c53d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4373.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - rscdel: "Removed the shipside announcement for working joes joining" \ No newline at end of file From 922ecc223a7aecdcd3eec9037182f26c52f40c4a Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:20:40 -0400 Subject: [PATCH 03/35] Recalibrate limbs tweak (#4372) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # About the pull request This PR makes it so recalibrating limbs no longer requires the patient to be laying down. # Explain why it's good for the game Someone reported this was bugged but I cannot get it to break and *someone* ahealed it before I could take a look 😁 . The only thing I can think of is people aren't having the person lay down properly before fixing it but after initial attachment it should be fine to just do it while the person is standing and makes it easier for medics who don't know any better. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow qol: Recalibrating limbs can now be done with the patient standing /:cl: --- code/modules/surgery/robolimb_repair.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/surgery/robolimb_repair.dm b/code/modules/surgery/robolimb_repair.dm index 99c918039a31..f7ec1b483f66 100644 --- a/code/modules/surgery/robolimb_repair.dm +++ b/code/modules/surgery/robolimb_repair.dm @@ -12,6 +12,7 @@ pain_reduction_required = NONE requires_bodypart = TRUE requires_bodypart_type = LIMB_ROBOT + lying_required = FALSE /datum/surgery/prosthetic_recalibration/can_start(mob/user, mob/living/carbon/patient, obj/limb/L, obj/item/tool) if(L.status & LIMB_UNCALIBRATED_PROSTHETIC) From 6dab550ed6abc2e5acb16b8fd0745bba6c3b9c75 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 06:43:16 +0100 Subject: [PATCH 04/35] Automatic changelog for PR #4372 [ci skip] --- html/changelogs/AutoChangeLog-pr-4372.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4372.yml diff --git a/html/changelogs/AutoChangeLog-pr-4372.yml b/html/changelogs/AutoChangeLog-pr-4372.yml new file mode 100644 index 000000000000..e452bf1ee5b0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4372.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - qol: "Recalibrating limbs can now be done with the patient standing" \ No newline at end of file From 6084a6badb0aa7d347bc3f742f923b9d6f4de17d Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:21:33 -0400 Subject: [PATCH 05/35] Powerloader wreckage now can be attacked by xenos (#4371) # About the pull request Powerloader wreckage now can be attacked by xenos # Explain why it's good for the game Dumb meta rules/oversight # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow add: Powerloader wreckage now can be attacked by xenos /:cl: --- code/modules/vehicles/powerloader.dm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/code/modules/vehicles/powerloader.dm b/code/modules/vehicles/powerloader.dm index 88d917b90b3e..6992269c7566 100644 --- a/code/modules/vehicles/powerloader.dm +++ b/code/modules/vehicles/powerloader.dm @@ -338,6 +338,29 @@ opacity = FALSE pixel_x = -18 pixel_y = -5 + health = 100 + +/obj/structure/powerloader_wreckage/attack_alien(mob/living/carbon/xenomorph/attacking_xeno) + if(attacking_xeno.a_intent == INTENT_HELP) + return XENO_NO_DELAY_ACTION + + if(attacking_xeno.mob_size < MOB_SIZE_XENO) + to_chat(attacking_xeno, SPAN_XENOWARNING("You're too small to do any significant damage to this vehicle!")) + return XENO_NO_DELAY_ACTION + + attacking_xeno.animation_attack_on(src) + + attacking_xeno.visible_message(SPAN_DANGER("[attacking_xeno] slashes [src]!"), SPAN_DANGER("You slash [src]!")) + playsound(attacking_xeno, pick('sound/effects/metalhit.ogg', 'sound/weapons/alien_claw_metal1.ogg', 'sound/weapons/alien_claw_metal2.ogg', 'sound/weapons/alien_claw_metal3.ogg'), 25, 1) + + var/damage = (attacking_xeno.melee_vehicle_damage + rand(-5,5)) + + health -= damage + + if(health <= 0) + deconstruct(FALSE) + + return XENO_NONCOMBAT_ACTION /obj/structure/powerloader_wreckage/jd name = "\improper John Deere 4300 Power Loader wreckage" From 816f4057f25ae2fa72415929f9611a66e0d7609b Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 06:58:39 +0100 Subject: [PATCH 06/35] Automatic changelog for PR #4371 [ci skip] --- html/changelogs/AutoChangeLog-pr-4371.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4371.yml diff --git a/html/changelogs/AutoChangeLog-pr-4371.yml b/html/changelogs/AutoChangeLog-pr-4371.yml new file mode 100644 index 000000000000..34e18a5e8e4f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4371.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - rscadd: "Powerloader wreckage now can be attacked by xenos" \ No newline at end of file From 8b01bba59708098276ce532844f5cd1463070afb Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:22:10 -0400 Subject: [PATCH 07/35] Firing flares into the air now produces light again (#4360) # About the pull request Firing flares into the air now produces light again Closes https://github.com/cmss13-devs/cmss13/issues/4359 # Explain why it's good for the game Bug bad # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow fix: Firing flares into the air now produces light again /:cl: --------- Co-authored-by: harryob --- code/modules/projectiles/guns/flare_gun.dm | 158 ++++++++++++++++++++ code/modules/projectiles/guns/specialist.dm | 143 ------------------ colonialmarines.dme | 1 + 3 files changed, 159 insertions(+), 143 deletions(-) create mode 100644 code/modules/projectiles/guns/flare_gun.dm diff --git a/code/modules/projectiles/guns/flare_gun.dm b/code/modules/projectiles/guns/flare_gun.dm new file mode 100644 index 000000000000..407ecdf00066 --- /dev/null +++ b/code/modules/projectiles/guns/flare_gun.dm @@ -0,0 +1,158 @@ +/obj/item/weapon/gun/flare + name = "\improper M82-F flare gun" + desc = "A flare gun issued to JTAC operators to use with flares. Comes with a miniscope. One shot, one... life saved?" + icon_state = "m82f" + item_state = "m82f" + current_mag = /obj/item/ammo_magazine/internal/flare + reload_sound = 'sound/weapons/gun_shotgun_shell_insert.ogg' + fire_sound = 'sound/weapons/gun_flare.ogg' + aim_slowdown = 0 + flags_equip_slot = SLOT_WAIST + wield_delay = WIELD_DELAY_VERY_FAST + movement_onehanded_acc_penalty_mult = MOVEMENT_ACCURACY_PENALTY_MULT_TIER_4 + flags_gun_features = GUN_INTERNAL_MAG|GUN_CAN_POINTBLANK + gun_category = GUN_CATEGORY_HANDGUN + attachable_allowed = list(/obj/item/attachable/scope/mini/flaregun) + + var/last_signal_flare_name + + +/obj/item/weapon/gun/flare/Initialize(mapload, spawn_empty) + . = ..() + if(spawn_empty) + update_icon() + +/obj/item/weapon/gun/flare/handle_starting_attachment() + ..() + var/obj/item/attachable/scope/mini/flaregun/scope = new(src) + scope.hidden = TRUE + scope.flags_attach_features &= ~ATTACH_REMOVABLE + scope.Attach(src) + update_attachables() + + +/obj/item/weapon/gun/flare/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) + +/obj/item/weapon/gun/flare/set_gun_config_values() + ..() + set_fire_delay(FIRE_DELAY_TIER_12) + accuracy_mult = BASE_ACCURACY_MULT + accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10 + scatter = 0 + recoil = RECOIL_AMOUNT_TIER_4 + recoil_unwielded = RECOIL_AMOUNT_TIER_4 + +/obj/item/weapon/gun/flare/set_bullet_traits() + LAZYADD(traits_to_give, list( + BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) + )) + +/obj/item/weapon/gun/flare/reload_into_chamber(mob/user) + . = ..() + to_chat(user, SPAN_WARNING("You pop out [src]'s tube!")) + update_icon() + +/obj/item/weapon/gun/flare/attackby(obj/item/attacking_item, mob/user) + if(istype(attacking_item, /obj/item/device/flashlight/flare)) + var/obj/item/device/flashlight/flare/attacking_flare = attacking_item + if(attacking_flare.on) + to_chat(user, SPAN_WARNING("You can't put a lit flare in [src]!")) + return + if(!attacking_flare.fuel) + to_chat(user, SPAN_WARNING("You can't put a burnt out flare in [src]!")) + return + if(current_mag && current_mag.current_rounds == 0) + ammo = GLOB.ammo_list[attacking_flare.ammo_datum] + playsound(user, reload_sound, 25, 1) + to_chat(user, SPAN_NOTICE("You load [attacking_flare] into [src].")) + current_mag.current_rounds++ + qdel(attacking_flare) + update_icon() + else + to_chat(user, SPAN_WARNING("[src] is already loaded!")) + else + to_chat(user, SPAN_WARNING("That's not a flare!")) + +/obj/item/weapon/gun/flare/unload(mob/user) + if(flags_gun_features & GUN_BURST_FIRING) + return + unload_flare(user) + +/obj/item/weapon/gun/flare/proc/unload_flare(mob/user) + if(!current_mag) + return + if(current_mag.current_rounds) + var/obj/item/device/flashlight/flare/unloaded_flare = new ammo.handful_type(get_turf(src)) + playsound(user, reload_sound, 25, TRUE) + current_mag.current_rounds-- + if(user) + to_chat(user, SPAN_NOTICE("You unload [unloaded_flare] from \the [src].")) + user.put_in_hands(unloaded_flare) + update_icon() + +/obj/item/weapon/gun/flare/unique_action(mob/user) + if(!user || !isturf(user.loc) || !current_mag || !current_mag.current_rounds) + return + + var/turf/flare_turf = user.loc + var/area/flare_area = flare_turf.loc + + if(flare_area.ceiling > CEILING_GLASS) + to_chat(user, SPAN_NOTICE("The roof above you is too dense.")) + return + + if(!istype(ammo, /datum/ammo/flare)) + to_chat(user, SPAN_NOTICE("[src] jams as it is somehow loaded with incorrect ammo!")) + return + + if(user.action_busy) + return + + if(!do_after(user, 1 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + return + + if(!current_mag || !current_mag.current_rounds) + return + + current_mag.current_rounds-- + + flare_turf.ceiling_debris() + + var/datum/ammo/flare/explicit_ammo = ammo + + var/obj/item/device/flashlight/flare/fired_flare = new explicit_ammo.flare_type(get_turf(src)) + to_chat(user, SPAN_NOTICE("You fire [fired_flare] into the air!")) + fired_flare.visible_message(SPAN_WARNING("\A [fired_flare] bursts into brilliant light in the sky!")) + fired_flare.invisibility = INVISIBILITY_MAXIMUM + fired_flare.mouse_opacity = FALSE + playsound(user.loc, fire_sound, 50, 1) + + var/obj/effect/flare_light/light_effect = new (fired_flare, fired_flare.light_range, fired_flare.light_power, fired_flare.light_color) + light_effect.RegisterSignal(fired_flare, COMSIG_ATOM_SET_LIGHT_ON, TYPE_PROC_REF(/obj/effect/flare_light, flare_light_change)) + + if(fired_flare.activate_signal(user)) + last_signal_flare_name = fired_flare.name + + update_icon() + +/obj/item/weapon/gun/flare/get_examine_text(mob/user) + . = ..() + if(last_signal_flare_name) + . += SPAN_NOTICE("The last signal flare fired has the designation: [last_signal_flare_name]") + +/obj/effect/flare_light + name = "flare light" + desc = "You are not supposed to see this. Please report it." + icon_state = "" //No sprite + invisibility = INVISIBILITY_MAXIMUM + light_system = STATIC_LIGHT + +/obj/effect/flare_light/Initialize(mapload, light_range, light_power, light_color) + . = ..() + set_light(light_range, light_power, light_color) + +/obj/effect/flare_light/proc/flare_light_change(original_flare, new_light_value) + if(!new_light_value) + qdel(original_flare) + qdel(src) diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm index d93080bbbc99..d02fc9d58796 100644 --- a/code/modules/projectiles/guns/specialist.dm +++ b/code/modules/projectiles/guns/specialist.dm @@ -1368,146 +1368,3 @@ C.apply_effect(4, STUN) //For good measure C.apply_effect(6, STUTTER) C.emote("pain") - -//------------------------------------------------------- -//Flare gun. Close enough to a specialist gun? - -/obj/item/weapon/gun/flare - name = "\improper M82-F flare gun" - desc = "A flare gun issued to JTAC operators to use with flares. Comes with a miniscope. One shot, one... life saved?" - icon_state = "m82f" - item_state = "m82f" - current_mag = /obj/item/ammo_magazine/internal/flare - reload_sound = 'sound/weapons/gun_shotgun_shell_insert.ogg' - fire_sound = 'sound/weapons/gun_flare.ogg' - aim_slowdown = 0 - flags_equip_slot = SLOT_WAIST - wield_delay = WIELD_DELAY_VERY_FAST - movement_onehanded_acc_penalty_mult = MOVEMENT_ACCURACY_PENALTY_MULT_TIER_4 - flags_gun_features = GUN_INTERNAL_MAG|GUN_CAN_POINTBLANK - gun_category = GUN_CATEGORY_HANDGUN - attachable_allowed = list(/obj/item/attachable/scope/mini/flaregun) - - var/last_signal_flare_name - - -/obj/item/weapon/gun/flare/Initialize(mapload, spawn_empty) - . = ..() - if(spawn_empty) - update_icon() - -/obj/item/weapon/gun/flare/handle_starting_attachment() - ..() - var/obj/item/attachable/scope/mini/flaregun/S = new(src) - S.hidden = TRUE - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachables() - - -/obj/item/weapon/gun/flare/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 12, "rail_y" = 20, "under_x" = 19, "under_y" = 14, "stock_x" = 19, "stock_y" = 14) - -/obj/item/weapon/gun/flare/set_gun_config_values() - ..() - set_fire_delay(FIRE_DELAY_TIER_12) - accuracy_mult = BASE_ACCURACY_MULT - accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10 - scatter = 0 - recoil = RECOIL_AMOUNT_TIER_4 - recoil_unwielded = RECOIL_AMOUNT_TIER_4 - -/obj/item/weapon/gun/flare/set_bullet_traits() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) - )) - -/obj/item/weapon/gun/flare/reload_into_chamber(mob/user) - . = ..() - to_chat(user, SPAN_WARNING("You pop out [src]'s tube!")) - update_icon() - -/obj/item/weapon/gun/flare/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/device/flashlight/flare)) - var/obj/item/device/flashlight/flare/F = I - if(F.on) - to_chat(user, SPAN_WARNING("You can't put a lit flare in [src]!")) - return - if(!F.fuel) - to_chat(user, SPAN_WARNING("You can't put a burnt out flare in [src]!")) - return - if(current_mag && current_mag.current_rounds == 0) - ammo = GLOB.ammo_list[F.ammo_datum] - playsound(user, reload_sound, 25, 1) - to_chat(user, SPAN_NOTICE("You load \the [F] into [src].")) - current_mag.current_rounds++ - qdel(I) - update_icon() - else - to_chat(user, SPAN_WARNING("\The [src] is already loaded!")) - else - to_chat(user, SPAN_WARNING("That's not a flare!")) - -/obj/item/weapon/gun/flare/unload(mob/user) - if(flags_gun_features & GUN_BURST_FIRING) - return - unload_flare(user) - -/obj/item/weapon/gun/flare/proc/unload_flare(mob/user) - if(!current_mag) - return - if(current_mag.current_rounds) - var/obj/item/device/flashlight/flare/unloaded_flare = new ammo.handful_type(get_turf(src)) - playsound(user, reload_sound, 25, TRUE) - current_mag.current_rounds-- - if(user) - to_chat(user, SPAN_NOTICE("You unload \the [unloaded_flare] from \the [src].")) - user.put_in_hands(unloaded_flare) - update_icon() - -/obj/item/weapon/gun/flare/unique_action(mob/user) - if(!user || !isturf(user.loc) || !current_mag || !current_mag.current_rounds) - return - - var/turf/flare_turf = user.loc - var/area/flare_area = flare_turf.loc - - if(flare_area.ceiling > CEILING_GLASS) - to_chat(user, SPAN_NOTICE("The roof above you is too dense.")) - return - - if(!istype(ammo, /datum/ammo/flare)) - to_chat(user, SPAN_NOTICE("\The [src] jams as it is somehow loaded with incorrect ammo!")) - return - - if(user.action_busy) - return - - if(!do_after(user, 1 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) - return - - if(!current_mag || !current_mag.current_rounds) - return - - current_mag.current_rounds-- - - flare_turf.ceiling_debris() - - var/datum/ammo/flare/explicit_ammo = ammo - - var/obj/item/device/flashlight/flare/fired_flare = new explicit_ammo.flare_type(get_turf(src)) - to_chat(user, SPAN_NOTICE("You fire \the [fired_flare] into the air!")) - fired_flare.visible_message(SPAN_WARNING("\A [fired_flare] bursts into brilliant light in the sky!")) - fired_flare.invisibility = INVISIBILITY_MAXIMUM - fired_flare.mouse_opacity = FALSE - playsound(user.loc, fire_sound, 50, 1) - - if(fired_flare.activate_signal(user)) - last_signal_flare_name = fired_flare.name - - update_icon() - -/obj/item/weapon/gun/flare/get_examine_text(mob/user) - . = ..() - if(last_signal_flare_name) - . += SPAN_NOTICE("The last signal flare fired has the designation: [last_signal_flare_name]") diff --git a/colonialmarines.dme b/colonialmarines.dme index 8568cfc6e11d..883663f92026 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -2116,6 +2116,7 @@ s// DM Environment file for colonialmarines.dme. #include "code\modules\projectiles\ammo_boxes\round_boxes.dm" #include "code\modules\projectiles\guns\boltaction.dm" #include "code\modules\projectiles\guns\energy.dm" +#include "code\modules\projectiles\guns\flare_gun.dm" #include "code\modules\projectiles\guns\lever_action.dm" #include "code\modules\projectiles\guns\misc.dm" #include "code\modules\projectiles\guns\pistols.dm" From e13af749a49db2f9e3ab918bc4f42ba547210e19 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 07:16:37 +0100 Subject: [PATCH 08/35] Automatic changelog for PR #4360 [ci skip] --- html/changelogs/AutoChangeLog-pr-4360.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4360.yml diff --git a/html/changelogs/AutoChangeLog-pr-4360.yml b/html/changelogs/AutoChangeLog-pr-4360.yml new file mode 100644 index 000000000000..01a6ceb93414 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4360.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - bugfix: "Firing flares into the air now produces light again" \ No newline at end of file From c2d8304b94b9a338a755d9be29265b90036c24ac Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:22:26 -0400 Subject: [PATCH 09/35] Removes annoying and inaccurate to_chat from join response team menu (#4358) # About the pull request Removes annoying and inaccurate to_chat from join response team menu # Explain why it's good for the game It keeps bugging me # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow fix: Removed annoying and inaccurate to_chat from join response team menu /:cl: --- code/datums/emergency_calls/emergency_call.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 6d41c2d64d0b..390a8cfd5d61 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -155,7 +155,6 @@ var/choice = tgui_input_list(src, "Choose a distress beacon to join", "", beacons) if(!choice) - to_chat(src, "Something seems to have gone wrong!") return if(!beacons[choice] || !(beacons[choice] in SSticker.mode.picked_calls)) From 56dee2ada7c78a95d22f8b3a1ab9ef68309a6517 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 07:32:46 +0100 Subject: [PATCH 10/35] Automatic changelog for PR #4358 [ci skip] --- html/changelogs/AutoChangeLog-pr-4358.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4358.yml diff --git a/html/changelogs/AutoChangeLog-pr-4358.yml b/html/changelogs/AutoChangeLog-pr-4358.yml new file mode 100644 index 000000000000..d83bf6aef916 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4358.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - bugfix: "Removed annoying and inaccurate to_chat from join response team menu" \ No newline at end of file From 1e11f32de6c45d90a28a351d6e44eb6ceaf6184b Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:22:42 -0400 Subject: [PATCH 11/35] Fixes repeatable techs not having correct overlays (#4356) # About the pull request Repeatable techs now are not set as unlocked immediately and fit with the other techs. # Explain why it's good for the game Inconsistency bad # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow fix: Fixed repeatable techs not having correct overlays /:cl: --- code/modules/cm_tech/techs/abstract/repeatable.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/cm_tech/techs/abstract/repeatable.dm b/code/modules/cm_tech/techs/abstract/repeatable.dm index 4b240814e0c6..62fa27540b7b 100644 --- a/code/modules/cm_tech/techs/abstract/repeatable.dm +++ b/code/modules/cm_tech/techs/abstract/repeatable.dm @@ -9,8 +9,6 @@ var/next_purchase = 0 var/increase_per_purchase = 0 - unlocked = TRUE - /datum/tech/repeatable/ui_static_data(mob/user) . = ..() if(increase_per_purchase) From 6611455b187169d1eee0e2f6d6ed889753f10be1 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 07:49:53 +0100 Subject: [PATCH 12/35] Automatic changelog for PR #4356 [ci skip] --- html/changelogs/AutoChangeLog-pr-4356.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4356.yml diff --git a/html/changelogs/AutoChangeLog-pr-4356.yml b/html/changelogs/AutoChangeLog-pr-4356.yml new file mode 100644 index 000000000000..36c53f8811d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4356.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - bugfix: "Fixed repeatable techs not having correct overlays" \ No newline at end of file From ec3e08cb2d8cea1c61f3aba45dfb793d118ac3cc Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:28:05 -0400 Subject: [PATCH 13/35] End game timing changes (#4353) # About the pull request This PR: Lowers the xeno endgame start to 55 minutes into the round. Lowers the nuke endgame start to 115 minutes into the round. Lowers the nuke cost to 5 points. # Explain why it's good for the game Xenos need a bit of a boost come midgame. Nuke should be easier to acquire once it is time to consider it and it should become available on the hour rather than 5 minutes offset due to roundstart time. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow balance: Lowered the xeno endgame start to 55 minutes into the round balance: Lowered the nuke endgame start to 115 minutes into the round balance: Lowered the nuke cost to 5 points /:cl: --- code/__DEFINES/xeno.dm | 2 +- code/controllers/subsystem/ticker.dm | 4 ++-- code/modules/cm_tech/techs/marine/tier4/nuke.dm | 11 ++++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 0f822385ad13..b178f0692dd6 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -169,7 +169,7 @@ #define XENO_BURIED_LARVA_TIME_LIMIT (30 MINUTES) /// The time when xenos can start taking over comm towers -#define XENO_COMM_ACQUISITION_TIME (90 MINUTES) +#define XENO_COMM_ACQUISITION_TIME (55 MINUTES) /// The time it takes for a pylon to give one larva while activated #define XENO_PYLON_ACTIVATION_COOLDOWN (5 MINUTES) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0e23b99a9cc2..db6c3c71a7fa 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -199,6 +199,8 @@ SUBSYSTEM_DEF(ticker) if(CONFIG_GET(flag/autooocmute)) ooc_allowed = FALSE + round_start_time = world.time + CHECK_TICK for(var/I in round_start_events) var/datum/callback/cb = I @@ -222,9 +224,7 @@ SUBSYSTEM_DEF(ticker) equip_characters() GLOB.data_core.manifest() - log_world("Game start took [(world.timeofday - init_start) / 10]s") - round_start_time = world.time //SSdbcore.SetRoundStart() current_state = GAME_STATE_PLAYING diff --git a/code/modules/cm_tech/techs/marine/tier4/nuke.dm b/code/modules/cm_tech/techs/marine/tier4/nuke.dm index 441c9aba69fc..f970f37a3fab 100644 --- a/code/modules/cm_tech/techs/marine/tier4/nuke.dm +++ b/code/modules/cm_tech/techs/marine/tier4/nuke.dm @@ -1,11 +1,11 @@ -#define NUKE_UNLOCK_TIME (120 MINUTES) +#define NUKE_UNLOCK_TIME (115 MINUTES) /datum/tech/nuke name = "Nuclear Device" - //desc = "Purchase a nuclear device. Only able to purchase after X minutes into the operation. It's the only way to be sure." //See New() + desc = "Purchase a nuclear device. It's the only way to be sure." icon_state = "nuke" - required_points = 20 + required_points = 5 tier = /datum/tier/four @@ -15,7 +15,7 @@ flags = TREE_FLAG_MARINE /datum/tech/nuke/New() - desc = "Purchase a nuclear device. Only able to purchase [NUKE_UNLOCK_TIME / (1 MINUTES)] minutes into the operation. It's the only way to be sure." + SSticker.OnRoundstart(CALLBACK(src, PROC_REF(handle_description))) /datum/tech/nuke/on_unlock() . = ..() @@ -41,4 +41,5 @@ return TRUE -#undef NUKE_UNLOCK_TIME +/datum/tech/nuke/proc/handle_description() + desc = "Purchase a nuclear device. Only purchasable [Ceiling((NUKE_UNLOCK_TIME + SSticker.round_start_time) / (1 MINUTES))] minutes into the operation. It's the only way to be sure." From c3b912a8e2e91a1ffb9e1e365a7c6c39cc189bd8 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 08:03:48 +0100 Subject: [PATCH 14/35] Automatic changelog for PR #4353 [ci skip] --- html/changelogs/AutoChangeLog-pr-4353.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4353.yml diff --git a/html/changelogs/AutoChangeLog-pr-4353.yml b/html/changelogs/AutoChangeLog-pr-4353.yml new file mode 100644 index 000000000000..13aa7a1a9f81 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4353.yml @@ -0,0 +1,6 @@ +author: "Morrow" +delete-after: True +changes: + - balance: "Lowered the xeno endgame start to 55 minutes into the round" + - balance: "Lowered the nuke endgame start to 115 minutes into the round" + - balance: "Lowered the nuke cost to 5 points" \ No newline at end of file From 589536e3230df50af7bfba2dac34b0eca2cdbd0a Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 10 Sep 2023 22:32:20 -0700 Subject: [PATCH 15/35] Repaths /obj/item/projectile -> /obj/projectile (#4377) # About the pull request Repaths the above. # Explain why it's good for the game Projectiles use absolutely nothing from item code, evidenced by it compiling as soon as I repathed it. Probably makes projectile init 0.05% cheaper --- .../signals/atom/mob/living/signals_human.dm | 2 +- .../dcs/signals/atom/signals_projectile.dm | 12 +- code/controllers/subsystem/projectiles.dm | 16 +- code/datums/components/cluster_stack.dm | 2 +- .../elements/bullet_trait/bullet_trait.md | 4 +- .../elements/bullet_trait/damage_boost.dm | 4 +- code/datums/elements/bullet_trait/iff.dm | 6 +- .../elements/bullet_trait/ignored_range.dm | 4 +- .../elements/bullet_trait/incendiary.dm | 2 +- .../bullet_trait/penetrating/heavy.dm | 4 +- .../bullet_trait/penetrating/penetrating.dm | 6 +- code/game/atoms_movable.dm | 2 +- code/game/machinery/atmoalter/canister.dm | 2 +- code/game/machinery/bots/bots.dm | 2 +- .../machinery/computer/HolodeckControl.dm | 2 +- code/game/machinery/computer/computer.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/telecomms/presets.dm | 2 +- code/game/objects/effects/decals/misc.dm | 2 +- .../objects/effects/effect_system/foam.dm | 2 +- .../objects/effects/effect_system/smoke.dm | 4 +- code/game/objects/effects/spiders.dm | 4 +- .../reagent_containers/food/drinks/bottle.dm | 2 +- .../food/drinks/drinkingglass.dm | 2 +- code/game/objects/items/shards.dm | 2 +- .../objects/items/tools/maintenance_tools.dm | 2 +- code/game/objects/items/weapons/misc.dm | 4 +- code/game/objects/objs.dm | 2 +- code/game/objects/shrapnel.dm | 2 +- .../objects/structures/barricade/barricade.dm | 2 +- code/game/objects/structures/blocker.dm | 2 +- .../structures/crates_lockers/closets.dm | 2 +- .../closets/secure/guncabinet.dm | 2 +- .../structures/crates_lockers/largecrate.dm | 2 +- code/game/objects/structures/curtains.dm | 2 +- code/game/objects/structures/displaycase.dm | 2 +- code/game/objects/structures/fence.dm | 2 +- code/game/objects/structures/flora.dm | 2 +- code/game/objects/structures/girders.dm | 2 +- code/game/objects/structures/grille.dm | 4 +- code/game/objects/structures/inflatable.dm | 2 +- code/game/objects/structures/lamarr_cage.dm | 2 +- code/game/objects/structures/mirror.dm | 2 +- code/game/objects/structures/misc.dm | 2 +- code/game/objects/structures/props.dm | 2 +- .../objects/structures/reagent_dispensers.dm | 4 +- .../stool_bed_chair_nest/janicart.dm | 2 +- code/game/objects/structures/window.dm | 2 +- code/game/objects/structures/window_frame.dm | 2 +- code/game/turfs/turf.dm | 2 +- code/game/turfs/walls/wall_types.dm | 10 +- code/modules/cm_aliens/Ovipositor.dm | 4 +- code/modules/cm_aliens/XenoStructures.dm | 10 +- code/modules/cm_aliens/structures/egg.dm | 2 +- code/modules/cm_aliens/structures/fruit.dm | 2 +- code/modules/cm_aliens/structures/trap.dm | 2 +- code/modules/cm_aliens/structures/tunnel.dm | 2 +- .../structures/xeno_structures_boilertrap.dm | 2 +- .../cm_marines/equipment/mortar/mortars.dm | 2 +- code/modules/cm_marines/overwatch.dm | 2 +- code/modules/cm_marines/smartgun_mount.dm | 12 +- code/modules/cm_preds/smartdisc.dm | 2 +- code/modules/cm_preds/yaut_bracers.dm | 2 +- code/modules/cm_preds/yaut_weapons.dm | 12 +- code/modules/cm_tech/implements/armor.dm | 2 +- .../cm_tech/implements/medical_czsp.dm | 12 +- code/modules/cm_tech/implements/railgun.dm | 2 +- code/modules/cm_tech/resources/resource.dm | 2 +- code/modules/defenses/defenses.dm | 2 +- code/modules/defenses/sentry.dm | 2 +- code/modules/defenses/sentry_flamer.dm | 2 +- code/modules/hydroponics/hydro_tray.dm | 2 +- .../living/carbon/xenomorph/Facehuggers.dm | 2 +- .../abilities/boiler/boiler_powers.dm | 2 +- .../xenomorph/abilities/general_powers.dm | 2 +- .../abilities/praetorian/praetorian_powers.dm | 2 +- .../abilities/ravager/ravager_powers.dm | 2 +- .../abilities/runner/runner_powers.dm | 2 +- .../abilities/sentinel/sentinel_powers.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../mob/living/simple_animal/hostile/alien.dm | 6 +- .../simple_animal/hostile/retaliate/drone.dm | 8 +- .../living/simple_animal/hostile/russian.dm | 4 +- .../mob/living/simple_animal/parrot.dm | 2 +- code/modules/power/lighting.dm | 2 +- code/modules/projectiles/ammo_datums.dm | 358 +++++++++--------- code/modules/projectiles/gun.dm | 30 +- code/modules/projectiles/gun_attachables.dm | 2 +- code/modules/projectiles/guns/boltaction.dm | 2 +- code/modules/projectiles/guns/energy.dm | 2 +- code/modules/projectiles/guns/lever_action.dm | 4 +- code/modules/projectiles/guns/revolvers.dm | 2 +- code/modules/projectiles/guns/shotguns.dm | 2 +- code/modules/projectiles/guns/specialist.dm | 12 +- .../homing_projectile_component.dm | 6 +- code/modules/projectiles/projectile.dm | 106 +++--- code/modules/recycling/sortingmachinery.dm | 2 +- code/modules/shuttles/shuttle_console.dm | 2 +- .../modules/teleporters/teleporter_console.dm | 2 +- code/modules/tents/blockers.dm | 2 +- code/modules/tents/deployed_tents.dm | 2 +- code/modules/tents/equipment.dm | 2 +- code/modules/vehicles/hardpoints/hardpoint.dm | 4 +- .../vehicles/hardpoints/holder/tank_turret.dm | 2 +- .../vehicles/hardpoints/primary/flamer.dm | 2 +- .../hardpoints/secondary/grenade_launcher.dm | 2 +- .../vehicles/interior/interactable/doors.dm | 2 +- .../vehicles/interior/interior_hull.dm | 4 +- .../multitile/multitile_interaction.dm | 2 +- code/modules/vehicles/van/van.dm | 2 +- code/modules/vehicles/vehicle.dm | 2 +- 112 files changed, 422 insertions(+), 422 deletions(-) diff --git a/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm b/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm index b38339d1af17..0a9e00b59e04 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm @@ -12,7 +12,7 @@ #define COMSIG_HUMAN_REVIVED "human_revived" /// From /mob/living/carbon/human/bullet_act #define COMSIG_HUMAN_PRE_BULLET_ACT "human_pre_bullet_act" -/// From /mob/living/carbon/human/bullet_act(): (damage_result, ammo_flags, obj/item/projectile/P) +/// From /mob/living/carbon/human/bullet_act(): (damage_result, ammo_flags, obj/projectile/P) #define COMSIG_HUMAN_BULLET_ACT "human_bullet_act" #define COMPONENT_CANCEL_BULLET_ACT (1<<0) diff --git a/code/__DEFINES/dcs/signals/atom/signals_projectile.dm b/code/__DEFINES/dcs/signals/atom/signals_projectile.dm index 861f351a1f58..46014d5351d5 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_projectile.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_projectile.dm @@ -15,17 +15,17 @@ #define COMSIG_AMMO_POINT_BLANK "ammo_point_blank" #define COMPONENT_CANCEL_AMMO_POINT_BLANK (1<<0) -/// From /obj/item/projectile/handle_mob(): (mob/living/target) +/// From /obj/projectile/handle_mob(): (mob/living/target) #define COMSIG_BULLET_PRE_HANDLE_MOB "bullet_pre_handle_mob" -/// From /obj/item/projectile/handle_mob(): (mob/living/target) +/// From /obj/projectile/handle_mob(): (mob/living/target) #define COMSIG_BULLET_POST_HANDLE_MOB "bullet_post_handle_mob" -/// From /obj/item/projectile/handle_obj(): (obj/target, did_hit) +/// From /obj/projectile/handle_obj(): (obj/target, did_hit) #define COMSIG_BULLET_POST_HANDLE_OBJ "bullet_post_handle_obj" -/// From /obj/item/projectile/handle_obj(): (obj/target) +/// From /obj/projectile/handle_obj(): (obj/target) #define COMSIG_BULLET_PRE_HANDLE_OBJ "bullet_pre_handle_obj" -/// From /obj/item/projectile/scan_a_turf(): (turf/target) +/// From /obj/projectile/scan_a_turf(): (turf/target) #define COMSIG_BULLET_POST_HANDLE_TURF "bullet_post_handle_turf" -/// From /obj/item/projectile/scan_a_turf(): (turf/target) +/// From /obj/projectile/scan_a_turf(): (turf/target) #define COMSIG_BULLET_PRE_HANDLE_TURF "bullet_pre_handle_turf" #define COMPONENT_BULLET_PASS_THROUGH (1<<0) #define COMSIG_BULLET_TERMINAL "bullet_terminal" diff --git a/code/controllers/subsystem/projectiles.dm b/code/controllers/subsystem/projectiles.dm index 075a4f7facc5..a23303ea282d 100644 --- a/code/controllers/subsystem/projectiles.dm +++ b/code/controllers/subsystem/projectiles.dm @@ -6,11 +6,11 @@ SUBSYSTEM_DEF(projectiles) priority = SS_PRIORITY_PROJECTILES /// List of projectiles handled by the subsystem - VAR_PRIVATE/list/obj/item/projectile/projectiles + VAR_PRIVATE/list/obj/projectile/projectiles /// List of projectiles on hold due to sleeping - VAR_PRIVATE/list/obj/item/projectile/sleepers + VAR_PRIVATE/list/obj/projectile/sleepers /// List of projectiles handled this controller firing - VAR_PRIVATE/list/obj/item/projectile/flying + VAR_PRIVATE/list/obj/projectile/flying /* * Scheduling notes: @@ -42,14 +42,14 @@ SUBSYSTEM_DEF(projectiles) flying = projectiles.Copy() flying -= sleepers while(flying.len) - var/obj/item/projectile/projectile = flying[flying.len] + var/obj/projectile/projectile = flying[flying.len] flying.len-- var/delta_time = wait * world.tick_lag * (1 SECONDS) handle_projectile_flight(projectile, delta_time) if(MC_TICK_CHECK) return -/datum/controller/subsystem/projectiles/proc/handle_projectile_flight(obj/item/projectile/projectile, delta_time) +/datum/controller/subsystem/projectiles/proc/handle_projectile_flight(obj/projectile/projectile, delta_time) PRIVATE_PROC(TRUE) set waitfor = FALSE // We're in double-check land here because there ARE rulebreakers. @@ -66,15 +66,15 @@ SUBSYSTEM_DEF(projectiles) stop_projectile(projectile) // Ideally this was already done thru process() qdel(projectile) -/datum/controller/subsystem/projectiles/proc/process_wrapper(obj/item/projectile/projectile, delta_time) +/datum/controller/subsystem/projectiles/proc/process_wrapper(obj/projectile/projectile, delta_time) // set waitfor=TRUE . = PROC_RETURN_SLEEP . = projectile.process(delta_time) sleepers -= projectile // Recover from sleep -/datum/controller/subsystem/projectiles/proc/queue_projectile(obj/item/projectile/projectile) +/datum/controller/subsystem/projectiles/proc/queue_projectile(obj/projectile/projectile) projectiles |= projectile -/datum/controller/subsystem/projectiles/proc/stop_projectile(obj/item/projectile/projectile) +/datum/controller/subsystem/projectiles/proc/stop_projectile(obj/projectile/projectile) projectiles -= projectile flying -= projectile // avoids problems with deleted projs projectile.speed = 0 diff --git a/code/datums/components/cluster_stack.dm b/code/datums/components/cluster_stack.dm index c79ce855e5b1..01d266d01a15 100644 --- a/code/datums/components/cluster_stack.dm +++ b/code/datums/components/cluster_stack.dm @@ -75,7 +75,7 @@ SIGNAL_HANDLER L += "Cluster Stack: [cluster_stacks]/[MAX_CLUSTER_STACKS]" -/datum/component/cluster_stack/proc/apply_cluster_stacks(mob/living/L, damage_result, ammo_flags, obj/item/projectile/P) +/datum/component/cluster_stack/proc/apply_cluster_stacks(mob/living/L, damage_result, ammo_flags, obj/projectile/P) SIGNAL_HANDLER if(cluster_stacks >= MAX_CLUSTER_STACKS) var/old_dmg_cont = damage_counter diff --git a/code/datums/elements/bullet_trait/bullet_trait.md b/code/datums/elements/bullet_trait/bullet_trait.md index 9253b3a6311a..8081843bd000 100644 --- a/code/datums/elements/bullet_trait/bullet_trait.md +++ b/code/datums/elements/bullet_trait/bullet_trait.md @@ -1,7 +1,7 @@ # A PROTOTYPE FOR MAKING ANY BULLET TRAITS Element representing traits that can be applied to bullets upon being fired -* Must be attached to a projectile (`/obj/item/projectile` in `projectile.dm`) +* Must be attached to a projectile (`/obj/projectile` in `projectile.dm`) * Allows for the customization of bullet behavior based on ammo types or guns (or other things) By convention, bullet_traits should be named bullet_trait_[insert rest of name here] @@ -16,7 +16,7 @@ By convention, bullet_traits should be named bullet_trait_[insert rest of name h /datum/element/bullet_trait/databaseAttach(datum/target) . = ..() // All bullet traits can only be applied to projectiles - if(!istype(target, /obj/item/projectile)) + if(!istype(target, /obj/projectile)) return ELEMENT_INCOMPATIBLE [handling here] diff --git a/code/datums/elements/bullet_trait/damage_boost.dm b/code/datums/elements/bullet_trait/damage_boost.dm index 1d93851dd73d..a0370f2d36b6 100644 --- a/code/datums/elements/bullet_trait/damage_boost.dm +++ b/code/datums/elements/bullet_trait/damage_boost.dm @@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(damage_boost_vehicles, typecacheof(/obj/vehicle/multitile)) */ /datum/element/bullet_trait_damage_boost/Attach(datum/target, damage_mult, list/damage_boosted_atoms) . = ..() - if(!istype(target, /obj/item/projectile)) + if(!istype(target, /obj/projectile)) return ELEMENT_INCOMPATIBLE src.damage_mult = damage_mult @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(damage_boost_vehicles, typecacheof(/obj/vehicle/multitile)) //add more cases for other interactions (switch doesn't seem to work with istype) else return 0 -/datum/element/bullet_trait_damage_boost/proc/handle_bullet(obj/item/projectile/P, atom/A) +/datum/element/bullet_trait_damage_boost/proc/handle_bullet(obj/projectile/P, atom/A) SIGNAL_HANDLER atom_type = check_type(A) diff --git a/code/datums/elements/bullet_trait/iff.dm b/code/datums/elements/bullet_trait/iff.dm index bd08c100d0f4..ab48b29f4812 100644 --- a/code/datums/elements/bullet_trait/iff.dm +++ b/code/datums/elements/bullet_trait/iff.dm @@ -1,5 +1,5 @@ /// This is the iff_group -/obj/item/projectile/var/runtime_iff_group +/obj/projectile/var/runtime_iff_group /datum/element/bullet_trait_iff // General bullet trait vars @@ -13,7 +13,7 @@ /datum/element/bullet_trait_iff/Attach(datum/target, iff_group) . = ..() - if(!istype(target, /obj/item/projectile)) + if(!istype(target, /obj/projectile)) return ELEMENT_INCOMPATIBLE if(!iff_group) @@ -39,7 +39,7 @@ /datum/element/bullet_trait_iff/proc/set_iff(datum/target, mob/living/carbon/human/firer) SIGNAL_HANDLER - var/obj/item/projectile/P = target + var/obj/projectile/P = target P.runtime_iff_group = get_user_iff_group(firer) // We have a "cache" to avoid getting ID card iff every shot, diff --git a/code/datums/elements/bullet_trait/ignored_range.dm b/code/datums/elements/bullet_trait/ignored_range.dm index 668e5dab2dd7..3910fb400bdb 100644 --- a/code/datums/elements/bullet_trait/ignored_range.dm +++ b/code/datums/elements/bullet_trait/ignored_range.dm @@ -12,7 +12,7 @@ /datum/element/bullet_trait_ignored_range/Attach(datum/target, range_to_ignore) . = ..() ignored_range = range_to_ignore - if(!istype(target, /obj/item/projectile)) + if(!istype(target, /obj/projectile)) return ELEMENT_INCOMPATIBLE RegisterSignal(target, COMSIG_BULLET_CHECK_MOB_SKIPPING, PROC_REF(check_distance)) @@ -22,7 +22,7 @@ return ..() -/datum/element/bullet_trait_ignored_range/proc/check_distance(obj/item/projectile/P, mob/living/carbon/human/projectile_target) +/datum/element/bullet_trait_ignored_range/proc/check_distance(obj/projectile/P, mob/living/carbon/human/projectile_target) SIGNAL_HANDLER if(P.distance_travelled <= ignored_range) diff --git a/code/datums/elements/bullet_trait/incendiary.dm b/code/datums/elements/bullet_trait/incendiary.dm index c7f6e75e8e3b..2d5d0a15f368 100644 --- a/code/datums/elements/bullet_trait/incendiary.dm +++ b/code/datums/elements/bullet_trait/incendiary.dm @@ -8,7 +8,7 @@ /datum/element/bullet_trait_incendiary/Attach(datum/target, reagent = /datum/reagent/napalm/ut, stacks = 20) . = ..() - if(!istype(target, /obj/item/projectile)) + if(!istype(target, /obj/projectile)) return ELEMENT_INCOMPATIBLE if(ispath(reagent)) diff --git a/code/datums/elements/bullet_trait/penetrating/heavy.dm b/code/datums/elements/bullet_trait/penetrating/heavy.dm index 13086d01b212..fa41b8dcfc4e 100644 --- a/code/datums/elements/bullet_trait/penetrating/heavy.dm +++ b/code/datums/elements/bullet_trait/penetrating/heavy.dm @@ -18,7 +18,7 @@ src.damage_lost_per_pen = damage_lost_per_pen -/datum/element/bullet_trait_penetrating/heavy/handle_passthrough_movables(obj/item/projectile/bullet, atom/movable/hit_movable, did_hit) +/datum/element/bullet_trait_penetrating/heavy/handle_passthrough_movables(obj/projectile/bullet, atom/movable/hit_movable, did_hit) if(did_hit) var/slow_mult = 1 if(ismob(hit_movable)) @@ -35,7 +35,7 @@ return COMPONENT_BULLET_PASS_THROUGH -/datum/element/bullet_trait_penetrating/heavy/handle_passthrough_turf(obj/item/projectile/bullet, turf/closed/wall/hit_wall) +/datum/element/bullet_trait_penetrating/heavy/handle_passthrough_turf(obj/projectile/bullet, turf/closed/wall/hit_wall) bullet.distance_travelled += distance_loss_per_hit bullet.damage -= damage_lost_per_pen diff --git a/code/datums/elements/bullet_trait/penetrating/penetrating.dm b/code/datums/elements/bullet_trait/penetrating/penetrating.dm index 00fb330a7330..d3ba8a78f7f4 100644 --- a/code/datums/elements/bullet_trait/penetrating/penetrating.dm +++ b/code/datums/elements/bullet_trait/penetrating/penetrating.dm @@ -8,7 +8,7 @@ /datum/element/bullet_trait_penetrating/Attach(datum/target, distance_loss_per_hit = 3) . = ..() - if(!istype(target, /obj/item/projectile)) + if(!istype(target, /obj/projectile)) return ELEMENT_INCOMPATIBLE src.distance_loss_per_hit = distance_loss_per_hit @@ -27,13 +27,13 @@ )) return ..() -/datum/element/bullet_trait_penetrating/proc/handle_passthrough_movables(obj/item/projectile/P, atom/movable/A, did_hit) +/datum/element/bullet_trait_penetrating/proc/handle_passthrough_movables(obj/projectile/P, atom/movable/A, did_hit) SIGNAL_HANDLER if(did_hit) P.distance_travelled += distance_loss_per_hit return COMPONENT_BULLET_PASS_THROUGH -/datum/element/bullet_trait_penetrating/proc/handle_passthrough_turf(obj/item/projectile/P, turf/closed/wall/T) +/datum/element/bullet_trait_penetrating/proc/handle_passthrough_turf(obj/projectile/P, turf/closed/wall/T) SIGNAL_HANDLER P.distance_travelled += distance_loss_per_hit diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 9b64833cb547..b8a901ccf321 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -271,7 +271,7 @@ /atom/movable/clone/get_examine_text(mob/user) return src.mstr.get_examine_text(user) -/atom/movable/clone/bullet_act(obj/item/projectile/P) +/atom/movable/clone/bullet_act(obj/projectile/P) return src.mstr.bullet_act(P) ///////////////////// diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 7e548d02d919..3c2c81ff0ce7 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -90,7 +90,7 @@ update_flag density = FALSE update_icon() -/obj/structure/machinery/portable_atmospherics/canister/bullet_act(obj/item/projectile/Proj) +/obj/structure/machinery/portable_atmospherics/canister/bullet_act(obj/projectile/Proj) if(Proj.ammo.damage) update_health(round(Proj.ammo.damage / 2)) ..() diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index b7bd61337ee4..116753093fe5 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -92,7 +92,7 @@ else ..() -/obj/structure/machinery/bot/bullet_act(obj/item/projectile/Proj) +/obj/structure/machinery/bot/bullet_act(obj/projectile/Proj) health -= Proj.ammo.damage ..() healthcheck() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 03dbe299b1f7..08de86581518 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -166,7 +166,7 @@ /obj/structure/holohoop/BlockedPassDirs(atom/movable/mover, target_dir) if(istype(mover,/obj/item) && mover.throwing) var/obj/item/I = mover - if(istype(I, /obj/item/projectile)) + if(istype(I, /obj/projectile)) return BLOCKED_MOVEMENT if(prob(50)) I.forceMove(src.loc) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 8fa0b9b86a0c..adce72f7d8b6 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -56,7 +56,7 @@ else return -/obj/structure/machinery/computer/bullet_act(obj/item/projectile/Proj) +/obj/structure/machinery/computer/bullet_act(obj/projectile/Proj) if(exproof) visible_message("[Proj] ricochets off [src]!") return 0 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index e3e5fd3bee87..dc28cdca6f5c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( else return FALSE -/obj/structure/machinery/door/airlock/bullet_act(obj/item/projectile/P) +/obj/structure/machinery/door/airlock/bullet_act(obj/projectile/P) bullet_ping(P) if(P.damage) if(P.ammo.flags_ammo_behavior & AMMO_ROCKET) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index e9006a9f2fb4..2b57fbd0a44d 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -123,7 +123,7 @@ qdel(src) return -/obj/structure/machinery/door/window/bullet_act(obj/item/projectile/Proj) +/obj/structure/machinery/door/window/bullet_act(obj/projectile/Proj) bullet_ping(Proj) if(Proj.ammo.damage) take_damage(round(Proj.ammo.damage / 2)) diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index e924b7ed6a29..b327bd6fdf26 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -76,7 +76,7 @@ if(!on) msg_admin_niche("Portable communication relay shut down for Z-Level [src.z] [ADMIN_JMP(src)]") -/obj/structure/machinery/telecomms/relay/preset/tower/bullet_act(obj/item/projectile/P) +/obj/structure/machinery/telecomms/relay/preset/tower/bullet_act(obj/projectile/P) ..() if(istype(P.ammo, /datum/ammo/xeno/boiler_gas)) update_health(50) diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 5391ed2710a8..338f8b9a7e8e 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -79,7 +79,7 @@ deconstruct(FALSE) return -/obj/effect/decal/mecha_wreckage/bullet_act(obj/item/projectile/Proj) +/obj/effect/decal/mecha_wreckage/bullet_act(obj/projectile/Proj) return 1 /obj/effect/decal/mecha_wreckage/attack_alien(mob/living/carbon/xenomorph/M) diff --git a/code/game/objects/effects/effect_system/foam.dm b/code/game/objects/effects/effect_system/foam.dm index a7647dbd4489..f26736c8bfc4 100644 --- a/code/game/objects/effects/effect_system/foam.dm +++ b/code/game/objects/effects/effect_system/foam.dm @@ -188,7 +188,7 @@ /obj/structure/foamed_metal/ex_act(severity) take_damage(severity * FOAMED_METAL_EXPLOSION_DMG) -/obj/structure/foamed_metal/bullet_act(obj/item/projectile/P) +/obj/structure/foamed_metal/bullet_act(obj/projectile/P) if(P.ammo.damage_type == HALLOSS || P.ammo.damage_type == TOX || P.ammo.damage_type == CLONE || P.damage == 0) return diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index da388b1be1e4..dbbc50a01204 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -63,8 +63,8 @@ /obj/effect/particle_effect/smoke/Crossed(atom/movable/M) ..() - if(istype(M, /obj/item/projectile/beam)) - var/obj/item/projectile/beam/B = M + if(istype(M, /obj/projectile/beam)) + var/obj/projectile/beam/B = M B.damage = (B.damage/2) if(iscarbon(M)) affect(M) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 9c74cd71fbad..f9b5ddb42f68 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -38,7 +38,7 @@ health -= damage healthcheck() -/obj/effect/spider/bullet_act(obj/item/projectile/Proj) +/obj/effect/spider/bullet_act(obj/projectile/Proj) ..() health -= Proj.ammo.damage healthcheck() @@ -67,7 +67,7 @@ if(prob(50)) to_chat(mover, SPAN_WARNING("You get stuck in [src] for a moment.")) return BLOCKED_MOVEMENT - else if(istype(mover, /obj/item/projectile)) + else if(istype(mover, /obj/projectile)) if(prob(30)) return BLOCKED_MOVEMENT return NO_BLOCKED_MOVEMENT diff --git a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm index e1936fbaaec4..0e63a19c7ef1 100644 --- a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm +++ b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm @@ -13,7 +13,7 @@ var/isGlass = TRUE black_market_value = 25 -/obj/item/reagent_container/food/drinks/bottle/bullet_act(obj/item/projectile/P) +/obj/item/reagent_container/food/drinks/bottle/bullet_act(obj/projectile/P) . = ..() if(isGlass) smash() diff --git a/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm b/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm index 31a0e517c725..eea71cd1a4bc 100644 --- a/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm @@ -682,7 +682,7 @@ return -/obj/item/reagent_container/food/drinks/drinkingglass/bullet_act(obj/item/projectile/P) +/obj/item/reagent_container/food/drinks/drinkingglass/bullet_act(obj/projectile/P) . = ..() smash() diff --git a/code/game/objects/items/shards.dm b/code/game/objects/items/shards.dm index 412a14268037..84c3d5b83427 100644 --- a/code/game/objects/items/shards.dm +++ b/code/game/objects/items/shards.dm @@ -75,7 +75,7 @@ // Shrapnel. -// on_embed is called from projectile.dm, bullet_act(obj/item/projectile/P). +// on_embed is called from projectile.dm, bullet_act(obj/projectile/P). // on_embedded_movement is called from human.dm, handle_embedded_objects(). /obj/item/large_shrapnel/proc/on_embedded_movement(mob/living/embedded_mob) diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index 05ba357c80ce..65e8f2986679 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -723,7 +723,7 @@ Welding backpack else . += "No punctures are seen on \the [src] upon closer inspection." -/obj/item/tool/weldpack/bullet_act(obj/item/projectile/P) +/obj/item/tool/weldpack/bullet_act(obj/projectile/P) var/damage = P.damage health -= damage ..() diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm index 26a0a59b8090..d46619e581e9 100644 --- a/code/game/objects/items/weapons/misc.dm +++ b/code/game/objects/items/weapons/misc.dm @@ -27,7 +27,7 @@ edge = 0 var/icon/broken_outline = icon('icons/obj/items/drinks.dmi', "broken") -/obj/item/weapon/broken_bottle/bullet_act(obj/item/projectile/P) +/obj/item/weapon/broken_bottle/bullet_act(obj/projectile/P) . = ..() new/obj/item/shard(src.loc) new/obj/item/shard(src.loc) @@ -50,7 +50,7 @@ edge = 0 var/icon/broken_outline = icon('icons/obj/items/drinks.dmi', "broken") -/obj/item/weapon/broken_glass/bullet_act(obj/item/projectile/P) +/obj/item/weapon/broken_glass/bullet_act(obj/projectile/P) . = ..() new/obj/item/shard(src.loc) new/obj/item/shard(src.loc) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ebe36323d78e..184fc51bd507 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -353,7 +353,7 @@ return ..() -/obj/bullet_act(obj/item/projectile/P) +/obj/bullet_act(obj/projectile/P) //Tasers and the like should not damage objects. if(P.ammo.damage_type == HALLOSS || P.ammo.damage_type == TOX || P.ammo.damage_type == CLONE || P.damage == 0) return 0 diff --git a/code/game/objects/shrapnel.dm b/code/game/objects/shrapnel.dm index 23fff8cbd906..d201584c7f3a 100644 --- a/code/game/objects/shrapnel.dm +++ b/code/game/objects/shrapnel.dm @@ -29,7 +29,7 @@ for(var/i=0;i= EXPLOSION_THRESHOLD_VLOW) deconstruct(FALSE) -/obj/structure/flora/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/flora/get_projectile_hit_boolean(obj/projectile/P) . = ..() return FALSE diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index d014ebfe3b94..e719359ab439 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -316,7 +316,7 @@ return FALSE -/obj/structure/girder/bullet_act(obj/item/projectile/P) +/obj/structure/girder/bullet_act(obj/projectile/P) //Tasers and the like should not damage girders. if(P.ammo.damage_type == HALLOSS || P.ammo.damage_type == TOX || P.ammo.damage_type == CLONE || P.damage == 0) return FALSE diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 5386e50bc9f3..0f864ee2f116 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -101,12 +101,12 @@ /obj/structure/grille/BlockedPassDirs(atom/movable/mover, target_dir) - if(istype(mover, /obj/item/projectile) && prob(90)) + if(istype(mover, /obj/projectile) && prob(90)) return NO_BLOCKED_MOVEMENT return ..() -/obj/structure/grille/bullet_act(obj/item/projectile/Proj) +/obj/structure/grille/bullet_act(obj/projectile/Proj) //Tasers and the like should not damage grilles. if(Proj.ammo.damage_type == HALLOSS) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 1c7f616f52cb..c67c7381f723 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -44,7 +44,7 @@ health = 50 var/deflated = FALSE -/obj/structure/inflatable/bullet_act(obj/item/projectile/Proj) +/obj/structure/inflatable/bullet_act(obj/projectile/Proj) health -= Proj.damage ..() if(health <= 0 && !deflated) diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index dd9a0c19db9b..fbae7a387a63 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -26,7 +26,7 @@ deconstruct(FALSE) -/obj/structure/lamarr/bullet_act(obj/item/projectile/Proj) +/obj/structure/lamarr/bullet_act(obj/projectile/Proj) health -= Proj.damage ..() src.healthcheck() diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 5660f342f90b..a8d76843313a 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -89,7 +89,7 @@ shard_target.take_damage(15) -/obj/structure/mirror/bullet_act(obj/item/projectile/Proj) +/obj/structure/mirror/bullet_act(obj/projectile/Proj) if(prob(Proj.damage * 2)) if(!shattered) shatter() diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm index 9323bca2877e..d290925d4cdf 100644 --- a/code/game/objects/structures/misc.dm +++ b/code/game/objects/structures/misc.dm @@ -12,7 +12,7 @@ if (PF) PF.flags_can_pass_all = PASS_HIGH_OVER_ONLY -/obj/structure/showcase/bullet_act(obj/item/projectile/P) +/obj/structure/showcase/bullet_act(obj/projectile/P) var/damage = P.damage health -= damage ..() diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index 89dd55e88748..3e3150040cb6 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -1343,7 +1343,7 @@ attacked() return ..() -/obj/structure/prop/invuln/joey/bullet_act(obj/item/projectile/P) +/obj/structure/prop/invuln/joey/bullet_act(obj/projectile/P) attacked() return ..() diff --git a/code/game/objects/structures/reagent_dispensers.dm b/code/game/objects/structures/reagent_dispensers.dm index f20a7cfc25d6..7dc6d883a2d5 100644 --- a/code/game/objects/structures/reagent_dispensers.dm +++ b/code/game/objects/structures/reagent_dispensers.dm @@ -68,7 +68,7 @@ if(health <= 0) deconstruct(FALSE) -/obj/structure/reagent_dispensers/bullet_act(obj/item/projectile/Proj) +/obj/structure/reagent_dispensers/bullet_act(obj/projectile/Proj) health -= Proj.damage if(Proj.firer) msg_admin_niche("[key_name_admin(Proj.firer)] fired a projectile at [name] in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) [ADMIN_JMP(loc)].") @@ -296,7 +296,7 @@ return ..() -/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj) +/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/projectile/Proj) if(exploding) return 0 if(ismob(Proj.firer)) source_mob = WEAKREF(Proj.firer) diff --git a/code/game/objects/structures/stool_bed_chair_nest/janicart.dm b/code/game/objects/structures/stool_bed_chair_nest/janicart.dm index ba5e46a2ce7a..15baa15aa1a4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/janicart.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/janicart.dm @@ -103,7 +103,7 @@ buckled_mob.pixel_y = 7 -/obj/structure/bed/chair/janicart/bullet_act(obj/item/projectile/Proj) +/obj/structure/bed/chair/janicart/bullet_act(obj/projectile/Proj) if(buckled_mob) if(prob(85)) return buckled_mob.bullet_act(Proj) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 1a0469a5b9bf..d0651eb5e993 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -117,7 +117,7 @@ if(make_hit_sound) playsound(loc, 'sound/effects/Glasshit.ogg', 25, 1) -/obj/structure/window/bullet_act(obj/item/projectile/Proj) +/obj/structure/window/bullet_act(obj/projectile/Proj) //Tasers and the like should not damage windows. var/ammo_flags = Proj.ammo.flags_ammo_behavior | Proj.projectile_override_flags if(Proj.ammo.damage_type == HALLOSS || Proj.damage <= 0 || ammo_flags == AMMO_ENERGY) diff --git a/code/game/objects/structures/window_frame.dm b/code/game/objects/structures/window_frame.dm index 810b0560bf8b..2c165b424dad 100644 --- a/code/game/objects/structures/window_frame.dm +++ b/code/game/objects/structures/window_frame.dm @@ -148,7 +148,7 @@ . = ..() -/obj/structure/window_frame/bullet_act(obj/item/projectile/P) +/obj/structure/window_frame/bullet_act(obj/projectile/P) bullet_ping(P) take_damage(P.damage) return TRUE diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 26cad71ca23c..837610d5d7fe 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -173,7 +173,7 @@ if(override) return override & COMPONENT_TURF_ALLOW_MOVEMENT - if(isobserver(mover) || istype(mover, /obj/item/projectile)) + if(isobserver(mover) || istype(mover, /obj/projectile)) return TRUE var/fdir = get_dir(mover, src) diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index 8262caef4258..2548801cc7b1 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -993,10 +993,10 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) else return attack_hand(user) -/obj/structure/alien/movable_wall/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/alien/movable_wall/get_projectile_hit_boolean(obj/projectile/P) return TRUE -/obj/structure/alien/movable_wall/bullet_act(obj/item/projectile/P) +/obj/structure/alien/movable_wall/bullet_act(obj/projectile/P) . = ..() take_damage(P.damage) @@ -1110,7 +1110,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) var/explosive_multiplier = 0.3 var/reflection_multiplier = 0.5 -/turf/closed/wall/resin/reflective/bullet_act(obj/item/projectile/P) +/turf/closed/wall/resin/reflective/bullet_act(obj/projectile/P) if(src in P.permutated) return @@ -1122,7 +1122,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) // Bullet gets absorbed if it has IFF or can't be reflected. return - var/obj/item/projectile/new_proj = new(src, construction_data ? construction_data : create_cause_data(initial(name))) + var/obj/projectile/new_proj = new(src, construction_data ? construction_data : create_cause_data(initial(name))) new_proj.generate_bullet(P.ammo) new_proj.damage = P.damage * reflection_multiplier // don't make it too punishing new_proj.accuracy = HIT_ACCURACY_TIER_7 // 35% chance to hit something @@ -1138,7 +1138,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) return TRUE -/turf/closed/wall/resin/reflective/proc/bullet_ignore_turf(obj/item/projectile/P, turf/T) +/turf/closed/wall/resin/reflective/proc/bullet_ignore_turf(obj/projectile/P, turf/T) SIGNAL_HANDLER if(T == src) return COMPONENT_BULLET_PASS_THROUGH diff --git a/code/modules/cm_aliens/Ovipositor.dm b/code/modules/cm_aliens/Ovipositor.dm index 9758497b7009..07d3466a279d 100644 --- a/code/modules/cm_aliens/Ovipositor.dm +++ b/code/modules/cm_aliens/Ovipositor.dm @@ -89,9 +89,9 @@ SPAN_DANGER("You nudge your head against [src].")) // Density override -/obj/ovipositor/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/ovipositor/get_projectile_hit_boolean(obj/projectile/P) return TRUE -/obj/ovipositor/bullet_act(obj/item/projectile/Proj) +/obj/ovipositor/bullet_act(obj/projectile/Proj) health -= Proj.damage return 1 diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index 08e451407989..73ced8099427 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -50,7 +50,7 @@ health -= 50 healthcheck() -/obj/effect/alien/resin/bullet_act(obj/item/projectile/Proj) +/obj/effect/alien/resin/bullet_act(obj/projectile/Proj) health -= Proj.damage ..() healthcheck() @@ -375,7 +375,7 @@ health -= dam healthcheck() -/obj/structure/mineral_door/resin/bullet_act(obj/item/projectile/Proj) +/obj/structure/mineral_door/resin/bullet_act(obj/projectile/Proj) health -= Proj.damage ..() healthcheck() @@ -630,7 +630,7 @@ STOP_PROCESSING(SSprocessing, src) return ..() -/obj/effect/alien/resin/acid_pillar/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/effect/alien/resin/acid_pillar/get_projectile_hit_boolean(obj/projectile/P) return TRUE /obj/effect/alien/resin/acid_pillar/proc/forsaken_handling() @@ -758,7 +758,7 @@ SIGNAL_HANDLER hitby(AM) -/obj/effect/alien/resin/resin_pillar/proc/handle_bullet(turf/T, obj/item/projectile/P) +/obj/effect/alien/resin/resin_pillar/proc/handle_bullet(turf/T, obj/projectile/P) SIGNAL_HANDLER bullet_act(P) return COMPONENT_BULLET_ACT_OVERRIDE @@ -897,7 +897,7 @@ var/range = 3 -/obj/item/explosive/grenade/alien/acid/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/item/explosive/grenade/alien/acid/get_projectile_hit_boolean(obj/projectile/P) return FALSE /obj/item/explosive/grenade/alien/acid/prime(force) diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm index cf6fa4e3665e..a0e8e5054d45 100644 --- a/code/modules/cm_aliens/structures/egg.dm +++ b/code/modules/cm_aliens/structures/egg.dm @@ -151,7 +151,7 @@ else child.go_idle() -/obj/effect/alien/egg/bullet_act(obj/item/projectile/P) +/obj/effect/alien/egg/bullet_act(obj/projectile/P) ..() var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & (AMMO_XENO)) diff --git a/code/modules/cm_aliens/structures/fruit.dm b/code/modules/cm_aliens/structures/fruit.dm index bb899a6ff25b..e54cb9417d7c 100644 --- a/code/modules/cm_aliens/structures/fruit.dm +++ b/code/modules/cm_aliens/structures/fruit.dm @@ -86,7 +86,7 @@ qdel(src) ..() -/obj/effect/alien/resin/fruit/bullet_act(obj/item/projectile/P) +/obj/effect/alien/resin/fruit/bullet_act(obj/projectile/P) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & (AMMO_XENO)) return diff --git a/code/modules/cm_aliens/structures/trap.dm b/code/modules/cm_aliens/structures/trap.dm index 5e1c51538ce6..bc8eb7e6c7c0 100644 --- a/code/modules/cm_aliens/structures/trap.dm +++ b/code/modules/cm_aliens/structures/trap.dm @@ -85,7 +85,7 @@ trigger_trap(TRUE) ..() -/obj/effect/alien/resin/trap/bullet_act(obj/item/projectile/P) +/obj/effect/alien/resin/trap/bullet_act(obj/projectile/P) var/mob/living/carbon/xenomorph/X = P.firer if(istype(X) && HIVE_ALLIED_TO_HIVE(X.hivenumber, hivenumber)) return diff --git a/code/modules/cm_aliens/structures/tunnel.dm b/code/modules/cm_aliens/structures/tunnel.dm index 0e1008cfbf12..f716d69b5b7e 100644 --- a/code/modules/cm_aliens/structures/tunnel.dm +++ b/code/modules/cm_aliens/structures/tunnel.dm @@ -76,7 +76,7 @@ visible_message(SPAN_DANGER("[src] suddenly collapses!")) qdel(src) -/obj/structure/tunnel/bullet_act(obj/item/projectile/Proj) +/obj/structure/tunnel/bullet_act(obj/projectile/Proj) return FALSE /obj/structure/tunnel/ex_act(severity) diff --git a/code/modules/cm_aliens/structures/xeno_structures_boilertrap.dm b/code/modules/cm_aliens/structures/xeno_structures_boilertrap.dm index 965238e81b65..0194ea74d3a6 100644 --- a/code/modules/cm_aliens/structures/xeno_structures_boilertrap.dm +++ b/code/modules/cm_aliens/structures/xeno_structures_boilertrap.dm @@ -43,7 +43,7 @@ . = ..() qdel(src) -/obj/effect/alien/resin/boilertrap/bullet_act(obj/item/projectile/P) +/obj/effect/alien/resin/boilertrap/bullet_act(obj/projectile/P) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & (AMMO_XENO)) return diff --git a/code/modules/cm_marines/equipment/mortar/mortars.dm b/code/modules/cm_marines/equipment/mortar/mortars.dm index f78fc9d94837..86bc3f5917c0 100644 --- a/code/modules/cm_marines/equipment/mortar/mortars.dm +++ b/code/modules/cm_marines/equipment/mortar/mortars.dm @@ -50,7 +50,7 @@ if (PF) PF.flags_can_pass_all = PASS_OVER -/obj/structure/mortar/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/mortar/get_projectile_hit_boolean(obj/projectile/P) if(P.original == src) return TRUE else diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 3bfce01a0300..235fcffd5357 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -49,7 +49,7 @@ /obj/structure/machinery/computer/overwatch/attackby(obj/I as obj, mob/user as mob) //Can't break or disassemble. return -/obj/structure/machinery/computer/overwatch/bullet_act(obj/item/projectile/Proj) //Can't shoot it +/obj/structure/machinery/computer/overwatch/bullet_act(obj/projectile/Proj) //Can't shoot it return FALSE /obj/structure/machinery/computer/overwatch/attack_remote(mob/user as mob) diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index 62c5a5955679..f1d5e56ee8d3 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -255,7 +255,7 @@ PF.flags_can_pass_all = PASS_HIGH_OVER_ONLY|PASS_AROUND|PASS_OVER_THROW_ITEM //Making so rockets don't hit M56D -/obj/structure/machinery/m56d_post/calculate_cover_hit_boolean(obj/item/projectile/P, distance = 0, cade_direction_correct = FALSE) +/obj/structure/machinery/m56d_post/calculate_cover_hit_boolean(obj/projectile/P, distance = 0, cade_direction_correct = FALSE) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & AMMO_ROCKET) return 0 @@ -447,7 +447,7 @@ var/health_max = 200 //Why not just give it sentry-tier health for now. var/atom/target = null // required for shooting at things. var/datum/ammo/bullet/machinegun/ammo = /datum/ammo/bullet/machinegun - var/obj/item/projectile/in_chamber = null + var/obj/projectile/in_chamber = null var/locked = 0 //1 means its locked inplace (this will be for sandbag MGs) var/is_bursting = 0 var/muzzle_flash_lum = 4 @@ -479,7 +479,7 @@ PF.flags_can_pass_all = PASS_AROUND|PASS_OVER_THROW_ITEM|PASS_OVER_THROW_MOB //Making so rockets don't hit M56D -/obj/structure/machinery/m56d_hmg/calculate_cover_hit_boolean(obj/item/projectile/P, distance = 0, cade_direction_correct = FALSE) +/obj/structure/machinery/m56d_hmg/calculate_cover_hit_boolean(obj/projectile/P, distance = 0, cade_direction_correct = FALSE) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & AMMO_ROCKET) return 0 @@ -645,7 +645,7 @@ if(50 to 75) damage_state = M56D_DMG_SLIGHT if(75 to INFINITY) damage_state = M56D_DMG_NONE -/obj/structure/machinery/m56d_hmg/bullet_act(obj/item/projectile/P) //Nope. +/obj/structure/machinery/m56d_hmg/bullet_act(obj/projectile/P) //Nope. bullet_ping(P) visible_message(SPAN_WARNING("[src] is hit by the [P.name]!")) update_health(round(P.damage / 10)) //Universal low damage to what amounts to a post with a gun. @@ -670,7 +670,7 @@ return 0 //Out of ammo. var/datum/cause_data/cause_data = create_cause_data(initial(name)) - in_chamber = new /obj/item/projectile(loc, cause_data) //New bullet! + in_chamber = new /obj/projectile(loc, cause_data) //New bullet! in_chamber.generate_bullet(ammo) return 1 @@ -718,7 +718,7 @@ return if(load_into_chamber() == 1) - if(istype(in_chamber,/obj/item/projectile)) + if(istype(in_chamber,/obj/projectile)) in_chamber.original = target var/initial_angle = Get_Angle(T, U) diff --git a/code/modules/cm_preds/smartdisc.dm b/code/modules/cm_preds/smartdisc.dm index 068ff3550024..f0262f5f140a 100644 --- a/code/modules/cm_preds/smartdisc.dm +++ b/code/modules/cm_preds/smartdisc.dm @@ -163,7 +163,7 @@ /mob/living/simple_animal/hostile/smartdisc/Collided(atom/movable/AM) return -/mob/living/simple_animal/hostile/smartdisc/bullet_act(obj/item/projectile/Proj) +/mob/living/simple_animal/hostile/smartdisc/bullet_act(obj/projectile/Proj) if(prob(60 - Proj.damage)) return 0 diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index a94cde9887c3..c9976c7fea89 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -308,7 +308,7 @@ embedded_id.set_user_data(user) //Any projectile can decloak a predator. It does defeat one free bullet though. -/obj/item/clothing/gloves/yautja/hunter/proc/bullet_hit(mob/living/carbon/human/H, obj/item/projectile/P) +/obj/item/clothing/gloves/yautja/hunter/proc/bullet_hit(mob/living/carbon/human/H, obj/projectile/P) SIGNAL_HANDLER var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index c1c5f8077f12..762ab9ecbb0f 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -874,7 +874,7 @@ update_icon() return TRUE -/obj/item/weapon/gun/launcher/spike/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/launcher/spike/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(refund) spikes++ return TRUE @@ -960,7 +960,7 @@ /obj/item/weapon/gun/energy/yautja/plasmarifle/load_into_chamber() ammo = GLOB.ammo_list[/datum/ammo/energy/yautja/rifle/bolt] charge_time -= 10 - var/obj/item/projectile/projectile = create_bullet(ammo, initial(name)) + var/obj/projectile/projectile = create_bullet(ammo, initial(name)) projectile.set_light(1) in_chamber = projectile return in_chamber @@ -972,7 +972,7 @@ update_icon() return TRUE -/obj/item/weapon/gun/energy/yautja/plasmarifle/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/energy/yautja/plasmarifle/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(refund) charge_time *= 2 return TRUE @@ -1057,7 +1057,7 @@ /obj/item/weapon/gun/energy/yautja/plasmapistol/load_into_chamber() if(charge_time < 1) return - var/obj/item/projectile/projectile = create_bullet(ammo, initial(name)) + var/obj/projectile/projectile = create_bullet(ammo, initial(name)) projectile.set_light(1) in_chamber = projectile charge_time -= shot_cost @@ -1070,7 +1070,7 @@ /obj/item/weapon/gun/energy/yautja/plasmapistol/reload_into_chamber() return TRUE -/obj/item/weapon/gun/energy/yautja/plasmapistol/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/energy/yautja/plasmapistol/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(refund) charge_time += shot_cost @@ -1259,7 +1259,7 @@ /obj/item/weapon/gun/energy/yautja/plasma_caster/reload_into_chamber() return TRUE -/obj/item/weapon/gun/energy/yautja/plasma_caster/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/energy/yautja/plasma_caster/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(refund) source.charge += charge_cost diff --git a/code/modules/cm_tech/implements/armor.dm b/code/modules/cm_tech/implements/armor.dm index de196647eaca..c08bf6d3c128 100644 --- a/code/modules/cm_tech/implements/armor.dm +++ b/code/modules/cm_tech/implements/armor.dm @@ -94,7 +94,7 @@ COMSIG_HUMAN_BULLET_ACT )) -/obj/item/clothing/accessory/health/proc/take_bullet_damage(mob/living/carbon/human/user, damage, ammo_flags, obj/item/projectile/P) +/obj/item/clothing/accessory/health/proc/take_bullet_damage(mob/living/carbon/human/user, damage, ammo_flags, obj/projectile/P) SIGNAL_HANDLER if(damage <= 0 || (ammo_flags & AMMO_IGNORE_ARMOR)) return diff --git a/code/modules/cm_tech/implements/medical_czsp.dm b/code/modules/cm_tech/implements/medical_czsp.dm index 3eed2fc9f619..30eda5b8af29 100644 --- a/code/modules/cm_tech/implements/medical_czsp.dm +++ b/code/modules/cm_tech/implements/medical_czsp.dm @@ -203,7 +203,7 @@ click_empty(user) return NONE - var/obj/item/projectile/pill/P = new /obj/item/projectile/pill(src, user, src) + var/obj/projectile/pill/P = new /obj/projectile/pill(src, user, src) P.generate_bullet(GLOB.ammo_list[/datum/ammo/pill], 0, 0) pill_to_use.forceMove(P) @@ -221,16 +221,16 @@ damage = 0 -/datum/ammo/pill/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/pill/on_hit_mob(mob/M, obj/projectile/P) . = ..() if(!ishuman(M)) return - if(!istype(P, /obj/item/projectile/pill)) + if(!istype(P, /obj/projectile/pill)) return - var/obj/item/projectile/pill/pill_projectile = P + var/obj/projectile/pill/pill_projectile = P if(QDELETED(pill_projectile.source_pill)) pill_projectile.source_pill = null @@ -240,9 +240,9 @@ pill_reagents.trans_to(M, pill_reagents.total_volume) -/obj/item/projectile/pill +/obj/projectile/pill var/obj/item/reagent_container/pill/source_pill -/obj/item/projectile/pill/Destroy() +/obj/projectile/pill/Destroy() . = ..() source_pill = null diff --git a/code/modules/cm_tech/implements/railgun.dm b/code/modules/cm_tech/implements/railgun.dm index b69f9a9d13a8..bef2f3d656ab 100644 --- a/code/modules/cm_tech/implements/railgun.dm +++ b/code/modules/cm_tech/implements/railgun.dm @@ -63,7 +63,7 @@ GLOBAL_DATUM(railgun_eye_location, /datum/coords) /obj/structure/machinery/computer/railgun/attackby(obj/I as obj, mob/user as mob) //Can't break or disassemble. return -/obj/structure/machinery/computer/railgun/bullet_act(obj/item/projectile/Proj) //Can't shoot it +/obj/structure/machinery/computer/railgun/bullet_act(obj/projectile/Proj) //Can't shoot it return FALSE /obj/structure/machinery/computer/railgun/proc/set_operator(mob/living/carbon/human/H) diff --git a/code/modules/cm_tech/resources/resource.dm b/code/modules/cm_tech/resources/resource.dm index eda0af9f63b8..44af2234afd3 100644 --- a/code/modules/cm_tech/resources/resource.dm +++ b/code/modules/cm_tech/resources/resource.dm @@ -85,7 +85,7 @@ health = Clamp(health - damage, 0, max_health) healthcheck() -/obj/structure/resource_node/bullet_act(obj/item/projectile/P) +/obj/structure/resource_node/bullet_act(obj/projectile/P) take_damage(P.damage) /obj/structure/resource_node/ex_act(severity, direction) diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm index f47ae3e4d77b..d2c5e63fee29 100644 --- a/code/modules/defenses/defenses.dm +++ b/code/modules/defenses/defenses.dm @@ -448,7 +448,7 @@ return update_health(severity) -/obj/structure/machinery/defenses/bullet_act(obj/item/projectile/P) +/obj/structure/machinery/defenses/bullet_act(obj/projectile/P) bullet_ping(P) visible_message(SPAN_WARNING("[src] is hit by the [P]!")) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm index cec51d0b1ac2..10d1b16dd9c3 100644 --- a/code/modules/defenses/sentry.dm +++ b/code/modules/defenses/sentry.dm @@ -308,7 +308,7 @@ low_ammo_timer = null /obj/structure/machinery/defenses/sentry/proc/actual_fire(atom/target) - var/obj/item/projectile/new_projectile = new(src, create_cause_data(initial(name), owner_mob, src)) + var/obj/projectile/new_projectile = new(src, create_cause_data(initial(name), owner_mob, src)) new_projectile.generate_bullet(new ammo.default_ammo) new_projectile.damage *= damage_mult new_projectile.accuracy *= accuracy_mult diff --git a/code/modules/defenses/sentry_flamer.dm b/code/modules/defenses/sentry_flamer.dm index 747435ccb285..9ae794e3c811 100644 --- a/code/modules/defenses/sentry_flamer.dm +++ b/code/modules/defenses/sentry_flamer.dm @@ -29,7 +29,7 @@ fire_delay = 0.5 /obj/structure/machinery/defenses/sentry/flamer/actual_fire(atom/A) - var/obj/item/projectile/P = new(create_cause_data(initial(name), owner_mob)) + var/obj/projectile/P = new(create_cause_data(initial(name), owner_mob)) P.generate_bullet(new ammo.default_ammo) GIVE_BULLET_TRAIT(P, /datum/element/bullet_trait_iff, faction_group) P.fire_at(A, src, owner_mob, P.ammo.max_range, P.ammo.shell_speed, null) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 83824bcedaa6..463ce752308a 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -148,7 +148,7 @@ if (PF) PF.flags_can_pass_all = PASS_OVER|PASS_AROUND|PASS_TYPE_CRAWLER -/obj/structure/machinery/portable_atmospherics/hydroponics/bullet_act(obj/item/projectile/Proj) +/obj/structure/machinery/portable_atmospherics/hydroponics/bullet_act(obj/projectile/Proj) //Don't act on seeds like dionaea that shouldn't change. if(seed && seed.immutable > 0) diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm index 5571b122ecaa..65ae240e201d 100644 --- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm @@ -159,7 +159,7 @@ return die() -/obj/item/clothing/mask/facehugger/bullet_act(obj/item/projectile/P) +/obj/item/clothing/mask/facehugger/bullet_act(obj/projectile/P) ..() var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & (AMMO_XENO)) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm index dff6c82efbf8..6748b662b118 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm @@ -298,7 +298,7 @@ xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires a blast of acid at [target]!"), SPAN_XENOWARNING("You fire a blast of acid at [target]!")) var/turf/target_turf = locate(target.x, target.y, target.z) - var/obj/item/projectile/proj = new(xeno.loc, create_cause_data("acid shotgun", xeno)) + var/obj/projectile/proj = new(xeno.loc, create_cause_data("acid shotgun", xeno)) var/datum/ammo/ammoDatum = new ammo_type() proj.generate_bullet(ammoDatum) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index a9cffb196cb3..7a8151d8aa02 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -778,7 +778,7 @@ SPAN_XENOWARNING("You spit a [xeno.ammo.name] at [atom]!") ) playsound(xeno.loc, sound_to_play, 25, 1) - var/obj/item/projectile/proj = new (current_turf, create_cause_data(xeno.ammo.name, xeno)) + var/obj/projectile/proj = new (current_turf, create_cause_data(xeno.ammo.name, xeno)) proj.generate_bullet(xeno.ammo) proj.permutated += xeno proj.def_zone = xeno.get_limbzone_target() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm index 70666e83bc74..3975a229bbc1 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm @@ -218,7 +218,7 @@ stabbing_xeno.visible_message(SPAN_XENODANGER("\The [stabbing_xeno] uncoils and wildly throws out its tail!"), SPAN_XENODANGER("You uncoil your tail wildly in front of you!")) - var/obj/item/projectile/hook_projectile = new /obj/item/projectile(stabbing_xeno.loc, create_cause_data(initial(stabbing_xeno.caste_type), stabbing_xeno)) + var/obj/projectile/hook_projectile = new /obj/projectile(stabbing_xeno.loc, create_cause_data(initial(stabbing_xeno.caste_type), stabbing_xeno)) var/datum/ammo/ammoDatum = GLOB.ammo_list[/datum/ammo/xeno/oppressor_tail] diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm index 9107a9670048..cd4533eabc83 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm @@ -521,7 +521,7 @@ X.visible_message(SPAN_XENOWARNING("The [X] fires their spikes at [A]!"), SPAN_XENOWARNING("You fire your spikes at [A]!")) var/turf/target = locate(A.x, A.y, A.z) - var/obj/item/projectile/P = new /obj/item/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) + var/obj/projectile/P = new /obj/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) var/datum/ammo/ammoDatum = GLOB.ammo_list[ammo_type] diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm index 98131c36a19e..708334d31a96 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm @@ -15,7 +15,7 @@ X.visible_message(SPAN_XENOWARNING("[X] fires a burst of bone chips at [A]!"), SPAN_XENOWARNING("You fire a burst of bone chips at [A]!")) var/turf/target = locate(A.x, A.y, A.z) - var/obj/item/projectile/P = new /obj/item/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) + var/obj/projectile/P = new /obj/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) var/datum/ammo/ammoDatum = GLOB.ammo_list[ammo_type] diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_powers.dm index 58384a01a3fa..b058756d3ef8 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/sentinel/sentinel_powers.dm @@ -21,7 +21,7 @@ playsound(xeno.loc, sound_to_play, 25, 1) xeno.ammo = GLOB.ammo_list[/datum/ammo/xeno/toxin] - var/obj/item/projectile/projectile = new /obj/item/projectile(current_turf, create_cause_data(initial(xeno.caste_type), xeno)) + var/obj/projectile/projectile = new /obj/projectile(current_turf, create_cause_data(initial(xeno.caste_type), xeno)) projectile.generate_bullet(xeno.ammo) projectile.permutated += xeno projectile.def_zone = xeno.get_limbzone_target() @@ -56,7 +56,7 @@ playsound(xeno.loc, sound_to_play, 25, 1) xeno.ammo = GLOB.ammo_list[/datum/ammo/xeno/toxin/shotgun] - var/obj/item/projectile/projectile = new /obj/item/projectile(current_turf, create_cause_data(initial(xeno.caste_type), xeno)) + var/obj/projectile/projectile = new /obj/projectile(current_turf, create_cause_data(initial(xeno.caste_type), xeno)) projectile.generate_bullet(xeno.ammo) projectile.permutated += xeno projectile.def_zone = xeno.get_limbzone_target() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6f68f94bcb5d..4ad29179daec 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -408,7 +408,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/is_mob_restrained() return 0 -/mob/living/silicon/robot/bullet_act(obj/item/projectile/Proj) +/mob/living/silicon/robot/bullet_act(obj/projectile/Proj) ..(Proj) if(prob(75) && Proj.damage > 0) spark_system.start() return 2 diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 3bebedfc12c8..ffe85017bb28 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -122,7 +122,7 @@ else wound_icon_carrier.icon_state = "[caste_name]_walk_[health_threshold]" -/mob/living/simple_animal/hostile/alien/bullet_act(obj/item/projectile/P) +/mob/living/simple_animal/hostile/alien/bullet_act(obj/projectile/P) . = ..() if(P.damage) var/splatter_dir = get_dir(P.starting, loc)//loc is the xeno getting hit, P.starting is the turf of where the projectile got spawned @@ -187,8 +187,8 @@ // melee_damage_lower = 15 // melee_damage_upper = 15 // ranged = 1 -// projectiletype = /obj/item/projectile/neurotox +// projectiletype = /obj/projectile/neurotox // projectilesound = 'sound/weapons/pierce.ogg' -/obj/item/projectile/neurotox +/obj/projectile/neurotox damage = 30 icon_state = "toxin" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 9266e67db495..3d37f8ea57c1 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -20,7 +20,7 @@ health = 300 maxHealth = 300 speed = 8 - projectiletype = /obj/item/projectile/beam/drone + projectiletype = /obj/projectile/beam/drone projectilesound = 'sound/weapons/Laser3.ogg' destroy_surroundings = 0 var/datum/effect_system/ion_trail_follow/ion_trail @@ -52,7 +52,7 @@ /mob/living/simple_animal/hostile/retaliate/malf_drone/Initialize() . = ..() if(prob(5)) - projectiletype = /obj/item/projectile/beam/pulse/drone + projectiletype = /obj/projectile/beam/pulse/drone projectilesound = 'sound/weapons/pulse2.ogg' ion_trail = new ion_trail.set_up(src) @@ -215,8 +215,8 @@ return ..() -/obj/item/projectile/beam/drone +/obj/projectile/beam/drone damage = 15 -/obj/item/projectile/beam/pulse/drone +/obj/projectile/beam/pulse/drone damage = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 9d13ae92bd1c..1394ec113e6b 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -40,7 +40,7 @@ corpse = /obj/effect/landmark/corpsespawner/russian/ranged weapon1 = /obj/item/weapon/gun/pistol ranged = 1 - projectiletype = /obj/item/projectile + projectiletype = /obj/projectile projectilesound = 'sound/weapons/Gunshot.ogg' casingtype = null @@ -84,7 +84,7 @@ /mob/living/simple_animal/hostile/UPP/ranged //weapon1 = /obj/item/weapon/gun/projectile/mateba ranged = 1 - projectiletype = /obj/item/projectile + projectiletype = /obj/projectile projectilesound = 'sound/weapons/Gunshot.ogg' casingtype = null diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 36dd6402f9b0..0f15bd1d8f7b 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -254,7 +254,7 @@ return //Bullets -/mob/living/simple_animal/parrot/bullet_act(obj/item/projectile/Proj) +/mob/living/simple_animal/parrot/bullet_act(obj/projectile/Proj) ..() if(!stat && !client) if(parrot_state == PARROT_PERCH) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 9978b9f2c5b3..8f138d2c905f 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -603,7 +603,7 @@ if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C broken() -/obj/structure/machinery/light/bullet_act(obj/item/projectile/P) +/obj/structure/machinery/light/bullet_act(obj/projectile/P) src.bullet_ping(P) if(P.ammo.damage_type == BRUTE) if(P.damage > 10) diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index a25302f94be6..63daf7ad9a47 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -59,7 +59,7 @@ /datum/ammo/New() set_bullet_traits() -/datum/ammo/proc/on_bullet_generation(obj/item/projectile/generated_projectile, mob/bullet_generator) //NOT used on New(), applied to the projectiles. +/datum/ammo/proc/on_bullet_generation(obj/projectile/generated_projectile, mob/bullet_generator) //NOT used on New(), applied to the projectiles. return /// Populate traits_to_give in this proc @@ -69,40 +69,40 @@ /datum/ammo/can_vv_modify() return FALSE -/datum/ammo/proc/do_at_half_range(obj/item/projectile/P) +/datum/ammo/proc/do_at_half_range(obj/projectile/P) SHOULD_NOT_SLEEP(TRUE) return /datum/ammo/proc/on_embed(mob/embedded_mob, obj/limb/target_organ) return -/datum/ammo/proc/do_at_max_range(obj/item/projectile/P) +/datum/ammo/proc/do_at_max_range(obj/projectile/P) SHOULD_NOT_SLEEP(TRUE) return -/datum/ammo/proc/on_shield_block(mob/M, obj/item/projectile/P) //Does it do something special when shield blocked? Ie. a flare or grenade that still blows up. +/datum/ammo/proc/on_shield_block(mob/M, obj/projectile/P) //Does it do something special when shield blocked? Ie. a flare or grenade that still blows up. return -/datum/ammo/proc/on_hit_turf(turf/T, obj/item/projectile/P) //Special effects when hitting dense turfs. +/datum/ammo/proc/on_hit_turf(turf/T, obj/projectile/P) //Special effects when hitting dense turfs. SHOULD_NOT_SLEEP(TRUE) return -/datum/ammo/proc/on_hit_mob(mob/M, obj/item/projectile/P, mob/user) //Special effects when hitting mobs. +/datum/ammo/proc/on_hit_mob(mob/M, obj/projectile/P, mob/user) //Special effects when hitting mobs. SHOULD_NOT_SLEEP(TRUE) return ///Special effects when pointblanking mobs. Ultimately called from /living/attackby(). Return TRUE to end the PB attempt. -/datum/ammo/proc/on_pointblank(mob/living/L, obj/item/projectile/P, mob/living/user, obj/item/weapon/gun/fired_from) +/datum/ammo/proc/on_pointblank(mob/living/L, obj/projectile/P, mob/living/user, obj/item/weapon/gun/fired_from) return -/datum/ammo/proc/on_hit_obj(obj/O, obj/item/projectile/P) //Special effects when hitting objects. +/datum/ammo/proc/on_hit_obj(obj/O, obj/projectile/P) //Special effects when hitting objects. SHOULD_NOT_SLEEP(TRUE) return -/datum/ammo/proc/on_near_target(turf/T, obj/item/projectile/P) //Special effects when passing near something. Range of things that triggers it is controlled by other ammo flags. +/datum/ammo/proc/on_near_target(turf/T, obj/projectile/P) //Special effects when passing near something. Range of things that triggers it is controlled by other ammo flags. return 0 //return 0 means it flies even after being near something. Return 1 means it stops -/datum/ammo/proc/knockback(mob/living/living_mob, obj/item/projectile/fired_projectile, max_range = 2) +/datum/ammo/proc/knockback(mob/living/living_mob, obj/projectile/fired_projectile, max_range = 2) if(!living_mob || living_mob == fired_projectile.firer) return if(fired_projectile.distance_travelled > max_range || living_mob.lying) @@ -115,7 +115,7 @@ knockback_effects(living_mob, fired_projectile) slam_back(living_mob, fired_projectile) -/datum/ammo/proc/slam_back(mob/living/living_mob, obj/item/projectile/fired_projectile) +/datum/ammo/proc/slam_back(mob/living/living_mob, obj/projectile/fired_projectile) //Either knockback or slam them into an obstacle. var/direction = Get_Compass_Dir(fired_projectile.z ? fired_projectile : fired_projectile.firer, living_mob) //More precise than get_dir. if(!direction) //Same tile. @@ -128,7 +128,7 @@ living_mob.apply_damage(MELEE_FORCE_TIER_2) ///The applied effects for knockback(), overwrite to change slow/stun amounts for different ammo datums -/datum/ammo/proc/knockback_effects(mob/living/living_mob, obj/item/projectile/fired_projectile) +/datum/ammo/proc/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob target.apply_effect(0.7, WEAKEN) // 0.9 seconds of stun, per agreement from Balance Team when switched from MC stuns to exact stuns @@ -138,7 +138,7 @@ else living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET) -/datum/ammo/proc/pushback(mob/target_mob, obj/item/projectile/fired_projectile, max_range = 2) +/datum/ammo/proc/pushback(mob/target_mob, obj/projectile/fired_projectile, max_range = 2) if(!target_mob || target_mob == fired_projectile.firer || fired_projectile.distance_travelled > max_range || target_mob.lying) return @@ -148,7 +148,7 @@ to_chat(target_mob, isxeno(target_mob) ? SPAN_XENODANGER("You are pushed back by the sudden impact!") : SPAN_HIGHDANGER("You are pushed back by the sudden impact!"), null, 4, CHAT_TYPE_TAKING_HIT) slam_back(target_mob, fired_projectile, max_range) -/datum/ammo/proc/burst(atom/target, obj/item/projectile/P, damage_type = BRUTE, range = 1, damage_div = 2, show_message = SHOW_MESSAGE_VISIBLE) //damage_div says how much we divide damage +/datum/ammo/proc/burst(atom/target, obj/projectile/P, damage_type = BRUTE, range = 1, damage_div = 2, show_message = SHOW_MESSAGE_VISIBLE) //damage_div says how much we divide damage if(!target || !P) return for(var/mob/living/carbon/M in orange(range,target)) if(P.firer == M) @@ -174,7 +174,7 @@ else P.play_hit_effect(M) -/datum/ammo/proc/fire_bonus_projectiles(obj/item/projectile/original_P) +/datum/ammo/proc/fire_bonus_projectiles(obj/projectile/original_P) set waitfor = 0 var/turf/curloc = get_turf(original_P.shot_from) @@ -183,7 +183,7 @@ for(var/i in 1 to bonus_projectiles_amount) //Want to run this for the number of bonus projectiles. var/final_angle = initial_angle - var/obj/item/projectile/P = new /obj/item/projectile(curloc, original_P.weapon_cause_data) + var/obj/projectile/P = new /obj/projectile(curloc, original_P.weapon_cause_data) P.generate_bullet(GLOB.ammo_list[bonus_projectiles_type]) //No bonus damage or anything. P.accuracy = round(P.accuracy * original_P.accuracy/initial(original_P.accuracy)) //if the gun changes the accuracy of the main projectile, it also affects the bonus ones. original_P.give_bullet_traits(P) @@ -227,7 +227,7 @@ shrapnel_type = /obj/item/shard/shrapnel shell_speed = AMMO_SPEED_TIER_4 -/datum/ammo/bullet/proc/handle_battlefield_execution(datum/ammo/firing_ammo, mob/living/hit_mob, obj/item/projectile/firing_projectile, mob/living/user, obj/item/weapon/gun/fired_from) +/datum/ammo/bullet/proc/handle_battlefield_execution(datum/ammo/firing_ammo, mob/living/hit_mob, obj/projectile/firing_projectile, mob/living/user, obj/item/weapon/gun/fired_from) SIGNAL_HANDLER if(!user || hit_mob == user || user.zone_selected != "head" || user.a_intent != INTENT_HARM || !ishuman_strict(hit_mob)) @@ -247,7 +247,7 @@ return COMPONENT_CANCEL_AMMO_POINT_BLANK -/datum/ammo/bullet/proc/attempt_battlefield_execution(datum/ammo/firing_ammo, mob/living/carbon/human/execution_target, obj/item/projectile/firing_projectile, mob/living/user, obj/item/weapon/gun/fired_from) +/datum/ammo/bullet/proc/attempt_battlefield_execution(datum/ammo/firing_ammo, mob/living/carbon/human/execution_target, obj/projectile/firing_projectile, mob/living/user, obj/item/weapon/gun/fired_from) user.affected_message(execution_target, SPAN_HIGHDANGER("You aim \the [fired_from] at [execution_target]'s head!"), SPAN_HIGHDANGER("[user] aims \the [fired_from] directly at your head!"), @@ -348,16 +348,16 @@ var/acid_per_hit = 10 var/organic_damage_mult = 3 -/datum/ammo/bullet/pistol/ap/toxin/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/pistol/ap/toxin/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/toxic_buildup, acid_per_hit) -/datum/ammo/bullet/pistol/ap/toxin/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/pistol/ap/toxin/on_hit_turf(turf/T, obj/projectile/P) . = ..() if(T.flags_turf & TURF_ORGANIC) P.damage *= organic_damage_mult -/datum/ammo/bullet/pistol/ap/toxin/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/pistol/ap/toxin/on_hit_obj(obj/O, obj/projectile/P) . = ..() if(O.flags_obj & OBJ_ORGANIC) P.damage *= organic_damage_mult @@ -421,7 +421,7 @@ ..() RegisterSignal(src, COMSIG_AMMO_POINT_BLANK, PROC_REF(handle_battlefield_execution)) -/datum/ammo/bullet/pistol/heavy/super/highimpact/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/pistol/heavy/super/highimpact/on_hit_mob(mob/M, obj/projectile/P) knockback(M, P, 4) /datum/ammo/bullet/pistol/deagle @@ -479,16 +479,16 @@ var/acid_per_hit = 10 var/organic_damage_mult = 3 -/datum/ammo/bullet/pistol/squash/toxin/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/pistol/squash/toxin/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/toxic_buildup, acid_per_hit) -/datum/ammo/bullet/pistol/squash/toxin/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/pistol/squash/toxin/on_hit_turf(turf/T, obj/projectile/P) . = ..() if(T.flags_turf & TURF_ORGANIC) P.damage *= organic_damage_mult -/datum/ammo/bullet/pistol/squash/toxin/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/pistol/squash/toxin/on_hit_obj(obj/O, obj/projectile/P) . = ..() if(O.flags_obj & OBJ_ORGANIC) P.damage *= organic_damage_mult @@ -537,7 +537,7 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary) )) -/datum/ammo/bullet/pistol/mankey/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/pistol/mankey/on_hit_mob(mob/M,obj/projectile/P) if(P && P.loc && !M.stat && !istype(M,/mob/living/carbon/human/monkey)) P.visible_message(SPAN_DANGER("The [src] chimpers furiously!")) new /mob/living/carbon/human/monkey(P.loc) @@ -580,7 +580,7 @@ penetration = ARMOR_PENETRATION_TIER_4 accuracy = HIT_ACCURACY_TIER_3 -/datum/ammo/bullet/revolver/heavy/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/revolver/heavy/on_hit_mob(mob/M, obj/projectile/P) knockback(M, P, 4) /datum/ammo/bullet/revolver/incendiary @@ -598,16 +598,16 @@ var/acid_per_hit = 10 var/organic_damage_mult = 3 -/datum/ammo/bullet/revolver/marksman/toxin/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/revolver/marksman/toxin/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/toxic_buildup, acid_per_hit) -/datum/ammo/bullet/revolver/marksman/toxin/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/revolver/marksman/toxin/on_hit_turf(turf/T, obj/projectile/P) . = ..() if(T.flags_turf & TURF_ORGANIC) P.damage *= organic_damage_mult -/datum/ammo/bullet/revolver/marksman/toxin/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/revolver/marksman/toxin/on_hit_obj(obj/O, obj/projectile/P) . = ..() if(O.flags_obj & OBJ_ORGANIC) P.damage *= organic_damage_mult @@ -648,7 +648,7 @@ shrapnel_type = /obj/item/shard/shrapnel/upp //roughly 90 or so damage with the additional shrapnel, around 130 in total with primary round -/datum/ammo/bullet/revolver/upp/shrapnel/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/revolver/upp/shrapnel/on_hit_mob(mob/M, obj/projectile/P) pushback(M, P, 1) /datum/ammo/bullet/revolver/upp/shrapnel_bits @@ -701,7 +701,7 @@ ..() RegisterSignal(src, COMSIG_AMMO_POINT_BLANK, PROC_REF(handle_battlefield_execution)) -/datum/ammo/bullet/revolver/mateba/highimpact/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/revolver/mateba/highimpact/on_hit_mob(mob/M, obj/projectile/P) knockback(M, P, 4) /datum/ammo/bullet/revolver/mateba/highimpact/explosive //if you ever put this in normal gameplay, i am going to scream @@ -712,15 +712,15 @@ penetration = ARMOR_PENETRATION_TIER_10 flags_ammo_behavior = AMMO_EXPLOSIVE|AMMO_BALLISTIC -/datum/ammo/bullet/revolver/mateba/highimpact/explosive/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/revolver/mateba/highimpact/explosive/on_hit_mob(mob/M, obj/projectile/P) ..() cell_explosion(get_turf(M), 120, 30, EXPLOSION_FALLOFF_SHAPE_LINEAR, P.dir, P.weapon_cause_data) -/datum/ammo/bullet/revolver/mateba/highimpact/explosive/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/revolver/mateba/highimpact/explosive/on_hit_obj(obj/O, obj/projectile/P) ..() cell_explosion(get_turf(O), 120, 30, EXPLOSION_FALLOFF_SHAPE_LINEAR, P.dir, P.weapon_cause_data) -/datum/ammo/bullet/revolver/mateba/highimpact/explosive/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/revolver/mateba/highimpact/explosive/on_hit_turf(turf/T, obj/projectile/P) ..() cell_explosion(T, 120, 30, EXPLOSION_FALLOFF_SHAPE_LINEAR, P.dir, P.weapon_cause_data) @@ -778,16 +778,16 @@ var/acid_per_hit = 5 var/organic_damage_mult = 3 -/datum/ammo/bullet/smg/ap/toxin/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/smg/ap/toxin/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/toxic_buildup, acid_per_hit) -/datum/ammo/bullet/smg/ap/toxin/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/smg/ap/toxin/on_hit_turf(turf/T, obj/projectile/P) . = ..() if(T.flags_turf & TURF_ORGANIC) P.damage *= organic_damage_mult -/datum/ammo/bullet/smg/ap/toxin/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/smg/ap/toxin/on_hit_obj(obj/O, obj/projectile/P) . = ..() if(O.flags_obj & OBJ_ORGANIC) P.damage *= organic_damage_mult @@ -904,7 +904,7 @@ damage = 30 var/holo_stacks = 10 -/datum/ammo/bullet/rifle/holo_target/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/rifle/holo_target/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/bonus_damage_stack, holo_stacks, world.time) @@ -922,13 +922,13 @@ shell_speed = AMMO_SPEED_TIER_4 damage_falloff = DAMAGE_FALLOFF_TIER_9 -/datum/ammo/bullet/rifle/explosive/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/rifle/explosive/on_hit_mob(mob/M, obj/projectile/P) cell_explosion(get_turf(M), 80, 40, EXPLOSION_FALLOFF_SHAPE_LINEAR, P.dir, P.weapon_cause_data) -/datum/ammo/bullet/rifle/explosive/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/rifle/explosive/on_hit_obj(obj/O, obj/projectile/P) cell_explosion(get_turf(O), 80, 40, EXPLOSION_FALLOFF_SHAPE_LINEAR, P.dir, P.weapon_cause_data) -/datum/ammo/bullet/rifle/explosive/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/rifle/explosive/on_hit_turf(turf/T, obj/projectile/P) if(T.density) cell_explosion(T, 80, 40, EXPLOSION_FALLOFF_SHAPE_LINEAR, P.dir, P.weapon_cause_data) @@ -944,16 +944,16 @@ var/acid_per_hit = 7 var/organic_damage_mult = 3 -/datum/ammo/bullet/rifle/ap/toxin/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/rifle/ap/toxin/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/toxic_buildup, acid_per_hit) -/datum/ammo/bullet/rifle/ap/toxin/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/rifle/ap/toxin/on_hit_turf(turf/T, obj/projectile/P) . = ..() if(T.flags_turf & TURF_ORGANIC) P.damage *= organic_damage_mult -/datum/ammo/bullet/rifle/ap/toxin/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/rifle/ap/toxin/on_hit_obj(obj/O, obj/projectile/P) . = ..() if(O.flags_obj & OBJ_ORGANIC) P.damage *= organic_damage_mult @@ -1049,10 +1049,10 @@ penetration = ARMOR_PENETRATION_TIER_10 shell_speed = AMMO_SPEED_TIER_6 -/datum/ammo/bullet/rifle/m4ra/impact/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/rifle/m4ra/impact/on_hit_mob(mob/M, obj/projectile/P) knockback(M, P, 32) // Can knockback basically at max range -/datum/ammo/bullet/rifle/m4ra/impact/knockback_effects(mob/living/living_mob, obj/item/projectile/fired_projectile) +/datum/ammo/bullet/rifle/m4ra/impact/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) @@ -1110,10 +1110,10 @@ damage_armor_punch = 2 handful_state = "slug_shell" -/datum/ammo/bullet/shotgun/slug/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/slug/on_hit_mob(mob/M,obj/projectile/P) knockback(M, P, 6) -/datum/ammo/bullet/shotgun/slug/knockback_effects(mob/living/living_mob, obj/item/projectile/fired_projectile) +/datum/ammo/bullet/shotgun/slug/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) @@ -1143,7 +1143,7 @@ shell_speed = AMMO_SPEED_TIER_3 handful_state = "beanbag_slug" -/datum/ammo/bullet/shotgun/beanbag/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/shotgun/beanbag/on_hit_mob(mob/M, obj/projectile/P) if(!M || M == P.firer) return if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -1168,14 +1168,14 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary) )) -/datum/ammo/bullet/shotgun/incendiary/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/incendiary/on_hit_mob(mob/M,obj/projectile/P) burst(get_turf(M),P,damage_type) knockback(M,P) -/datum/ammo/bullet/shotgun/incendiary/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/incendiary/on_hit_obj(obj/O,obj/projectile/P) burst(get_turf(P),P,damage_type) -/datum/ammo/bullet/shotgun/incendiary/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/incendiary/on_hit_turf(turf/T,obj/projectile/P) burst(get_turf(T),P,damage_type) @@ -1242,7 +1242,7 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary) )) -/datum/ammo/bullet/shotgun/buckshot/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/buckshot/on_hit_mob(mob/M,obj/projectile/P) knockback(M,P) //buckshot variant only used by the masterkey shotgun attachment. @@ -1290,7 +1290,7 @@ damage_armor_punch = 0 pen_armor_punch = 0 -/datum/ammo/bullet/shotgun/heavy/buckshot/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/heavy/buckshot/on_hit_mob(mob/M,obj/projectile/P) knockback(M,P) /datum/ammo/bullet/shotgun/heavy/buckshot/spread @@ -1334,10 +1334,10 @@ penetration = ARMOR_PENETRATION_TIER_6 damage_armor_punch = 2 -/datum/ammo/bullet/shotgun/heavy/slug/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/shotgun/heavy/slug/on_hit_mob(mob/M,obj/projectile/P) knockback(M, P, 7) -/datum/ammo/bullet/shotgun/heavy/slug/knockback_effects(mob/living/living_mob, obj/item/projectile/fired_projectile) +/datum/ammo/bullet/shotgun/heavy/slug/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) @@ -1366,7 +1366,7 @@ accuracy = HIT_ACCURACY_TIER_2 shell_speed = AMMO_SPEED_TIER_2 -/datum/ammo/bullet/shotgun/heavy/beanbag/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/shotgun/heavy/beanbag/on_hit_mob(mob/M, obj/projectile/P) if(!M || M == P.firer) return if(ishuman(M)) @@ -1415,7 +1415,7 @@ effective_range_max = EFFECTIVE_RANGE_MAX_TIER_2 //Full damage up to this distance, then falloff for each tile beyond. var/hit_messages = list() -/datum/ammo/bullet/shotgun/twobore/on_hit_mob(mob/living/M, obj/item/projectile/P) +/datum/ammo/bullet/shotgun/twobore/on_hit_mob(mob/living/M, obj/projectile/P) var/mob/shooter = P.firer if(shooter && ismob(shooter) && HAS_TRAIT(shooter, TRAIT_TWOBORE_TRAINING) && M.stat != DEAD && prob(40)) //Death is handled by periodic life() checks so this should have a chance to fire on a killshot. if(!length(hit_messages)) //Pick and remove lines, refill on exhaustion. @@ -1439,7 +1439,7 @@ step(M, get_dir(P.firer, M)) -/datum/ammo/bullet/shotgun/twobore/knockback_effects(mob/living/living_mob, obj/item/projectile/fired_projectile) +/datum/ammo/bullet/shotgun/twobore/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) @@ -1473,7 +1473,7 @@ accuracy = HIT_ACCURACY_TIER_1 handful_state = "tracking_lever_action_bullet" -/datum/ammo/bullet/lever_action/tracker/on_hit_mob(mob/M, obj/item/projectile/P, mob/user) +/datum/ammo/bullet/lever_action/tracker/on_hit_mob(mob/M, obj/projectile/P, mob/user) //SEND_SIGNAL(user, COMSIG_BULLET_TRACKING, user, M) M.visible_message(SPAN_DANGER("You hear a faint beep under [M]'s [M.mob_size > MOB_SIZE_HUMAN ? "chitin" : "skin"].")) @@ -1542,7 +1542,7 @@ shell_speed = AMMO_SPEED_TIER_6 damage_falloff = 0 -/datum/ammo/bullet/sniper/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/sniper/on_hit_mob(mob/M,obj/projectile/P) if((P.projectile_flags & PROJECTILE_BULLSEYE) && M == P.original) var/mob/living/L = M L.apply_armoured_damage(damage*2, ARMOR_BULLET, BRUTE, null, penetration) @@ -1564,7 +1564,7 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary) )) -/datum/ammo/bullet/sniper/incendiary/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/sniper/incendiary/on_hit_mob(mob/M,obj/projectile/P) if((P.projectile_flags & PROJECTILE_BULLSEYE) && M == P.original) var/mob/living/L = M var/blind_duration = 5 @@ -1587,7 +1587,7 @@ damage_var_high = PROJECTILE_VARIANCE_TIER_8 //Documenting old code: This converts to a variance of 96-109% damage. -Kaga penetration = 0 -/datum/ammo/bullet/sniper/flak/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/sniper/flak/on_hit_mob(mob/M,obj/projectile/P) if((P.projectile_flags & PROJECTILE_BULLSEYE) && M == P.original) var/slow_duration = 7 var/mob/living/L = M @@ -1602,7 +1602,7 @@ burst(get_turf(M),P,damage_type, 2 , 2) burst(get_turf(M),P,damage_type, 1 , 2 , 0) -/datum/ammo/bullet/sniper/flak/on_near_target(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/sniper/flak/on_near_target(turf/T, obj/projectile/P) burst(T,P,damage_type, 2 , 2) burst(T,P,damage_type, 1 , 2, 0) return 1 @@ -1612,7 +1612,7 @@ damage = 42 penetration = ARMOR_PENETRATION_TIER_6 -/datum/ammo/bullet/sniper/crude/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/sniper/crude/on_hit_mob(mob/M, obj/projectile/P) . = ..() pushback(M, P, 3) @@ -1629,7 +1629,7 @@ damage = 125 shell_speed = AMMO_SPEED_TIER_6 -/datum/ammo/bullet/sniper/anti_materiel/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/sniper/anti_materiel/on_hit_mob(mob/M,obj/projectile/P) if((P.projectile_flags & PROJECTILE_BULLSEYE) && M == P.original) var/mob/living/L = M var/size_damage_mod = 0.8 @@ -1650,7 +1650,7 @@ sound_hit = 'sound/bullets/bullet_vulture_impact.ogg' flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SNIPER|AMMO_IGNORE_COVER|AMMO_ANTIVEHICLE -/datum/ammo/bullet/sniper/anti_materiel/vulture/on_hit_mob(mob/hit_mob, obj/item/projectile/bullet) +/datum/ammo/bullet/sniper/anti_materiel/vulture/on_hit_mob(mob/hit_mob, obj/projectile/bullet) . = ..() knockback(hit_mob, bullet, 30) hit_mob.apply_effect(3, SLOW) @@ -1675,7 +1675,7 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_penetrating) )) -/datum/ammo/bullet/sniper/elite/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/sniper/elite/on_hit_mob(mob/M,obj/projectile/P) if((P.projectile_flags & PROJECTILE_BULLSEYE) && M == P.original) var/mob/living/L = M var/size_damage_mod = 0.5 @@ -1707,20 +1707,20 @@ max_range = 32 shell_speed = AMMO_SPEED_TIER_6 -/datum/ammo/bullet/tank/flak/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/tank/flak/on_hit_mob(mob/M,obj/projectile/P) burst(get_turf(M),P,damage_type, 2 , 3) burst(get_turf(M),P,damage_type, 1 , 3 , 0) -/datum/ammo/bullet/tank/flak/on_near_target(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/tank/flak/on_near_target(turf/T, obj/projectile/P) burst(get_turf(T),P,damage_type, 2 , 3) burst(get_turf(T),P,damage_type, 1 , 3, 0) return 1 -/datum/ammo/bullet/tank/flak/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/bullet/tank/flak/on_hit_obj(obj/O,obj/projectile/P) burst(get_turf(P),P,damage_type, 2 , 3) burst(get_turf(P),P,damage_type, 1 , 3 , 0) -/datum/ammo/bullet/tank/flak/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/bullet/tank/flak/on_hit_turf(turf/T,obj/projectile/P) burst(get_turf(T),P,damage_type, 2 , 3) burst(get_turf(T),P,damage_type, 1 , 3 , 0) @@ -1739,23 +1739,23 @@ max_range = 12 shell_speed = AMMO_SPEED_TIER_5 -/datum/ammo/bullet/tank/dualcannon/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/bullet/tank/dualcannon/on_hit_mob(mob/M,obj/projectile/P) for(var/mob/living/carbon/L in get_turf(M)) if(L.stat == CONSCIOUS && L.mob_size <= MOB_SIZE_XENO) shake_camera(L, 1, 1) -/datum/ammo/bullet/tank/dualcannon/on_near_target(turf/T, obj/item/projectile/P) +/datum/ammo/bullet/tank/dualcannon/on_near_target(turf/T, obj/projectile/P) for(var/mob/living/carbon/L in T) if(L.stat == CONSCIOUS && L.mob_size <= MOB_SIZE_XENO) shake_camera(L, 1, 1) return 1 -/datum/ammo/bullet/tank/dualcannon/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/bullet/tank/dualcannon/on_hit_obj(obj/O,obj/projectile/P) for(var/mob/living/carbon/L in get_turf(O)) if(L.stat == CONSCIOUS && L.mob_size <= MOB_SIZE_XENO) shake_camera(L, 1, 1) -/datum/ammo/bullet/tank/dualcannon/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/bullet/tank/dualcannon/on_hit_turf(turf/T,obj/projectile/P) for(var/mob/living/carbon/L in T) if(L.stat == CONSCIOUS && L.mob_size <= MOB_SIZE_XENO) shake_camera(L, 1, 1) @@ -1811,7 +1811,7 @@ ///Stuff for the HRP holotargetting stacks var/holo_stacks = 15 -/datum/ammo/bullet/smartgun/holo_target/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/smartgun/holo_target/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/bonus_damage_stack, holo_stacks, world.time) @@ -1967,24 +1967,24 @@ smoke = null . = ..() -/datum/ammo/rocket/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/on_hit_mob(mob/M, obj/projectile/P) cell_explosion(get_turf(M), 150, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) smoke.set_up(1, get_turf(M)) if(ishuman_strict(M)) // No yautya or synths. Makes humans gib on direct hit. M.ex_act(350, P.dir, P.weapon_cause_data, 100) smoke.start() -/datum/ammo/rocket/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/on_hit_obj(obj/O, obj/projectile/P) cell_explosion(get_turf(O), 150, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) smoke.set_up(1, get_turf(O)) smoke.start() -/datum/ammo/rocket/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/on_hit_turf(turf/T, obj/projectile/P) cell_explosion(T, 150, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) smoke.set_up(1, T) smoke.start() -/datum/ammo/rocket/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/do_at_max_range(obj/projectile/P) cell_explosion(get_turf(P), 150, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) smoke.set_up(1, get_turf(P)) smoke.start() @@ -2001,7 +2001,7 @@ damage = 10 penetration= ARMOR_PENETRATION_TIER_10 -/datum/ammo/rocket/ap/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/ap/on_hit_mob(mob/M, obj/projectile/P) var/turf/T = get_turf(M) M.ex_act(150, P.dir, P.weapon_cause_data, 100) M.apply_effect(2, WEAKEN) @@ -2012,14 +2012,14 @@ smoke.set_up(1, T) smoke.start() -/datum/ammo/rocket/ap/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/ap/on_hit_obj(obj/O, obj/projectile/P) var/turf/T = get_turf(O) O.ex_act(150, P.dir, P.weapon_cause_data, 100) cell_explosion(T, 100, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) smoke.set_up(1, T) smoke.start() -/datum/ammo/rocket/ap/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/ap/on_hit_turf(turf/T, obj/projectile/P) var/hit_something = 0 for(var/mob/M in T) M.ex_act(150, P.dir, P.weapon_cause_data, 100) @@ -2040,7 +2040,7 @@ smoke.set_up(1, T) smoke.start() -/datum/ammo/rocket/ap/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/ap/do_at_max_range(obj/projectile/P) var/turf/T = get_turf(P) var/hit_something = 0 for(var/mob/M in T) @@ -2068,7 +2068,7 @@ shrapnel_chance = 5 shrapnel_type = /obj/item/large_shrapnel/at_rocket_dud -/datum/ammo/rocket/ap/anti_tank/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/ap/anti_tank/on_hit_obj(obj/O, obj/projectile/P) if(istype(O, /obj/vehicle/multitile)) var/obj/vehicle/multitile/M = O M.next_move = world.time + vehicle_slowdown_time @@ -2094,19 +2094,19 @@ damage = 25 shell_speed = AMMO_SPEED_TIER_3 -/datum/ammo/rocket/ltb/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/ltb/on_hit_mob(mob/M, obj/projectile/P) cell_explosion(get_turf(M), 220, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) cell_explosion(get_turf(M), 200, 100, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) -/datum/ammo/rocket/ltb/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/ltb/on_hit_obj(obj/O, obj/projectile/P) cell_explosion(get_turf(O), 220, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) cell_explosion(get_turf(O), 200, 100, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) -/datum/ammo/rocket/ltb/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/ltb/on_hit_turf(turf/T, obj/projectile/P) cell_explosion(get_turf(T), 220, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) cell_explosion(get_turf(T), 200, 100, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) -/datum/ammo/rocket/ltb/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/ltb/do_at_max_range(obj/projectile/P) cell_explosion(get_turf(P), 220, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) cell_explosion(get_turf(P), 200, 100, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) @@ -2139,16 +2139,16 @@ landingSmoke.start() landingSmoke = null -/datum/ammo/rocket/wp/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/wp/on_hit_mob(mob/M, obj/projectile/P) drop_flame(get_turf(M), P.weapon_cause_data) -/datum/ammo/rocket/wp/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/wp/on_hit_obj(obj/O, obj/projectile/P) drop_flame(get_turf(O), P.weapon_cause_data) -/datum/ammo/rocket/wp/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/wp/on_hit_turf(turf/T, obj/projectile/P) drop_flame(T, P.weapon_cause_data) -/datum/ammo/rocket/wp/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/wp/do_at_max_range(obj/projectile/P) drop_flame(get_turf(P), P.weapon_cause_data) /datum/ammo/rocket/wp/upp @@ -2175,16 +2175,16 @@ var/datum/reagent/napalm/upp/R = new() new /obj/flamer_fire(T, cause_data, R, 3) -/datum/ammo/rocket/wp/upp/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/wp/upp/on_hit_mob(mob/M, obj/projectile/P) drop_flame(get_turf(M), P.weapon_cause_data) -/datum/ammo/rocket/wp/upp/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/wp/upp/on_hit_obj(obj/O, obj/projectile/P) drop_flame(get_turf(O), P.weapon_cause_data) -/datum/ammo/rocket/wp/upp/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/wp/upp/on_hit_turf(turf/T, obj/projectile/P) drop_flame(T, P.weapon_cause_data) -/datum/ammo/rocket/wp/upp/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/wp/upp/do_at_max_range(obj/projectile/P) drop_flame(get_turf(P), P.weapon_cause_data) /datum/ammo/rocket/wp/quad @@ -2195,26 +2195,26 @@ max_range = 32 shell_speed = AMMO_SPEED_TIER_3 -/datum/ammo/rocket/wp/quad/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/wp/quad/on_hit_mob(mob/M, obj/projectile/P) drop_flame(get_turf(M), P.weapon_cause_data) explosion(P.loc, -1, 2, 4, 5, , , ,P.weapon_cause_data) -/datum/ammo/rocket/wp/quad/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/wp/quad/on_hit_obj(obj/O, obj/projectile/P) drop_flame(get_turf(O), P.weapon_cause_data) explosion(P.loc, -1, 2, 4, 5, , , ,P.weapon_cause_data) -/datum/ammo/rocket/wp/quad/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/wp/quad/on_hit_turf(turf/T, obj/projectile/P) drop_flame(T, P.weapon_cause_data) explosion(P.loc, -1, 2, 4, 5, , , ,P.weapon_cause_data) -/datum/ammo/rocket/wp/quad/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/wp/quad/do_at_max_range(obj/projectile/P) drop_flame(get_turf(P), P.weapon_cause_data) explosion(P.loc, -1, 2, 4, 5, , , ,P.weapon_cause_data) /datum/ammo/rocket/custom name = "custom rocket" -/datum/ammo/rocket/custom/proc/prime(atom/A, obj/item/projectile/P) +/datum/ammo/rocket/custom/proc/prime(atom/A, obj/projectile/P) var/obj/item/weapon/gun/launcher/rocket/launcher = P.shot_from var/obj/item/ammo_magazine/rocket/custom/rocket = launcher.current_mag if(rocket.locked && rocket.warhead && rocket.warhead.detonator) @@ -2226,16 +2226,16 @@ smoke.set_up(1, get_turf(A)) smoke.start() -/datum/ammo/rocket/custom/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/rocket/custom/on_hit_mob(mob/M, obj/projectile/P) prime(M, P) -/datum/ammo/rocket/custom/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/rocket/custom/on_hit_obj(obj/O, obj/projectile/P) prime(O, P) -/datum/ammo/rocket/custom/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/rocket/custom/on_hit_turf(turf/T, obj/projectile/P) prime(T, P) -/datum/ammo/rocket/custom/do_at_max_range(obj/item/projectile/P) +/datum/ammo/rocket/custom/do_at_max_range(obj/projectile/P) prime(null, P) /* @@ -2274,7 +2274,7 @@ shell_speed = AMMO_SPEED_TIER_1 // Slightly faster hit_effect_color = "#FFFF00" -/datum/ammo/energy/taser/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/energy/taser/on_hit_mob(mob/M, obj/projectile/P) if(ishuman(M)) var/mob/living/carbon/human/H = M H.disable_special_items() // Disables scout cloak @@ -2293,7 +2293,7 @@ stamina_damage = 25 //why not shell_speed = AMMO_SPEED_TIER_3 -/datum/ammo/energy/rxfm_eva/on_hit_mob(mob/living/M, obj/item/projectile/P) +/datum/ammo/energy/rxfm_eva/on_hit_mob(mob/living/M, obj/projectile/P) ..() if(prob(10)) //small chance for one to ignite on hit M.fire_act() @@ -2343,7 +2343,7 @@ icon_state = "shrapnel_plasma" damage_type = BURN -/datum/ammo/bullet/shrapnel/plasma/on_hit_mob(mob/hit_mob, obj/item/projectile/hit_projectile) +/datum/ammo/bullet/shrapnel/plasma/on_hit_mob(mob/hit_mob, obj/projectile/hit_projectile) hit_mob.apply_effect(2, WEAKEN) /datum/ammo/energy/yautja/caster @@ -2371,7 +2371,7 @@ damage = 0 flags_ammo_behavior = AMMO_ENERGY|AMMO_IGNORE_RESIST -/datum/ammo/energy/yautja/caster/bolt/stun/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/bolt/stun/on_hit_mob(mob/M, obj/projectile/P) var/mob/living/carbon/C = M var/stun_time = src.stun_time if(istype(C)) @@ -2404,13 +2404,13 @@ var/vehicle_slowdown_time = 5 SECONDS -/datum/ammo/energy/yautja/caster/sphere/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/on_hit_mob(mob/M, obj/projectile/P) cell_explosion(P, 170, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) -/datum/ammo/energy/yautja/caster/sphere/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/on_hit_turf(turf/T, obj/projectile/P) cell_explosion(P, 170, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) -/datum/ammo/energy/yautja/caster/sphere/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/on_hit_obj(obj/O, obj/projectile/P) if(istype(O, /obj/vehicle/multitile)) var/obj/vehicle/multitile/multitile_vehicle = O multitile_vehicle.next_move = world.time + vehicle_slowdown_time @@ -2420,7 +2420,7 @@ multitile_vehicle.ex_act(150, P.dir, P.weapon_cause_data, 100) cell_explosion(get_turf(P), 170, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) -/datum/ammo/energy/yautja/caster/sphere/do_at_max_range(obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/do_at_max_range(obj/projectile/P) cell_explosion(get_turf(P), 170, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, P.weapon_cause_data) @@ -2434,19 +2434,19 @@ var/stun_range = 4 // Big var/stun_time = 6 -/datum/ammo/energy/yautja/caster/sphere/stun/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/stun/on_hit_mob(mob/M, obj/projectile/P) do_area_stun(P) -/datum/ammo/energy/yautja/caster/sphere/stun/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/stun/on_hit_turf(turf/T,obj/projectile/P) do_area_stun(P) -/datum/ammo/energy/yautja/caster/sphere/stun/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/stun/on_hit_obj(obj/O,obj/projectile/P) do_area_stun(P) -/datum/ammo/energy/yautja/caster/sphere/stun/do_at_max_range(obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/stun/do_at_max_range(obj/projectile/P) do_area_stun(P) -/datum/ammo/energy/yautja/caster/sphere/stun/proc/do_area_stun(obj/item/projectile/P) +/datum/ammo/energy/yautja/caster/sphere/stun/proc/do_area_stun(obj/projectile/P) playsound(P, 'sound/weapons/wave.ogg', 75, 1, 25) for (var/mob/living/carbon/M in view(src.stun_range, get_turf(P))) var/stun_time = src.stun_time @@ -2562,7 +2562,7 @@ M.apply_effect(0.7, WEAKEN) M.visible_message(SPAN_DANGER("[M] falls prone.")) -/datum/ammo/xeno/toxin/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/xeno/toxin/on_hit_mob(mob/M,obj/projectile/P) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.status_flags & XENO_HOST) @@ -2586,7 +2586,7 @@ accuracy = HIT_ACCURACY_TIER_5*2 max_range = 6 - 1 -/datum/ammo/xeno/toxin/queen/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/xeno/toxin/queen/on_hit_mob(mob/M,obj/projectile/P) neuro_callback.Invoke(M, effect_power, TRUE) /datum/ammo/xeno/toxin/shotgun @@ -2611,7 +2611,7 @@ bonus_projectiles_amount = 0 -/*proc/neuro_flak(turf/T, obj/item/projectile/P, datum/callback/CB, power, insta_neuro, radius) +/*proc/neuro_flak(turf/T, obj/projectile/P, datum/callback/CB, power, insta_neuro, radius) if(!T) return FALSE var/firer = P.firer var/hit_someone = FALSE @@ -2635,13 +2635,13 @@ spit_cost = 50 flags_ammo_behavior = AMMO_XENO|AMMO_IGNORE_RESIST -/datum/ammo/xeno/toxin/burst/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/toxin/burst/on_hit_mob(mob/M, obj/projectile/P) if(isxeno(M) && isxeno(P.firer) && M:hivenumber == P.firer:hivenumber) neuro_callback.Invoke(M, effect_power*1.5, TRUE) neuro_flak(get_turf(M), P, neuro_callback, effect_power, FALSE, 1) -/datum/ammo/xeno/toxin/burst/on_near_target(turf/T, obj/item/projectile/P) +/datum/ammo/xeno/toxin/burst/on_near_target(turf/T, obj/projectile/P) return neuro_flak(T, P, neuro_callback, effect_power, FALSE, 1) /datum/ammo/xeno/sticky @@ -2656,16 +2656,16 @@ accuracy_var_high = PROJECTILE_VARIANCE_TIER_4 max_range = 32 -/datum/ammo/xeno/sticky/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/xeno/sticky/on_hit_mob(mob/M,obj/projectile/P) drop_resin(get_turf(P)) -/datum/ammo/xeno/sticky/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/xeno/sticky/on_hit_obj(obj/O,obj/projectile/P) drop_resin(get_turf(P)) -/datum/ammo/xeno/sticky/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/xeno/sticky/on_hit_turf(turf/T,obj/projectile/P) drop_resin(T) -/datum/ammo/xeno/sticky/do_at_max_range(obj/item/projectile/P) +/datum/ammo/xeno/sticky/do_at_max_range(obj/projectile/P) drop_resin(get_turf(P)) /datum/ammo/xeno/sticky/proc/drop_resin(turf/T) @@ -2698,10 +2698,10 @@ penetration = ARMOR_PENETRATION_TIER_2 shell_speed = AMMO_SPEED_TIER_3 -/datum/ammo/xeno/acid/on_shield_block(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/acid/on_shield_block(mob/M, obj/projectile/P) burst(M,P,damage_type) -/datum/ammo/xeno/acid/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/acid/on_hit_mob(mob/M, obj/projectile/P) if(iscarbon(M)) var/mob/living/carbon/C = M if(C.status_flags & XENO_HOST && HAS_TRAIT(C, TRAIT_NESTED) || C.stat == DEAD) @@ -2714,7 +2714,7 @@ damage = 30 max_range = 6 -/datum/ammo/xeno/acid/spatter/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/acid/spatter/on_hit_mob(mob/M, obj/projectile/P) . = ..() if(. == FALSE) return @@ -2746,7 +2746,7 @@ apply_delegate = FALSE -/datum/ammo/xeno/acid/prae_nade/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/acid/prae_nade/on_hit_mob(mob/M, obj/projectile/P) if (!ishuman(M)) return @@ -2776,16 +2776,16 @@ shell_speed = AMMO_SPEED_TIER_1 scatter = SCATTER_AMOUNT_TIER_10 -/datum/ammo/xeno/prae_skillshot/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/prae_skillshot/on_hit_mob(mob/M, obj/projectile/P) acid_stacks_aoe(get_turf(P)) -/datum/ammo/xeno/prae_skillshot/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/xeno/prae_skillshot/on_hit_obj(obj/O, obj/projectile/P) acid_stacks_aoe(get_turf(P)) -/datum/ammo/xeno/prae_skillshot/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/xeno/prae_skillshot/on_hit_turf(turf/T, obj/projectile/P) acid_stacks_aoe(get_turf(P)) -/datum/ammo/xeno/prae_skillshot/do_at_max_range(obj/item/projectile/P) +/datum/ammo/xeno/prae_skillshot/do_at_max_range(obj/projectile/P) acid_stacks_aoe(get_turf(P)) /datum/ammo/xeno/prae_skillshot/proc/acid_stacks_aoe(turf/T) @@ -2837,7 +2837,7 @@ smoke_system = null . = ..() -/datum/ammo/xeno/boiler_gas/on_hit_mob(mob/moob, obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/on_hit_mob(mob/moob, obj/projectile/proj) if(iscarbon(moob)) var/mob/living/carbon/carbon = moob if(carbon.status_flags & XENO_HOST && HAS_TRAIT(carbon, TRAIT_NESTED) || carbon.stat == DEAD) @@ -2850,22 +2850,22 @@ to_chat(moob, SPAN_HIGHDANGER("Neurotoxic liquid spreads all over you and immediately soaks into your pores and orifices! Oh fuck!")) // Fucked up but have a chance to escape rather than being game-ended drop_nade(get_turf(proj), proj,TRUE) -/datum/ammo/xeno/boiler_gas/on_hit_obj(obj/outbacksteakhouse, obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/on_hit_obj(obj/outbacksteakhouse, obj/projectile/proj) drop_nade(get_turf(proj), proj) -/datum/ammo/xeno/boiler_gas/on_hit_turf(turf/Turf, obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/on_hit_turf(turf/Turf, obj/projectile/proj) if(Turf.density && isturf(proj.loc)) drop_nade(proj.loc, proj) //we don't want the gas globs to land on dense turfs, they block smoke expansion. else drop_nade(Turf, proj) -/datum/ammo/xeno/boiler_gas/do_at_max_range(obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/do_at_max_range(obj/projectile/proj) drop_nade(get_turf(proj), proj) -/datum/ammo/xeno/boiler_gas/proc/set_xeno_smoke(obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/proc/set_xeno_smoke(obj/projectile/proj) smoke_system = new /datum/effect_system/smoke_spread/xeno_weaken() -/datum/ammo/xeno/boiler_gas/proc/drop_nade(turf/turf, obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/proc/drop_nade(turf/turf, obj/projectile/proj) var/lifetime_mult = 1.0 var/datum/cause_data if(isboiler(proj.firer)) @@ -2884,10 +2884,10 @@ smokerange = 3 -/datum/ammo/xeno/boiler_gas/acid/set_xeno_smoke(obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/acid/set_xeno_smoke(obj/projectile/proj) smoke_system = new /datum/effect_system/smoke_spread/xeno_acid() -/datum/ammo/xeno/boiler_gas/acid/on_hit_mob(mob/moob, obj/item/projectile/proj) +/datum/ammo/xeno/boiler_gas/acid/on_hit_mob(mob/moob, obj/projectile/proj) if(iscarbon(moob)) var/mob/living/carbon/carbon = moob if(carbon.status_flags & XENO_HOST && HAS_TRAIT(carbon, TRAIT_NESTED) || carbon.stat == DEAD) @@ -2915,7 +2915,7 @@ shrapnel_type = /obj/item/shard/shrapnel/bone_chips shrapnel_chance = 60 -/datum/ammo/xeno/bone_chips/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/bone_chips/on_hit_mob(mob/M, obj/projectile/P) if(iscarbon(M)) var/mob/living/carbon/C = M if((HAS_FLAG(C.status_flags, XENO_HOST) && HAS_TRAIT(C, TRAIT_NESTED)) || C.stat == DEAD) @@ -2945,7 +2945,7 @@ damage = 10 shrapnel_chance = 0 -/datum/ammo/xeno/bone_chips/spread/runner/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/xeno/bone_chips/spread/runner/on_hit_mob(mob/M, obj/projectile/P) if(iscarbon(M)) var/mob/living/carbon/C = M if((HAS_FLAG(C.status_flags, XENO_HOST) && HAS_TRAIT(C, TRAIT_NESTED)) || C.stat == DEAD) @@ -2966,12 +2966,12 @@ max_range = 4 accuracy = HIT_ACCURACY_TIER_MAX -/datum/ammo/xeno/oppressor_tail/on_bullet_generation(obj/item/projectile/generated_projectile, mob/bullet_generator) +/datum/ammo/xeno/oppressor_tail/on_bullet_generation(obj/projectile/generated_projectile, mob/bullet_generator) //The projectile has no icon, so the overlay shows up in FRONT of the projectile, and the beam connects to it in the middle. var/image/hook_overlay = new(icon = 'icons/effects/beam.dmi', icon_state = "oppressor_tail_hook", layer = BELOW_MOB_LAYER) generated_projectile.overlays += hook_overlay -/datum/ammo/xeno/oppressor_tail/on_hit_mob(mob/target, obj/item/projectile/fired_proj) +/datum/ammo/xeno/oppressor_tail/on_hit_mob(mob/target, obj/projectile/fired_proj) var/mob/living/carbon/xenomorph/xeno_firer = fired_proj.firer if(xeno_firer.can_not_harm(target)) return @@ -3012,7 +3012,7 @@ shell_speed = AMMO_SPEED_TIER_2 shrapnel_chance = 5 -/datum/ammo/bullet/shrapnel/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/bullet/shrapnel/on_hit_obj(obj/O, obj/projectile/P) if(istype(O, /obj/structure/barricade)) var/obj/structure/barricade/B = O B.health -= rand(2, 5) @@ -3037,7 +3037,7 @@ shell_speed = AMMO_SPEED_TIER_3//she fast af boi penetration = ARMOR_PENETRATION_TIER_5 -/datum/ammo/bullet/shrapnel/hornet_rounds/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/shrapnel/hornet_rounds/on_hit_mob(mob/M, obj/projectile/P) . = ..() M.AddComponent(/datum/component/bonus_damage_stack, 10, world.time) @@ -3123,7 +3123,7 @@ shrapnel_chance = SHRAPNEL_CHANCE_TIER_2 accuracy = HIT_ACCURACY_TIER_MAX -/datum/ammo/bullet/shrapnel/jagged/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/bullet/shrapnel/jagged/on_hit_mob(mob/M, obj/projectile/P) if(isxeno(M)) M.apply_effect(0.4, SLOW) @@ -3185,16 +3185,16 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary) )) -/datum/ammo/flamethrower/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/flamethrower/on_hit_mob(mob/M, obj/projectile/P) drop_flame(get_turf(M), P.weapon_cause_data) -/datum/ammo/flamethrower/on_hit_obj(obj/O, obj/item/projectile/P) +/datum/ammo/flamethrower/on_hit_obj(obj/O, obj/projectile/P) drop_flame(get_turf(O), P.weapon_cause_data) -/datum/ammo/flamethrower/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/flamethrower/on_hit_turf(turf/T, obj/projectile/P) drop_flame(T, P.weapon_cause_data) -/datum/ammo/flamethrower/do_at_max_range(obj/item/projectile/P) +/datum/ammo/flamethrower/do_at_max_range(obj/projectile/P) drop_flame(get_turf(P), P.weapon_cause_data) /datum/ammo/flamethrower/tank_flamer @@ -3265,22 +3265,22 @@ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary) )) -/datum/ammo/flare/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/flare/on_hit_mob(mob/M,obj/projectile/P) drop_flare(get_turf(M), P, P.firer) -/datum/ammo/flare/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/flare/on_hit_obj(obj/O,obj/projectile/P) drop_flare(get_turf(P), P, P.firer) -/datum/ammo/flare/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/flare/on_hit_turf(turf/T, obj/projectile/P) if(T.density && isturf(P.loc)) drop_flare(P.loc, P, P.firer) else drop_flare(T, P, P.firer) -/datum/ammo/flare/do_at_max_range(obj/item/projectile/P, mob/firer) +/datum/ammo/flare/do_at_max_range(obj/projectile/P, mob/firer) drop_flare(get_turf(P), P, P.firer) -/datum/ammo/flare/proc/drop_flare(turf/T, obj/item/projectile/fired_projectile, mob/firer) +/datum/ammo/flare/proc/drop_flare(turf/T, obj/projectile/fired_projectile, mob/firer) var/obj/item/device/flashlight/flare/G = new flare_type(T) var/matrix/rotation = matrix() rotation.Turn(fired_projectile.angle - 90) @@ -3294,7 +3294,7 @@ flare_type = /obj/item/device/flashlight/flare/signal/gun handful_type = /obj/item/device/flashlight/flare/signal -/datum/ammo/flare/signal/drop_flare(turf/T, obj/item/projectile/fired_projectile, mob/firer) +/datum/ammo/flare/signal/drop_flare(turf/T, obj/projectile/fired_projectile, mob/firer) var/obj/item/device/flashlight/flare/signal/gun/signal_flare = ..() signal_flare.activate_signal(firer) if(istype(fired_projectile.shot_from, /obj/item/weapon/gun/flare)) @@ -3332,7 +3332,7 @@ if(istype(target_organ)) target_organ.embed(new can_type) -/datum/ammo/souto/on_hit_mob(mob/M, obj/item/projectile/P) +/datum/ammo/souto/on_hit_mob(mob/M, obj/projectile/P) if(!M || M == P.firer) return if(M.throw_mode && !M.get_active_hand()) //empty active hand and we're in throw mode. If so we catch the can. if(!M.is_mob_incapacitated()) // People who are not able to catch cannot catch. @@ -3353,25 +3353,25 @@ if(P.contents.len) drop_can(P.loc, P) //We make a can at the location. -/datum/ammo/souto/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/souto/on_hit_obj(obj/O,obj/projectile/P) drop_can(P.loc, P) //We make a can at the location. -/datum/ammo/souto/on_hit_turf(turf/T, obj/item/projectile/P) +/datum/ammo/souto/on_hit_turf(turf/T, obj/projectile/P) drop_can(P.loc, P) //We make a can at the location. -/datum/ammo/souto/do_at_max_range(obj/item/projectile/P) +/datum/ammo/souto/do_at_max_range(obj/projectile/P) drop_can(P.loc, P) //We make a can at the location. -/datum/ammo/souto/on_shield_block(mob/M, obj/item/projectile/P) +/datum/ammo/souto/on_shield_block(mob/M, obj/projectile/P) drop_can(P.loc, P) //We make a can at the location. -/datum/ammo/souto/proc/drop_can(loc, obj/item/projectile/P) +/datum/ammo/souto/proc/drop_can(loc, obj/projectile/P) if(P.contents.len) for(var/obj/item/I in P.contents) I.forceMove(loc) randomize_projectile(P) -/datum/ammo/souto/proc/randomize_projectile(obj/item/projectile/P) +/datum/ammo/souto/proc/randomize_projectile(obj/projectile/P) shrapnel_type = pick(typesof(/obj/item/reagent_container/food/drinks/cans/souto)-/obj/item/reagent_container/food/drinks/cans/souto) /datum/ammo/grenade_container @@ -3386,19 +3386,19 @@ accuracy = HIT_ACCURACY_TIER_3 max_range = 6 -/datum/ammo/grenade_container/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/grenade_container/on_hit_mob(mob/M,obj/projectile/P) drop_nade(P) -/datum/ammo/grenade_container/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/grenade_container/on_hit_obj(obj/O,obj/projectile/P) drop_nade(P) -/datum/ammo/grenade_container/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/grenade_container/on_hit_turf(turf/T,obj/projectile/P) drop_nade(P) -/datum/ammo/grenade_container/do_at_max_range(obj/item/projectile/P) +/datum/ammo/grenade_container/do_at_max_range(obj/projectile/P) drop_nade(P) -/datum/ammo/grenade_container/proc/drop_nade(obj/item/projectile/P) +/datum/ammo/grenade_container/proc/drop_nade(obj/projectile/P) var/turf/T = get_turf(P) var/obj/item/explosive/grenade/G = new nade_type(T) G.visible_message(SPAN_WARNING("\A [G] lands on [T]!")) @@ -3425,16 +3425,16 @@ accuracy = HIT_ACCURACY_TIER_3 max_range = 6 -/datum/ammo/hugger_container/on_hit_mob(mob/M,obj/item/projectile/P) +/datum/ammo/hugger_container/on_hit_mob(mob/M,obj/projectile/P) spawn_hugger(get_turf(P)) -/datum/ammo/hugger_container/on_hit_obj(obj/O,obj/item/projectile/P) +/datum/ammo/hugger_container/on_hit_obj(obj/O,obj/projectile/P) spawn_hugger(get_turf(P)) -/datum/ammo/hugger_container/on_hit_turf(turf/T,obj/item/projectile/P) +/datum/ammo/hugger_container/on_hit_turf(turf/T,obj/projectile/P) spawn_hugger(get_turf(P)) -/datum/ammo/hugger_container/do_at_max_range(obj/item/projectile/P) +/datum/ammo/hugger_container/do_at_max_range(obj/projectile/P) spawn_hugger(get_turf(P)) /datum/ammo/hugger_container/proc/spawn_hugger(turf/T) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index dd232de259e3..7d5d51a05eb4 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -54,7 +54,7 @@ Ammo will be replaced on New() for things that do not use mags.**/ var/datum/ammo/ammo = null ///What is currently in the chamber. Most guns will want something in the chamber upon creation. - var/obj/item/projectile/in_chamber = null + var/obj/projectile/in_chamber = null /*Ammo mags may or may not be internal, though the difference is a few additional variables. If they are not internal, don't call on those unique vars. This is done for quicker pathing. Just keep in mind most mags aren't internal, though some are. This is also the default magazine path loaded into a projectile weapon for reverse lookups on New(). Leave this null to do your own thing.*/ @@ -230,7 +230,7 @@ /// If this gun should spawn with automatic fire. Protected due to it never needing to be edited. VAR_PROTECTED/start_automatic = FALSE /// The type of projectile that this gun should shoot - var/projectile_type = /obj/item/projectile + var/projectile_type = /obj/projectile /// The multiplier for how much slower this should fire in automatic mode. 1 is normal, 1.2 is 20% slower, 2 is 100% slower, etc. Protected due to it never needing to be edited. VAR_PROTECTED/autofire_slow_mult = 1 @@ -954,7 +954,7 @@ and you're good to go. if(active_attachable.current_rounds > 0) //If it's still got ammo and stuff. active_attachable.current_rounds-- - var/obj/item/projectile/bullet = create_bullet(active_attachable.ammo, initial(name)) + var/obj/projectile/bullet = create_bullet(active_attachable.ammo, initial(name)) // For now, only bullet traits from the attachment itself will apply to its projectiles for(var/entry in active_attachable.traits_to_give_attached) var/list/L @@ -974,7 +974,7 @@ and you're good to go. else return ready_in_chamber()//We're not using the active attachable, we must use the active mag if there is one. -/obj/item/weapon/gun/proc/apply_traits(obj/item/projectile/P) +/obj/item/weapon/gun/proc/apply_traits(obj/projectile/P) // Apply bullet traits from gun for(var/entry in traits_to_give) var/list/L @@ -1021,7 +1021,7 @@ and you're good to go. if(isliving(loc)) var/mob/M = loc weapon_source_mob = M - var/obj/item/projectile/P = new projectile_type(src, create_cause_data(bullet_source, weapon_source_mob)) + var/obj/projectile/P = new projectile_type(src, create_cause_data(bullet_source, weapon_source_mob)) P.generate_bullet(chambered, 0, NO_FLAGS) return P @@ -1055,14 +1055,14 @@ and you're good to go. return in_chamber //Returns the projectile if it's actually successful. -/obj/item/weapon/gun/proc/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/proc/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) if(active_attachable) //Attachables don't chamber rounds, so we want to delete it right away. qdel(projectile_to_fire) //Getting rid of it. Attachables only use ammo after the cycle is over. if(refund) active_attachable.current_rounds++ //Refund the bullet. return 1 -/obj/item/weapon/gun/proc/clear_jam(obj/item/projectile/projectile_to_fire, mob/user as mob) //Guns jamming, great. +/obj/item/weapon/gun/proc/clear_jam(obj/projectile/projectile_to_fire, mob/user as mob) //Guns jamming, great. flags_gun_features &= ~GUN_BURST_FIRING // Also want to turn off bursting, in case that was on. It probably was. delete_bullet(projectile_to_fire, 1) //We're going to clear up anything inside if we need to. //If it's a regular bullet, we're just going to keep it chambered. @@ -1141,7 +1141,7 @@ and you're good to go. return TRUE //The gun should return the bullet that it already loaded from the end cycle of the last Fire(). - var/obj/item/projectile/projectile_to_fire = load_into_chamber(user) //Load a bullet in or check for existing one. + var/obj/projectile/projectile_to_fire = load_into_chamber(user) //Load a bullet in or check for existing one. if(!projectile_to_fire) //If there is nothing to fire, click. click_empty(user) flags_gun_features &= ~GUN_BURST_FIRING @@ -1202,7 +1202,7 @@ and you're good to go. //This is where the projectile leaves the barrel and deals with projectile code only. //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv in_chamber = null // It's not in the gun anymore - INVOKE_ASYNC(projectile_to_fire, TYPE_PROC_REF(/obj/item/projectile, fire_at), target, user, src, projectile_to_fire?.ammo?.max_range, bullet_velocity, original_target) + INVOKE_ASYNC(projectile_to_fire, TYPE_PROC_REF(/obj/projectile, fire_at), target, user, src, projectile_to_fire?.ammo?.max_range, bullet_velocity, original_target) projectile_to_fire = null // Important: firing might have made projectile collide early and ALREADY have deleted it. We clear it too. //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1270,7 +1270,7 @@ and you're good to go. if(active_attachable && !(active_attachable.flags_attach_features & ATTACH_PROJECTILE)) active_attachable.activate_attachment(src, null, TRUE)//We're not firing off a nade into our mouth. - var/obj/item/projectile/projectile_to_fire = load_into_chamber(user) + var/obj/projectile/projectile_to_fire = load_into_chamber(user) if(projectile_to_fire) //We actually have a projectile, let's move on. user.visible_message(SPAN_WARNING("[user] pulls the trigger!")) var/actual_sound @@ -1370,7 +1370,7 @@ and you're good to go. if(QDELETED(attacked_mob)) //Target deceased. break - var/obj/item/projectile/projectile_to_fire = load_into_chamber(user) + var/obj/projectile/projectile_to_fire = load_into_chamber(user) if(!projectile_to_fire) click_empty(user) break @@ -1401,9 +1401,9 @@ and you're good to go. simulate_recoil(1, user) if(projectile_to_fire.ammo.bonus_projectiles_amount) - var/obj/item/projectile/BP + var/obj/projectile/BP for(var/i in 1 to projectile_to_fire.ammo.bonus_projectiles_amount) - BP = new /obj/item/projectile(attacked_mob.loc, create_cause_data(initial(name), user)) + BP = new /obj/projectile(attacked_mob.loc, create_cause_data(initial(name), user)) BP.generate_bullet(GLOB.ammo_list[projectile_to_fire.ammo.bonus_projectiles_type], 0, NO_FLAGS) BP.accuracy = round(BP.accuracy * projectile_to_fire.accuracy/initial(projectile_to_fire.accuracy)) //Modifies accuracy of pellets per fire_bonus_projectiles. BP.damage *= damage_buff @@ -1574,7 +1574,7 @@ not all weapons use normal magazines etc. load_into_chamber() itself is designed to_chat(user, SPAN_DANGER("[current_mag.current_rounds][chambered ? "+1" : ""] / [current_mag.max_rounds] ROUNDS REMAINING")) //This proc applies some bonus effects to the shot/makes the message when a bullet is actually fired. -/obj/item/weapon/gun/proc/apply_bullet_effects(obj/item/projectile/projectile_to_fire, mob/user, reflex = 0, dual_wield = 0) +/obj/item/weapon/gun/proc/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, reflex = 0, dual_wield = 0) var/actual_sound = fire_sound if(isnull(fire_sound)) actual_sound = pick(fire_sounds) @@ -1651,7 +1651,7 @@ not all weapons use normal magazines etc. load_into_chamber() itself is designed return 1 -/obj/item/weapon/gun/proc/simulate_scatter(obj/item/projectile/projectile_to_fire, atom/target, turf/curloc, turf/targloc, mob/user, bullets_fired = 1) +/obj/item/weapon/gun/proc/simulate_scatter(obj/projectile/projectile_to_fire, atom/target, turf/curloc, turf/targloc, mob/user, bullets_fired = 1) var/fire_angle = Get_Angle(curloc, targloc) var/total_scatter_angle = projectile_to_fire.scatter diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 4d554ac13e0f..698ea8ef5957 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -3142,7 +3142,7 @@ Defined in conflicts.dm of the #defines folder. gun.last_fired = world.time gun.current_mag.reagents.remove_reagent(flamer_reagent.id, FLAME_REAGENT_USE_AMOUNT * fuel_per_projectile) - var/obj/item/projectile/P = new(src, create_cause_data(initial(name), user, src)) + var/obj/projectile/P = new(src, create_cause_data(initial(name), user, src)) var/datum/ammo/flamethrower/ammo_datum = new projectile_type ammo_datum.flamer_reagent_type = flamer_reagent.type P.generate_bullet(ammo_datum) diff --git a/code/modules/projectiles/guns/boltaction.dm b/code/modules/projectiles/guns/boltaction.dm index 9639e0c75a20..69ce3a8de53e 100644 --- a/code/modules/projectiles/guns/boltaction.dm +++ b/code/modules/projectiles/guns/boltaction.dm @@ -158,7 +158,7 @@ /obj/item/attachable/stock/vulture, ) civilian_usable_override = FALSE - projectile_type = /obj/item/projectile/vulture + projectile_type = /obj/projectile/vulture actions_types = list( /datum/action/item_action/vulture, ) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 5733b01195ff..adca6a7cce6f 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -96,7 +96,7 @@ update_icon() return TRUE -/obj/item/weapon/gun/energy/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/energy/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(refund) cell.charge += charge_cost return TRUE diff --git a/code/modules/projectiles/guns/lever_action.dm b/code/modules/projectiles/guns/lever_action.dm index 73d9330e2a53..81d7dc166cd3 100644 --- a/code/modules/projectiles/guns/lever_action.dm +++ b/code/modules/projectiles/guns/lever_action.dm @@ -495,7 +495,7 @@ their unique feature is that a direct hit will buff your damage and firerate if(!able_to_fire(user) || !target) //checks here since we don't want to fuck up applying the increase return NONE if(floating_penetration && in_chamber) //has to go before actual firing - var/obj/item/projectile/P = in_chamber + var/obj/projectile/P = in_chamber switch(floating_penetration) if(FLOATING_PENETRATION_TIER_1) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen20] @@ -525,7 +525,7 @@ their unique feature is that a direct hit will buff your damage and firerate wield_delay = initial(wield_delay) cur_onehand_chance = initial(cur_onehand_chance) if(in_chamber) - var/obj/item/projectile/P = in_chamber + var/obj/projectile/P = in_chamber P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88] floating_penetration = FLOATING_PENETRATION_TIER_0 //these are init configs and so cannot be initial() diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm index 7f89e652ef4e..4eaedf11ef11 100644 --- a/code/modules/projectiles/guns/revolvers.dm +++ b/code/modules/projectiles/guns/revolvers.dm @@ -182,7 +182,7 @@ rotate_cylinder() return 1 -/obj/item/weapon/gun/revolver/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/revolver/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(refund && current_mag) current_mag.current_rounds++ diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index 1cf35623408c..4237e89f80a3 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -590,7 +590,7 @@ can cause issues with ammo types getting mixed up during the burst. //We can't make a projectile without a mag or active attachable. -/obj/item/weapon/gun/shotgun/double/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/shotgun/double/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) qdel(projectile_to_fire) if(!current_mag) return diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm index d02fc9d58796..78d1fca2cf24 100644 --- a/code/modules/projectiles/guns/specialist.dm +++ b/code/modules/projectiles/guns/specialist.dm @@ -155,7 +155,7 @@ if(!check_can_use(target, TRUE)) return - var/obj/item/projectile/aimed_proj = sniper_rifle.in_chamber + var/obj/projectile/aimed_proj = sniper_rifle.in_chamber aimed_proj.projectile_flags |= PROJECTILE_BULLSEYE aimed_proj.AddComponent(/datum/component/homing_projectile, target, human) sniper_rifle.Fire(target, human) @@ -183,7 +183,7 @@ to_chat(H, SPAN_WARNING("\The [M] is too close to get a proper shot!")) return FALSE - var/obj/item/projectile/P = sniper_rifle.in_chamber + var/obj/projectile/P = sniper_rifle.in_chamber // TODO: Make the below logic only occur in certain circumstances. Check goggles, maybe? -Kaga if(check_shot_is_blocked(H, M, P)) to_chat(H, SPAN_WARNING("Something is in the way, or you're out of range!")) @@ -195,7 +195,7 @@ COOLDOWN_START(sniper_rifle, aimed_shot_cooldown, sniper_rifle.aimed_shot_cooldown_delay) return TRUE -/datum/action/item_action/specialist/aimed_shot/proc/check_shot_is_blocked(mob/firer, mob/target, obj/item/projectile/P) +/datum/action/item_action/specialist/aimed_shot/proc/check_shot_is_blocked(mob/firer, mob/target, obj/projectile/P) var/list/turf/path = getline2(firer, target, include_from_atom = FALSE) if(!path.len || get_dist(firer, target) > P.ammo.max_range) return TRUE @@ -1083,7 +1083,7 @@ /obj/item/weapon/gun/launcher/rocket/reload_into_chamber(mob/user) return TRUE -/obj/item/weapon/gun/launcher/rocket/delete_bullet(obj/item/projectile/projectile_to_fire, refund = 0) +/obj/item/weapon/gun/launcher/rocket/delete_bullet(obj/projectile/projectile_to_fire, refund = 0) if(!current_mag) return qdel(projectile_to_fire) @@ -1177,7 +1177,7 @@ current_mag.current_rounds = 0 //Adding in the rocket backblast. The tile behind the specialist gets blasted hard enough to down and slightly wound anyone -/obj/item/weapon/gun/launcher/rocket/apply_bullet_effects(obj/item/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) +/obj/item/weapon/gun/launcher/rocket/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) . = ..() if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user)) var/mob/living/carbon/human/huser = user @@ -1353,7 +1353,7 @@ Integrated.Attach(src) update_attachable(Integrated.slot) -/obj/item/weapon/gun/launcher/rocket/upp/apply_bullet_effects(obj/item/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) +/obj/item/weapon/gun/launcher/rocket/upp/apply_bullet_effects(obj/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0) . = ..() if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user)) return diff --git a/code/modules/projectiles/homing_projectile_component.dm b/code/modules/projectiles/homing_projectile_component.dm index 92e803de10b1..8fd36fd67f31 100644 --- a/code/modules/projectiles/homing_projectile_component.dm +++ b/code/modules/projectiles/homing_projectile_component.dm @@ -3,7 +3,7 @@ var/atom/homing_target /datum/component/homing_projectile/Initialize(atom/homing_target, mob/shooter) - if(!istype(parent, /obj/item/projectile)) + if(!istype(parent, /obj/projectile)) return COMPONENT_INCOMPATIBLE if(isliving(homing_target)) @@ -13,7 +13,7 @@ if(shooter && ishuman(homing_target)) // Don't track friendlies var/mob/living/carbon/human/human_target = homing_target - var/obj/item/projectile/projectile = parent + var/obj/projectile/projectile = parent if(SEND_SIGNAL(parent, COMSIG_BULLET_CHECK_MOB_SKIPPING, human_target) & COMPONENT_SKIP_MOB\ || projectile.runtime_iff_group && human_target.get_target_lock(projectile.runtime_iff_group)\ ) @@ -33,7 +33,7 @@ return ..() /datum/component/homing_projectile/proc/terminal_retarget() - var/obj/item/projectile/projectile = parent + var/obj/projectile/projectile = parent var/turf/homing_turf = get_turf(homing_target) projectile.speed *= 2 // Double speed to ensure hitting next tick despite eventual movement projectile.retarget(homing_turf, keep_angle = FALSE) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4613c59696de..b01203d0f4d8 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -4,7 +4,7 @@ #define DEBUG_XENO_DEFENSE 0 //The actual bullet objects. -/obj/item/projectile +/obj/projectile name = "projectile" icon = 'icons/obj/items/weapons/projectiles.dmi' icon_state = "bullet" @@ -72,14 +72,14 @@ /// How much to make the bullet fall off by accuracy-wise when closer than the ideal range var/accuracy_range_falloff = 10 -/obj/item/projectile/Initialize(mapload, datum/cause_data/cause_data) +/obj/projectile/Initialize(mapload, datum/cause_data/cause_data) . = ..() path = list() permutated = list() weapon_cause_data = istype(cause_data) ? cause_data : create_cause_data(cause_data) firer = cause_data?.resolve_mob() -/obj/item/projectile/Destroy() +/obj/projectile/Destroy() speed = 0 ammo = null shot_from = null @@ -94,22 +94,22 @@ SSprojectiles.stop_projectile(src) return ..() -/obj/item/projectile/proc/apply_bullet_trait(list/entry) +/obj/projectile/proc/apply_bullet_trait(list/entry) bullet_traits += list(entry.Copy()) // Need to use the proc instead of the wrapper because each entry is a list _AddElement(entry) -/obj/item/projectile/proc/give_bullet_traits(obj/item/projectile/to_give) +/obj/projectile/proc/give_bullet_traits(obj/projectile/to_give) for(var/list/entry in bullet_traits) to_give.apply_bullet_trait(entry.Copy()) -/obj/item/projectile/Collided(atom/movable/AM) +/obj/projectile/Collided(atom/movable/AM) if(AM && !(AM in permutated)) if(scan_a_turf(AM.loc)) SSprojectiles.stop_projectile(src) qdel(src) -/obj/item/projectile/Crossed(atom/movable/AM) +/obj/projectile/Crossed(atom/movable/AM) /* Fun fact: Crossed is called for any contents involving operations. * This notably means, inserting a magazing in a gun Crossed() it with the bullets in the gun. */ if(!loc?.z) @@ -120,10 +120,10 @@ qdel(src) -/obj/item/projectile/ex_act() +/obj/projectile/ex_act() return FALSE //We do not want anything to delete these, simply to make sure that all the bullet references are not runtiming. Otherwise, constantly need to check if the bullet exists. -/obj/item/projectile/proc/generate_bullet(datum/ammo/ammo_datum, bonus_damage = 0, special_flags = 0, mob/bullet_generator) +/obj/projectile/proc/generate_bullet(datum/ammo/ammo_datum, bonus_damage = 0, special_flags = 0, mob/bullet_generator) ammo = ammo_datum name = ammo.name icon = ammo.icon @@ -152,7 +152,7 @@ // Need to use the proc instead of the wrapper because each entry is a list apply_bullet_trait(L) -/obj/item/projectile/proc/calculate_damage() +/obj/projectile/proc/calculate_damage() if(effective_range_min && distance_travelled < effective_range_min) return max(0, damage - round((effective_range_min - distance_travelled) * damage_buildup)) else if(distance_travelled > effective_range_max) @@ -160,7 +160,7 @@ return damage // Target, firer, shot from (i.e. the gun), projectile range, projectile speed, original target (who was aimed at, not where projectile is going towards) -/obj/item/projectile/proc/fire_at(atom/target, atom/F, atom/S, range = 30, speed = 1, atom/original_override) +/obj/projectile/proc/fire_at(atom/target, atom/F, atom/S, range = 30, speed = 1, atom/original_override) SHOULD_NOT_SLEEP(TRUE) original = original || original_override || target if(!loc) @@ -225,7 +225,7 @@ // Finally queue it to Subsystem for further processing SSprojectiles.queue_projectile(src) -/obj/item/projectile/proc/update_angle(turf/source_turf, turf/aim_turf) +/obj/projectile/proc/update_angle(turf/source_turf, turf/aim_turf) p_x = Clamp(p_x, -16, 16) p_y = Clamp(p_y, -16, 16) @@ -252,7 +252,7 @@ rotate.Turn(angle) apply_transform(rotate) -/obj/item/projectile/process(delta_time) +/obj/projectile/process(delta_time) . = PROC_RETURN_SLEEP // Keep going as long as we got speed and time @@ -269,7 +269,7 @@ return FALSE /// Flies the projectile forward one single turf -/obj/item/projectile/proc/fly() +/obj/projectile/proc/fly() SHOULD_NOT_SLEEP(TRUE) PRIVATE_PROC(TRUE) var/turf/current_turf = get_turf(src) @@ -334,14 +334,14 @@ pixel_x = Clamp(dx, -16, 16) pixel_y = Clamp(dy, -16, 16) -/obj/item/projectile/proc/retarget(atom/new_target, keep_angle = FALSE) +/obj/projectile/proc/retarget(atom/new_target, keep_angle = FALSE) var/turf/current_turf = get_turf(src) path = getline2(current_turf, new_target) path.Cut(1, 2) // remove the turf we're already on var/atom/source = keep_angle ? original : current_turf update_angle(source, new_target) -/obj/item/projectile/proc/scan_a_turf(turf/T, proj_dir) +/obj/projectile/proc/scan_a_turf(turf/T, proj_dir) . = TRUE // Sleep safeguard: stop the bullet //Not actually flying? Should not be hitting anything. @@ -402,7 +402,7 @@ return TRUE return FALSE -/obj/item/projectile/proc/handle_object(obj/O) +/obj/projectile/proc/handle_object(obj/O) // If we've already handled this atom, don't do it again if(O in permutated) return FALSE @@ -438,7 +438,7 @@ if(SEND_SIGNAL(src, COMSIG_BULLET_POST_HANDLE_OBJ, O, .) & COMPONENT_BULLET_PASS_THROUGH) return FALSE -/obj/item/projectile/proc/handle_mob(mob/living/L) +/obj/projectile/proc/handle_mob(mob/living/L) // If we've already handled this atom, don't do it again if(SEND_SIGNAL(src, COMSIG_BULLET_PRE_HANDLE_MOB, L, .) & COMPONENT_BULLET_PASS_THROUGH) @@ -527,7 +527,7 @@ //---------------------------------------------------------- -/obj/item/projectile/proc/get_effective_accuracy() +/obj/projectile/proc/get_effective_accuracy() #if DEBUG_HIT_CHANCE to_world(SPAN_DEBUG("Base accuracy is [accuracy]; scatter: [scatter]; distance: [distance_travelled]")) #endif @@ -555,7 +555,7 @@ return effective_accuracy //objects use get_projectile_hit_boolean unlike mobs, which use get_projectile_hit_chance -/obj/proc/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/proc/get_projectile_hit_boolean(obj/projectile/P) if(!density) return FALSE @@ -565,7 +565,7 @@ return TRUE //Used by machines and structures to calculate shooting past cover -/obj/proc/calculate_cover_hit_boolean(obj/item/projectile/P, distance = 0, cade_direction_correct = FALSE) +/obj/proc/calculate_cover_hit_boolean(obj/projectile/P, distance = 0, cade_direction_correct = FALSE) if(istype(P.shot_from, /obj/item/hardpoint)) //anything shot from a tank gets a bonus to bypassing cover distance -= 3 @@ -585,7 +585,7 @@ return prob(hitchance) -/obj/structure/machinery/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/machinery/get_projectile_hit_boolean(obj/projectile/P) if(src == P.original && layer > ATMOS_DEVICE_LAYER) //clicking on the object itself hits the object var/hitchance = P.get_effective_accuracy() @@ -624,7 +624,7 @@ return calculate_cover_hit_boolean(P, distance) -/obj/structure/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/get_projectile_hit_boolean(obj/projectile/P) if(src == P.original && layer > ATMOS_DEVICE_LAYER) //clicking on the object itself hits the object var/hitchance = P.get_effective_accuracy() @@ -670,7 +670,7 @@ return calculate_cover_hit_boolean(P, distance, cade_direction_correct) -/obj/item/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/item/get_projectile_hit_boolean(obj/projectile/P) if(P && src == P.original) //clicking on the object itself. Code copied from mob get_projectile_hit_chance @@ -702,7 +702,7 @@ return TRUE -/obj/vehicle/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/vehicle/get_projectile_hit_boolean(obj/projectile/P) if(src == P.original) //clicking on the object itself hits the object var/hitchance = P.get_effective_accuracy() @@ -723,30 +723,30 @@ return TRUE -/obj/structure/window/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/window/get_projectile_hit_boolean(obj/projectile/P) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & AMMO_ENERGY) return FALSE else if(!(flags_atom & ON_BORDER) || (P.dir & dir) || (P.dir & reverse_direction(dir))) return TRUE -/obj/structure/machinery/door/poddoor/railing/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/machinery/door/poddoor/railing/get_projectile_hit_boolean(obj/projectile/P) return src == P.original -/obj/effect/alien/egg/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/effect/alien/egg/get_projectile_hit_boolean(obj/projectile/P) return src == P.original -/obj/effect/alien/resin/trap/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/effect/alien/resin/trap/get_projectile_hit_boolean(obj/projectile/P) return src == P.original -/obj/item/clothing/mask/facehugger/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/item/clothing/mask/facehugger/get_projectile_hit_boolean(obj/projectile/P) return src == P.original //mobs use get_projectile_hit_chance instead of get_projectile_hit_boolean -/mob/living/proc/get_projectile_hit_chance(obj/item/projectile/P) +/mob/living/proc/get_projectile_hit_chance(obj/projectile/P) if(lying && src != P.original) return FALSE var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags @@ -764,7 +764,7 @@ if(!can_see(shooter_living,src)) . -= 15 //Can't see the target (Opaque thing between shooter and target) -/mob/living/carbon/human/get_projectile_hit_chance(obj/item/projectile/P) +/mob/living/carbon/human/get_projectile_hit_chance(obj/projectile/P) . = ..() if(.) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags @@ -785,7 +785,7 @@ else return FALSE -/mob/living/carbon/xenomorph/get_projectile_hit_chance(obj/item/projectile/P) +/mob/living/carbon/xenomorph/get_projectile_hit_chance(obj/projectile/P) . = ..() if(.) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags @@ -807,17 +807,17 @@ if(evasion > 0) . -= evasion -/mob/living/silicon/robot/drone/get_projectile_hit_chance(obj/item/projectile/P) +/mob/living/silicon/robot/drone/get_projectile_hit_chance(obj/projectile/P) return FALSE // just stop them getting hit by projectiles completely -/obj/item/projectile/proc/play_hit_effect(mob/hit_mob) +/obj/projectile/proc/play_hit_effect(mob/hit_mob) if(ammo.sound_hit) playsound(hit_mob, ammo.sound_hit, 50, 1) if(hit_mob.stat != DEAD && !isnull(hit_effect_color)) animation_flash_color(hit_mob, hit_effect_color) -/obj/item/projectile/proc/play_shielded_hit_effect(mob/hit_mob) +/obj/projectile/proc/play_shielded_hit_effect(mob/hit_mob) if(ammo.sound_shield_hit) playsound(hit_mob, ammo.sound_shield_hit, 50, 1) if(hit_mob.stat != DEAD && !isnull(hit_effect_color)) @@ -830,13 +830,13 @@ // \\ //---------------------------------------------------------- -/atom/proc/bullet_act(obj/item/projectile/P) +/atom/proc/bullet_act(obj/projectile/P) return FALSE -/mob/dead/bullet_act(/obj/item/projectile/P) +/mob/dead/bullet_act(/obj/projectile/P) return FALSE -/mob/living/bullet_act(obj/item/projectile/P) +/mob/living/bullet_act(obj/projectile/P) if(!P) return @@ -854,7 +854,7 @@ SEND_SIGNAL(P, COMSIG_BULLET_ACT_LIVING, src, damage, damage) -/mob/living/carbon/human/bullet_act(obj/item/projectile/P) +/mob/living/carbon/human/bullet_act(obj/projectile/P) if(!P) return @@ -967,7 +967,7 @@ SEND_SIGNAL(P, COMSIG_POST_BULLET_ACT_HUMAN, src, damage, damage_result) //Deal with xeno bullets. -/mob/living/carbon/xenomorph/bullet_act(obj/item/projectile/P) +/mob/living/carbon/xenomorph/bullet_act(obj/projectile/P) if(!P || !istype(P)) return @@ -1048,7 +1048,7 @@ return TRUE -/turf/bullet_act(obj/item/projectile/P) +/turf/bullet_act(obj/projectile/P) if(SEND_SIGNAL(src, COMSIG_TURF_BULLET_ACT, P) & COMPONENT_BULLET_ACT_OVERRIDE) return @@ -1072,7 +1072,7 @@ return // walls can get shot and damaged, but bullets (vs energy guns) do much less. -/turf/closed/wall/bullet_act(obj/item/projectile/P) +/turf/closed/wall/bullet_act(obj/projectile/P) . = ..() var/damage = P.damage if(damage < 1) @@ -1092,7 +1092,7 @@ current_bulletholes++ take_damage(damage, P.firer) -/turf/closed/wall/almayer/research/containment/bullet_act(obj/item/projectile/P) +/turf/closed/wall/almayer/research/containment/bullet_act(obj/projectile/P) if(P) var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags if(ammo_flags & AMMO_ACIDIC) @@ -1104,17 +1104,17 @@ //Hitting an object. These are too numerous so they're staying in their files. //Why are there special cases listed here? Oh well, whatever. ~N -/obj/bullet_act(obj/item/projectile/P) +/obj/bullet_act(obj/projectile/P) bullet_ping(P) return TRUE -/obj/item/bullet_act(obj/item/projectile/P) +/obj/item/bullet_act(obj/projectile/P) bullet_ping(P) if(P.ammo.damage_type == BRUTE) explosion_throw(P.damage/2, P.dir, 4) return TRUE -/obj/structure/surface/table/bullet_act(obj/item/projectile/P) +/obj/structure/surface/table/bullet_act(obj/projectile/P) bullet_ping(P) health -= round(P.damage/2) if(health < 0) @@ -1132,7 +1132,7 @@ //This is where the bullet bounces off. -/atom/proc/bullet_ping(obj/item/projectile/P, pixel_x_offset = 0, pixel_y_offset = 0) +/atom/proc/bullet_ping(obj/projectile/P, pixel_x_offset = 0, pixel_y_offset = 0) if(!P || !P.ammo.ping) return @@ -1152,7 +1152,7 @@ /// People getting shot by a large amount of bullets in a very short period of time can lag them out, with chat messages being one cause, so a 1s cooldown per hit message is introduced to assuage that /mob/var/shot_cooldown = 0 -/mob/proc/bullet_message(obj/item/projectile/P) +/mob/proc/bullet_message(obj/projectile/P) if(!P) return if(COOLDOWN_FINISHED(src, shot_cooldown)) @@ -1198,16 +1198,16 @@ if(dx == -1 || dx == 1) return TRUE -/obj/item/projectile/vulture +/obj/projectile/vulture accuracy_range_falloff = 10 /// The odds of hitting a xeno in less than your gun's range. Doesn't apply to humans. var/xeno_shortrange_chance = 10 -/obj/item/projectile/vulture/Initialize(mapload, datum/cause_data/cause_data) +/obj/projectile/vulture/Initialize(mapload, datum/cause_data/cause_data) . = ..() RegisterSignal(src, COMSIG_GUN_VULTURE_FIRED_ONEHAND, PROC_REF(on_onehand)) -/obj/item/projectile/vulture/handle_mob(mob/living/hit_mob) +/obj/projectile/vulture/handle_mob(mob/living/hit_mob) if((ammo.accurate_range_min > distance_travelled) && isxeno(hit_mob)) if(prob(xeno_shortrange_chance)) return ..() @@ -1218,7 +1218,7 @@ return ..() /// Handler for when the user one-hands the firing gun -/obj/item/projectile/vulture/proc/on_onehand(datum/source) +/obj/projectile/vulture/proc/on_onehand(datum/source) SIGNAL_HANDLER accuracy = HIT_ACCURACY_TIER_2 // flat 10% chance if you're desperate and try to fire this thing without a bipod diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 11d310123089..c7b3d3e1bae2 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -367,7 +367,7 @@ return /obj/structure/machinery/disposal/deliveryChute/Collided(atom/movable/AM) //Go straight into the chute - if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect)) return + if(istype(AM, /obj/projectile) || istype(AM, /obj/effect)) return switch(dir) if(NORTH) if(AM.loc.y != src.loc.y+1) return diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index ecf1bacf080b..12235e7ac19b 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -335,7 +335,7 @@ GLOBAL_LIST_EMPTY(shuttle_controls) ui_interact(usr) -/obj/structure/machinery/computer/shuttle_control/bullet_act(obj/item/projectile/Proj) +/obj/structure/machinery/computer/shuttle_control/bullet_act(obj/projectile/Proj) visible_message("[Proj] ricochets off [src]!") return 0 diff --git a/code/modules/teleporters/teleporter_console.dm b/code/modules/teleporters/teleporter_console.dm index bdd62f67fdad..b9a3629c881d 100644 --- a/code/modules/teleporters/teleporter_console.dm +++ b/code/modules/teleporters/teleporter_console.dm @@ -166,7 +166,7 @@ ..() -/obj/structure/machinery/computer/teleporter_console/bullet_act(obj/item/projectile/P) +/obj/structure/machinery/computer/teleporter_console/bullet_act(obj/projectile/P) visible_message("[P] doesn't even scratch [src]!") return FALSE diff --git a/code/modules/tents/blockers.dm b/code/modules/tents/blockers.dm index 24765ca2a284..3c02ca326149 100644 --- a/code/modules/tents/blockers.dm +++ b/code/modules/tents/blockers.dm @@ -34,7 +34,7 @@ PF.flags_can_pass_front = NONE PF.flags_can_pass_behind = NONE -/obj/structure/blocker/tent/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/blocker/tent/get_projectile_hit_boolean(obj/projectile/P) . = ..() return FALSE // Always fly through the tent diff --git a/code/modules/tents/deployed_tents.dm b/code/modules/tents/deployed_tents.dm index d55fe6b59879..9ea06e357d9e 100644 --- a/code/modules/tents/deployed_tents.dm +++ b/code/modules/tents/deployed_tents.dm @@ -112,7 +112,7 @@ playsound(src, 'sound/items/paper_ripped.ogg', 25, 1) qdel(src) -/obj/structure/tent/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/tent/get_projectile_hit_boolean(obj/projectile/P) . = ..() return FALSE // Always fly through the tent diff --git a/code/modules/tents/equipment.dm b/code/modules/tents/equipment.dm index f2f9175a240e..0d47c7e3ce62 100644 --- a/code/modules/tents/equipment.dm +++ b/code/modules/tents/equipment.dm @@ -87,7 +87,7 @@ AddComponent(/datum/component/tent_supported_object) update_icon() -/obj/structure/tent_curtain/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/tent_curtain/get_projectile_hit_boolean(obj/projectile/P) return FALSE /obj/structure/tent_curtain/update_icon() diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm index 2fc49384075b..ee49ebc0ab57 100644 --- a/code/modules/vehicles/hardpoints/hardpoint.dm +++ b/code/modules/vehicles/hardpoints/hardpoint.dm @@ -134,7 +134,7 @@ return /obj/item/hardpoint/proc/generate_bullet(mob/user, turf/origin_turf) - var/obj/item/projectile/P = new(origin_turf, create_cause_data(initial(name), user)) + var/obj/projectile/P = new(origin_turf, create_cause_data(initial(name), user)) P.generate_bullet(new ammo.default_ammo) // Apply bullet traits from gun for(var/entry in traits_to_give) @@ -552,7 +552,7 @@ var/turf/origin_turf = get_turf(src) origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - var/obj/item/projectile/P = generate_bullet(user, origin_turf) + var/obj/projectile/P = generate_bullet(user, origin_turf) SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, user) P.fire_at(A, user, src, P.ammo.max_range, P.ammo.shell_speed) diff --git a/code/modules/vehicles/hardpoints/holder/tank_turret.dm b/code/modules/vehicles/hardpoints/holder/tank_turret.dm index db67dadb132d..27ab6c95404c 100644 --- a/code/modules/vehicles/hardpoints/holder/tank_turret.dm +++ b/code/modules/vehicles/hardpoints/holder/tank_turret.dm @@ -223,7 +223,7 @@ origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) origin_turf = get_step(get_step(origin_turf, owner.dir), owner.dir) //this should get us tile in front of tank to prevent grenade being stuck under us. - var/obj/item/projectile/P = generate_bullet(user, origin_turf) + var/obj/projectile/P = generate_bullet(user, origin_turf) SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, get_dist(origin_turf, A) + 1, P.ammo.shell_speed) ammo.current_rounds-- diff --git a/code/modules/vehicles/hardpoints/primary/flamer.dm b/code/modules/vehicles/hardpoints/primary/flamer.dm index 0b77d3671e05..929842df2307 100644 --- a/code/modules/vehicles/hardpoints/primary/flamer.dm +++ b/code/modules/vehicles/hardpoints/primary/flamer.dm @@ -51,7 +51,7 @@ var/range = get_dist(origin_turf, A) + 1 - var/obj/item/projectile/P = generate_bullet(user, origin_turf) + var/obj/projectile/P = generate_bullet(user, origin_turf) SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, range < P.ammo.max_range ? range : P.ammo.max_range, P.ammo.shell_speed) diff --git a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm index ee18443d7b7e..8151a1ee50c1 100644 --- a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm +++ b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm @@ -56,7 +56,7 @@ if(range > max_range) range = max_range - var/obj/item/projectile/P = generate_bullet(user, origin_turf) + var/obj/projectile/P = generate_bullet(user, origin_turf) SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, P.ammo.max_range, P.ammo.shell_speed) diff --git a/code/modules/vehicles/interior/interactable/doors.dm b/code/modules/vehicles/interior/interactable/doors.dm index 04f0cf65aaae..12b54bd425e4 100644 --- a/code/modules/vehicles/interior/interactable/doors.dm +++ b/code/modules/vehicles/interior/interactable/doors.dm @@ -14,7 +14,7 @@ // Which entrance to exit through var/entrance_id = null -/obj/structure/interior_exit/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/interior_exit/get_projectile_hit_boolean(obj/projectile/P) return FALSE /obj/structure/interior_exit/attack_hand(mob/M) diff --git a/code/modules/vehicles/interior/interior_hull.dm b/code/modules/vehicles/interior/interior_hull.dm index 7e049395bdc6..70b4cb8501f1 100644 --- a/code/modules/vehicles/interior/interior_hull.dm +++ b/code/modules/vehicles/interior/interior_hull.dm @@ -18,7 +18,7 @@ unslashable = TRUE indestructible = TRUE -/obj/structure/interior_wall/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/structure/interior_wall/get_projectile_hit_boolean(obj/projectile/P) return FALSE /obj/structure/interior_wall/ex_act() @@ -41,7 +41,7 @@ alpha = 80 -/obj/effect/vehicle_roof/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/effect/vehicle_roof/get_projectile_hit_boolean(obj/projectile/P) return FALSE /obj/effect/vehicle_roof/ex_act() diff --git a/code/modules/vehicles/multitile/multitile_interaction.dm b/code/modules/vehicles/multitile/multitile_interaction.dm index e3c69d10e17c..42b141327bd8 100644 --- a/code/modules/vehicles/multitile/multitile_interaction.dm +++ b/code/modules/vehicles/multitile/multitile_interaction.dm @@ -283,7 +283,7 @@ //Differentiates between damage types from different bullets //Applies a linear transformation to bullet damage that will generally decrease damage done -/obj/vehicle/multitile/bullet_act(obj/item/projectile/P) +/obj/vehicle/multitile/bullet_act(obj/projectile/P) var/dam_type = "bullet" var/damage = P.damage var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags diff --git a/code/modules/vehicles/van/van.dm b/code/modules/vehicles/van/van.dm index 1124f5348140..fdb2f397bb2e 100644 --- a/code/modules/vehicles/van/van.dm +++ b/code/modules/vehicles/van/van.dm @@ -218,7 +218,7 @@ /obj/vehicle/multitile/van/proc/reset_overdrive() misc_multipliers["move"] += overdrive_speed_mult -/obj/vehicle/multitile/van/get_projectile_hit_boolean(obj/item/projectile/P) +/obj/vehicle/multitile/van/get_projectile_hit_boolean(obj/projectile/P) if(src == P.original) //clicking on the van itself will hit it. var/hitchance = P.get_effective_accuracy() if(prob(hitchance)) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 3a79f14de51a..5192a6834050 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -98,7 +98,7 @@ new /obj/effect/decal/cleanable/blood/oil(src.loc) healthcheck() -/obj/vehicle/bullet_act(obj/item/projectile/P) +/obj/vehicle/bullet_act(obj/projectile/P) var/damage = P.damage health -= damage ..() From a3e82c0eafded430626519b49c6dcc52e9f3c58a Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:32:42 -0400 Subject: [PATCH 16/35] Stops queen prying open lifeboat hatches (#4374) # About the pull request Stops queen prying open lifeboat hatches which was causing people to float out into space and all sorts of insanity. # Explain why it's good for the game SPACE BAD # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow fix: Fixed queens prying open lifeboat double doors /:cl: --------- Co-authored-by: harryob --- code/game/machinery/doors/multi_tile.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index e6dccbdedbac..797a82bead76 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -271,6 +271,7 @@ unacidable = TRUE no_panel = 1 not_weldable = 1 + var/queen_pryable = TRUE /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ex_act(severity) return @@ -285,6 +286,9 @@ if(xeno.hive_pos != XENO_QUEEN) return ..() + if(!queen_pryable) + return ..() + if(!locked) return ..() @@ -316,6 +320,7 @@ locked = TRUE opacity = FALSE glass = TRUE + queen_pryable = FALSE var/throw_dir = EAST /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/try_to_activate_door(mob/user) From 7580b1a2a32ac647ae730008b6632e2fd11135b6 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 08:25:58 +0100 Subject: [PATCH 17/35] Automatic changelog for PR #4374 [ci skip] --- html/changelogs/AutoChangeLog-pr-4374.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4374.yml diff --git a/html/changelogs/AutoChangeLog-pr-4374.yml b/html/changelogs/AutoChangeLog-pr-4374.yml new file mode 100644 index 000000000000..1722b22bbf56 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4374.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - bugfix: "Fixed queens prying open lifeboat double doors" \ No newline at end of file From 3e0755b94a23f3a054486f4dcc316c8a24475d5c Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Mon, 11 Sep 2023 06:34:07 +0100 Subject: [PATCH 18/35] TWE Tidy-up (#4367) # About the pull request Tidies up the TWE RMC Presets as they were a little scattered. - Moves all the entries in the presets to be grouped properly, no more WEAR_HEAD appearing at the bottom of the list between the contents of droppouches. - Removed surgical line as it was being duplicated from the surgical kit. - Added MRE to the MRE carrier as it was otherwise using custom backpack and identical contents. - Amends skills so Breacher and Pointman are no longer able to use smartguns. # Explain why it's good for the game A little bit more efficient and easier to handle. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: code: Tidied up the TWE presets so they're easier to read. del: Removed duplicate surgical line from all TWE presets. add: Added an MRE box to the TWE MRE carrier preset. spellcheck: Added unique names to the RMC armors. fix: Fixed iconstate names being backwards for TWE pointman and SG. code: Removed unnecessary repeated values for TWE armors. code: Tidied the RMC skillsets to be consistent in ordering of skills. add: Added an SG specific skillset for RMCs. fix: Fixed duplicate entry for medical training on RMC TL skillset. spellcheck: Renamed default RMC skillset to Royal Marines Commando rather than Royal Marines Commando Rifleman. /:cl: --- code/datums/skills.dm | 33 ++- code/modules/clothing/suits/marine_armor.dm | 32 +-- code/modules/gear_presets/royal_marines.dm | 231 ++++++++++---------- icons/mob/humans/onmob/suit_1.dmi | Bin 235951 -> 235955 bytes icons/obj/items/clothing/cm_suits.dmi | Bin 74964 -> 74968 bytes 5 files changed, 149 insertions(+), 147 deletions(-) diff --git a/code/datums/skills.dm b/code/datums/skills.dm index 893484ff9cbb..f80b391123f2 100644 --- a/code/datums/skills.dm +++ b/code/datums/skills.dm @@ -2107,8 +2107,8 @@ Royal Marines Commando //NOTE: Skills take heavy from PMCs -/datum/skills/rmc/rifleman - name = "Royal Marines Commando Rifleman" +/datum/skills/rmc + name = "Royal Marines Commando" skills = list( SKILL_CQC = SKILL_CQC_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, @@ -2130,28 +2130,43 @@ Royal Marines Commando SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_ENGINEER = SKILL_ENGINEER_ENGI, - SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN, - SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, + SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, + SKILL_SURGERY = SKILL_SURGERY_NOVICE, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_JTAC = SKILL_JTAC_BEGINNER, + ) + +/datum/skills/rmc/smartgun + name = "Royal Marines Commando Smartgunner" + skills = list( + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, + SKILL_POLICE = SKILL_POLICE_SKILLED, + SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_JTAC = SKILL_JTAC_BEGINNER, + SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN, ) /datum/skills/rmc/leader name = "Royal Marines Commando Leader" skills = list( + SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_ENGINEER = SKILL_ENGINEER_ENGI, - SKILL_CQC = SKILL_CQC_SKILLED, - SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, - SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, - SKILL_JTAC = SKILL_JTAC_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_JTAC = SKILL_JTAC_TRAINED, + SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, ) diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index c26f5430de52..df7a8bc65b19 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -1727,7 +1727,6 @@ icon_state = "rmc_light" item_state = "rmc_light" flags_atom = NO_NAME_OVERRIDE|NO_SNOW_TYPE - storage_slots = 3 allowed = list( /obj/item/weapon/gun, /obj/item/tank/emergency_oxygen, @@ -1745,7 +1744,7 @@ /obj/item/device/walkman, ) -/obj/item/clothing/suit/storage/marine/veteran/royal_marine/light/ //RMC Rifleman Armor +/obj/item/clothing/suit/storage/marine/veteran/royal_marine/light //RMC Rifleman Armor icon_state = "rmc_light" item_state = "rmc_light" armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH @@ -1755,33 +1754,22 @@ slowdown = SLOWDOWN_ARMOR_LIGHT /obj/item/clothing/suit/storage/marine/veteran/royal_marine/light/team_leader //RMC TL & LT Armor + name = "kestrel armoured carry vest" icon_state = "rmc_light_padded" item_state = "rmc_light_padded" - armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH - armor_energy = CLOTHING_ARMOR_MEDIUMLOW - armor_bomb = CLOTHING_ARMOR_MEDIUM - armor_rad = CLOTHING_ARMOR_MEDIUM - slowdown = SLOWDOWN_ARMOR_LIGHT storage_slots = 7 -/obj/item/clothing/suit/storage/marine/veteran/royal_marine/medium //Smartgun Spec Armor - icon_state = "rmc_pointman" - item_state = "rmc_pointman" - armor_melee = CLOTHING_ARMOR_MEDIUM - armor_bullet = CLOTHING_ARMOR_MEDIUM - armor_laser = CLOTHING_ARMOR_MEDIUMLOW - armor_energy = CLOTHING_ARMOR_NONE - armor_bomb = CLOTHING_ARMOR_MEDIUMLOW - armor_bio = CLOTHING_ARMOR_MEDIUM - armor_rad = CLOTHING_ARMOR_MEDIUMLOW - armor_internaldamage = CLOTHING_ARMOR_MEDIUM - movement_compensation = SLOWDOWN_ARMOR_LIGHT - storage_slots = 3 +/obj/item/clothing/suit/storage/marine/veteran/royal_marine/smartgun //Smartgun Spec Armor + name = "kestrel armoured smartgun harness" + icon_state = "rmc_smartgun" + item_state = "rmc_smartgun" flags_inventory = BLOCKSHARPOBJ|BLOCK_KNOCKDOWN|SMARTGUN_HARNESS /obj/item/clothing/suit/storage/marine/veteran/royal_marine/pointman //Pointman Spec Armor - icon_state = "rmc_medium" - item_state = "rmc_medium" + name = "kestrel pointman armour" + desc = "A heavier version of the armor system used by the Three World Empire's Royal Marines Commandos. Designers from a Weyland Yutani subsidary, Lindenthal-Ehrenfeld Militärindustrie, iterated on the USCMC's M3 pattern personal armor in their Tokonigara lab to create an armor systemed to suit the unique needs of the Three World Empire's smaller but better equipped Royal Marines." + icon_state = "rmc_pointman" + item_state = "rmc_pointman" armor_melee = CLOTHING_ARMOR_HIGH armor_bullet = CLOTHING_ARMOR_HIGHPLUS armor_bomb = CLOTHING_ARMOR_HIGHPLUS diff --git a/code/modules/gear_presets/royal_marines.dm b/code/modules/gear_presets/royal_marines.dm index 25f1c2752763..373c41df49d8 100644 --- a/code/modules/gear_presets/royal_marines.dm +++ b/code/modules/gear_presets/royal_marines.dm @@ -51,202 +51,200 @@ assignment = "Royal Marine" rank = JOB_TWE_RMC_RIFLEMAN var/human_versus_human = FALSE - ///Gives the Royal Marines their radios + ///Gives the Royal Marines their radios var/headset_type = /obj/item/device/radio/headset/distress/royal_marine idtype = /obj/item/card/id/dogtag //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/standard - name = "RMC TWE Royal Marine Commando (Rifleman)" + name = "TWE Royal Marine Commando (Rifleman)" paygrade = "RMC E1" role_comm_title = "RMC" flags = EQUIPMENT_PRESET_EXTRA assignment = "Royal Marines Rifleman" rank = JOB_TWE_RMC_RIFLEMAN - skills = /datum/skills/rmc/rifleman + skills = /datum/skills/rmc /datum/equipment_preset/twe/royal_marine/standard/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/royal_marine, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/royal_marines, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/light, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/rmc/rmc_f90_ammo, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/rmc/light, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/incin, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/he, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90, WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) - /datum/equipment_preset/twe/royal_marine/standard/mre_pack - name = "RMC TWE Royal Marine Commando (MRE Rifleman)" + name = "TWE Royal Marine Commando (MRE Rifleman)" /datum/equipment_preset/twe/royal_marine/standard/mre_pack/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/rmc/frame, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/misc/mre, WEAR_IN_BACK) ..() //*****************************************************************************************************/ - -/datum/equipment_preset/twe/royal_marine/spec/marksman - name = "RMC TWE Royal Marine Commando (Marksman)" +/datum/equipment_preset/twe/royal_marine/spec paygrade = "RMC E2" - role_comm_title = "RMC" + role_comm_title = "RMC SPC" flags = EQUIPMENT_PRESET_EXTRA + skills = /datum/skills/rmc/specialist + +/datum/equipment_preset/twe/royal_marine/spec/marksman + name = "TWE Royal Marine Commando (Marksman)" assignment = "Royal Marines Marksman" rank = JOB_TWE_RMC_MARKSMAN - skills = /datum/skills/rmc/specialist /datum/equipment_preset/twe/royal_marine/spec/marksman/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/royal_marine, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/royal_marines, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/light, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/scope, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/rmc/rmc_f90_ammo/marksman, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/rmc/light, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/incin, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/he, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/scope, WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) - //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/spec/breacher - name = "RMC TWE Royal Marine Commando (Breacher)" - paygrade = "RMC E2" - role_comm_title = "RMC" - flags = EQUIPMENT_PRESET_EXTRA + name = "TWE Royal Marine Commando (Breacher)" assignment = "Royal Marines Breacher" rank = JOB_TWE_RMC_BREACHER - skills = /datum/skills/rmc/specialist /datum/equipment_preset/twe/royal_marine/spec/breacher/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine/breacher, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/royal_marine, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/royal_marines, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/pointman, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/shotgun, WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/general_belt/rmc, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular, WEAR_IN_BELT) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BELT) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical, WEAR_IN_BELT) new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BELT) - new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_BELT) new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BELT) - new_human.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/ballistic, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/shotgun, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/ballistic, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine/breacher, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/spec/machinegun - name = "RMC TWE Royal Marine Commando (Smartgunner)" - paygrade = "RMC E2" - role_comm_title = "RMC" - flags = EQUIPMENT_PRESET_EXTRA + name = "TWE Royal Marine Commando (Smartgunner)" + role_comm_title = "RMC SG" assignment = "Royal Marines Smartgunner" rank = JOB_TWE_RMC_SMARTGUNNER - skills = /datum/skills/rmc/specialist + skills = /datum/skills/rmc/smartgun /datum/equipment_preset/twe/royal_marine/spec/machinegun/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/royal_marine, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) + new_human.equip_to_slot(new /obj/item/clothing/glasses/night/m56_goggles, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/royal_marines, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/medium, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/smartgun, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun/rmc, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/l905/full, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) - new_human.equip_to_slot(new /obj/item/clothing/glasses/night/m56_goggles, WEAR_EYES) - + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/rmc/light, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BACK) - - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun/rmc, WEAR_J_STORE) - - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) new_human.equip_to_slot(new /obj/item/smartgun_battery(new_human), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smartgun/holo_targetting, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smartgun/holo_targetting, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) + //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/team_leader - name = "RMC TWE Royal Marine Commando (Teamleader)" + name = "TWE Royal Marine Commando (Teamleader)" paygrade = "RMC E4" - role_comm_title = "RMC" + role_comm_title = "RMC TL" flags = EQUIPMENT_PRESET_EXTRA assignment = "Royal Marines Team Leader" rank = JOB_TWE_RMC_TEAMLEADER @@ -254,48 +252,48 @@ /datum/equipment_preset/twe/royal_marine/team_leader/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine/team_leader, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/royal_marine/tl, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/royal_marines, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/light/team_leader, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/a_grip, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/l905/full, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine/team_leader, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/rmc/light, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/incin, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/he, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/a_grip, WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) - //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/lieuteant //they better say it Lef-tenant or they should be banned for LRP. More importantly this guy doesn't spawn in the ERT - name = "RMC TWE Royal Marine Commando (Officer)" + name = "TWE Royal Marine Commando (Officer)" paygrade = "RMC O1" - role_comm_title = "RMC" + role_comm_title = "RMC LT" flags = EQUIPMENT_PRESET_EXTRA assignment = "Royal Marines Team Commander" rank = JOB_TWE_RMC_LIEUTENANT @@ -303,38 +301,39 @@ /datum/equipment_preset/twe/royal_marine/lieuteant/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine/team_leader, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/royal_marine/lt, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/royal_marines, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/royal_marine/light/team_leader, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/a_grip, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/l905/full, WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/royal_marine, WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/royal_marine/team_leader, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/royal_marine/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/rmc/light, WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/rmc_f90, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/incin, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/rmc/he, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/rmc_f90/a_grip, WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate, WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/royal_marine, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/royal_marine, WEAR_IN_ACCESSORY) diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi index 46a7d4dd11376cbd0d36b92bac9b5d1aa9eca2c7..8424a9795b9153190a671aa1d17e1d85c45ac57f 100644 GIT binary patch delta 1406 zcmZY0eKgYx90u^sT5@DtKet_6jGB8cD^%8^E%Fj3FFSH`v&mZ;^G>_+Hli09h1_|G zO}RvUJ_O=)72mM)Vclf{haeW&-wnrg>kvCt7rx(<(Pkx z^QpwpgowDLh}akqDEWG&%ro}Ye#B-uSB=S;7|`%~hK?CDPNNp`V4@z=i)77L`jITG z`5nWA5%mW`l)CUnXKQhVPHPR%VCuDxxWD$~n0kGEd`Z>5y66;DKE0RX$r?*%WY8;W z=4wlM$^wm} zFh4F%J5!|#VOjg_dw zA$7z^8AmW#M2yr6vr_Z(`(M=T)`n(4-VB)VfgnD>;RA9$U?M1Lk1=D95@BsUJB0vM z2;3F|av@;S0tB@HoEAXd0+@(^AQ5m&1Wbzn6LC>jl&MZ$X}ER}AM_288(rRDRDAjF zKrVC-BLK1Ce{_WM5A-1~N)>wpe7I0-0HOf;+W!j<1<=Wj*wL{^SIH?K{;mvMsE_zR zq|aUD4z6#Q>T>U;Zsw)0FfNpu?>*=o&gy1f?!Dd3OnSy(HuY_J`Gu|b`>a1lOTK14 zU*}3-n0=NCBryibAP%V@DjYNm<`6(U%}kZUvyHMnR~2`I&`O1Gn$6-65IoIuDhG-2 z7Fm1t=iZPC|6T@hN#%UALk_2AQsH_VPYeQ?$|@OpL|i?f={xsQa>Cy(?SY`$Jxx*3 z=X#Gq4$+nd7FeWBFcRgnZOF~Vt9mfkuDjH?0Ula;oVb~BrunzLR_j8FEn1%XrNyf{oaUacpw3rUpf|>HJcVY{CwY7_ zFg7SNS+gnC!OW;9Bj?36TJ2RMcln#c!9SH41~24Db&cQN?3%9Ak&14lD=0;(J%*V^ zPtw<8&aYlJwYd_7QCWL+i5NqhDF%+V;{HbsvXRV+rd!6KO^Z>;I~~!zZ&FL~JFRvt zGF$)Y-PeS&cZQzG_sxfGTalTlx(P-*kYfecLr(@Ya8v)>-wng}Ds>R11euwA$E{d& z&Sh@<^|R5-KFy)CGZa01@$%Kd7`PIoKjf5KbU~d! zB~0jTlAj@5lO(~D1cbUW{j3uj^l3AjhA1aJr0jxA^oa0=sxbKBY(Ok!g9+TZX=l$rhW z(C#Hu9?w~96>(lGasH4y4FL|+;XUFF@s>1}vKp)-v>N6+i(e}T#aCi$1*lQ>Cx|rJ ZJbxwiiF0-e^kNDWym1nXJ)O)@TpHz zXya!Bq0VD!c!uSaQu7% zE6d@%YLmu9J$N<3Nm8%A7&@$Xt`AWwT~& zZ*aO(X_D*hOQpoKGpn9V-WT`JxtiyN%zTv0EyO0g3B7aitk3nl=X0xV>wcQMPYI)2 zbf!B4g4VD?v2atDP($gROD1h%6ZIIYv3BjjLB*DCn{VIv9J|r3l4$%ILrz4z^HaQx zal7{`vh-Z6>{d zj#76J6j<<6591te6o|~0X!@Z^JdMZ-_%qtor*0nMsRT_jh2TdfTq6@6k_np01ixg= zgj{eyfzKf0CenyNoQ$Mp8B{9{-L%@!mh@pw`ER-|IS7{874(U{F`~j5;od*)n52K@ zYrBNK)>w?g&hDwlp0ICx*8JL>asXq;=Y_IXe8*aCADxB>mV8*x8^Sa_2f^y{ASc7N zTvzUhE0;3rT0Q2<9e1^7{F3_JN28dZm;i|hlH|B*h z2xx(TF$h?Lz)2AB2LU_?kU$_G1gKy(1I+#%1O~uGi@=k257i6gsHPcT;^zvfn@0!I z!iye8Ir1q`o|OM$lWOYD?hWO(@Szh?j>FJwoTK$;D8pr9q%|&%&%@9WN4^a|7N&Uo zOZa|r4FhW$*E{r4`bhX^V7r773;B>s0z+i2KFSyg4?XZoH8sciC| z$9ni$8^c#GOdi;7&YRe{yc7SrWI z>UQ9*RR}{I+3@KJgU2U-aH=JgY+=dBE=w}qhvBv1({I1*zp8<>Tk|d|eNRCsbvEm+ zE|jNg%kyB|CbEAust-A!Q>a=-WIniP*6E@@{ ziObn8)I)DYnQYm*Z?h;@RD!geFeyVlOyNSt_U$^T4Db>Uz14Sy|1^bat8aejWq$i# zeE4nM85f1`OK>GyYVU*xxC5plICSO}4Hp>sO>IgSVgPE(U$IoxvwLLd(3cxyU}hPQ z_v*ZJZL7|0^Oe{>p|W2K2SH5(9!>EyXFE??b3|!~#mG3!fpW28Y^Uz&Rh<;CmxkE+zuWlH=h0U~ZV+j}C#XGIqCF zzyKMmE{r^QuG_1-w%El+=j??B_{LS`T|_i}F)alyR$J2<{m_39oy%WIKTIiq?+eiz z528nu5<|R=5d4k?15-zUWa(*yQ0+QuVQM%`I68yu)Sjla?~4}O|0a=*s6SZAYwiin TN>|8BSCExPt~p&n-tx-diNv7` diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi index 957150907c7d07e33d440f5d196f4721ba70582d..74257ed6c8cd9f7f23b36ff5472544bce96a0ae4 100644 GIT binary patch delta 60 zcmV-C0K@;($pqNR1dt>FDzPOF1tg}Wrg<$u^VJHImeAIHe>VJbc>n2Yxcc~E^B-m# S@fx)$gYAP;1-DZL0f8TFdmNVl delta 56 zcmV-80LTB>$pqBN1dt>FCb11DC-ha9pu0DR){0C Date: Mon, 11 Sep 2023 08:40:24 +0100 Subject: [PATCH 19/35] Automatic changelog for PR #4367 [ci skip] --- html/changelogs/AutoChangeLog-pr-4367.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4367.yml diff --git a/html/changelogs/AutoChangeLog-pr-4367.yml b/html/changelogs/AutoChangeLog-pr-4367.yml new file mode 100644 index 000000000000..6493aa6ffc4d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4367.yml @@ -0,0 +1,13 @@ +author: "realforest2001" +delete-after: True +changes: + - code_imp: "Tidied up the TWE presets so they're easier to read." + - rscdel: "Removed duplicate surgical line from all TWE presets." + - rscadd: "Added an MRE box to the TWE MRE carrier preset." + - spellcheck: "Added unique names to the RMC armors." + - bugfix: "Fixed iconstate names being backwards for TWE pointman and SG." + - code_imp: "Removed unnecessary repeated values for TWE armors." + - code_imp: "Tidied the RMC skillsets to be consistent in ordering of skills." + - rscadd: "Added an SG specific skillset for RMCs." + - bugfix: "Fixed duplicate entry for medical training on RMC TL skillset." + - spellcheck: "Renamed default RMC skillset to Royal Marines Commando rather than Royal Marines Commando Rifleman." \ No newline at end of file From a0bc0402a2c5720e30bb86eba14c6af56aa1f7db Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Mon, 11 Sep 2023 06:35:00 +0100 Subject: [PATCH 20/35] Project ARES: Release Gas Update (#4350) # About the pull request Updates the create_gas proc and creates a VV dropdown button to use it. Also adds a subtype of CN20 Nerve Gas that has affects on xenos. CN20 Nerve Gas is also now translucent and allows visibility. # Explain why it's good for the game create_gas is super clunky at the moment, this makes it usable. The addition of xeno-affecting gas also allows for some interesting situations. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Adds CN20-X Nerve Gas, an alteration of base CN20 that can affect xenos. add: CN20 and CN20-X are now translucent and do not obstruct vision much. admin: Adds a VV list dropdown to release gas from vents as the manual proc was too clunky. add: Adds nerve gas grenades for CN20 and CN20-X /:cl: --- code/__DEFINES/atmospherics.dm | 1 + code/__DEFINES/vv.dm | 3 + .../objects/effects/effect_system/smoke.dm | 68 +++++++++++++++---- .../items/explosives/grenades/marines.dm | 39 +++++++++++ .../objects/structures/pipes/vents/vents.dm | 28 ++++++++ .../mob/living/carbon/xenomorph/life.dm | 3 +- maps/map_files/USS_Almayer/USS_Almayer.dmm | 4 ++ 7 files changed, 130 insertions(+), 16 deletions(-) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index fcc3e7784cb5..3abd79708f7a 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -41,3 +41,4 @@ var/MAX_EXPLOSION_RANGE = 14 /// Used in /obj/structure/pipes/vents/proc/create_gas #define VENT_GAS_SMOKE "Smoke" #define VENT_GAS_CN20 "CN20 Nerve Gas" +#define VENT_GAS_CN20_XENO "CN20-X Nerve Gas" diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index ecdd9f64ec38..eb248e8a30a7 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -134,3 +134,6 @@ #define VV_HK_TOGGLEPOWER "togglepower" #define VV_HK_ADD_ITEMS_TO_VENDOR "add_items_to_vendor" + +// /obj/structure/pipes/vents +#define VV_HK_GAS "release_gas" diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index dbbc50a01204..78aa01b5dacb 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -51,7 +51,8 @@ qdel(src) return else if(time_to_live == 1) - alpha = 180 + if(alpha > 180) + alpha = 180 amount = 0 set_opacity(0) @@ -254,45 +255,79 @@ name = "CN20 nerve gas" smokeranking = SMOKE_RANK_HIGH color = "#80c7e4" + var/xeno_affecting = FALSE + opacity = FALSE + alpha = 75 + +/obj/effect/particle_effect/smoke/cn20/xeno + name = "CN20-X nerve gas" + color = "#2da9da" + xeno_affecting = TRUE /obj/effect/particle_effect/smoke/cn20/Move() . = ..() - for(var/mob/living/carbon/human/creature in get_turf(src)) - affect(creature) - -/obj/effect/particle_effect/smoke/cn20/affect(mob/living/carbon/human/creature) + if(!xeno_affecting) + for(var/mob/living/carbon/human/human in get_turf(src)) + affect(human) + else + for(var/mob/living/carbon/creature in get_turf(src)) + affect(creature) + +/obj/effect/particle_effect/smoke/cn20/affect(mob/living/carbon/creature) + var/mob/living/carbon/xenomorph/xeno_creature + var/mob/living/carbon/human/human_creature + if(isxeno(creature)) + xeno_creature = creature + else if(ishuman(creature)) + human_creature = creature if(!istype(creature) || issynth(creature) || creature.stat == DEAD) return FALSE + if(!xeno_affecting && xeno_creature) + return FALSE if(isyautja(creature) && prob(75)) return FALSE - if (creature.wear_mask && (creature.wear_mask.flags_inventory & BLOCKGASEFFECT)) + if(creature.wear_mask && (creature.wear_mask.flags_inventory & BLOCKGASEFFECT)) + return FALSE + if(human_creature && (human_creature.head && (human_creature.head.flags_inventory & BLOCKGASEFFECT))) return FALSE var/effect_amt = round(6 + amount*6) - creature.apply_damage(12, OXY) + if(xeno_creature) + if(xeno_creature.interference < 4) + to_chat(xeno_creature, SPAN_XENOHIGHDANGER("Your awareness dims to a small area!")) + xeno_creature.interference = 10 + xeno_creature.blinded = TRUE + else + creature.apply_damage(12, OXY) creature.SetEarDeafness(max(creature.ear_deaf, round(effect_amt*1.5))) //Paralysis of hearing system, aka deafness - if(!creature.eye_blind) //Eye exposure damage + if(!xeno_creature && !creature.eye_blind) //Eye exposure damage to_chat(creature, SPAN_DANGER("Your eyes sting. You can't see!")) - creature.SetEyeBlind(round(effect_amt/3)) - if(creature.coughedtime != 1 && !creature.stat) //Coughing/gasping + creature.SetEyeBlind(round(effect_amt/3)) + if(!xeno_creature && creature.coughedtime != 1 && !creature.stat) //Coughing/gasping creature.coughedtime = 1 if(prob(50)) creature.emote("cough") else creature.emote("gasp") addtimer(VARSET_CALLBACK(creature, coughedtime, 0), 1.5 SECONDS) - if (prob(20)) + var/stun_chance = 20 + if(xeno_affecting) + stun_chance = 35 + if(prob(stun_chance)) creature.apply_effect(1, WEAKEN) //Topical damage (neurotoxin on exposed skin) - to_chat(creature, SPAN_DANGER("Your body is going numb, almost as if paralyzed!")) + if(xeno_creature) + to_chat(xeno_creature, SPAN_XENODANGER("You are struggling to move, it's as if you're paralyzed!")) + else + to_chat(creature, SPAN_DANGER("Your body is going numb, almost as if paralyzed!")) if(prob(60 + round(amount*15))) //Highly likely to drop items due to arms/hands seizing up creature.drop_held_item() - if(ishuman(creature)) - creature.temporary_slowdown = max(creature.temporary_slowdown, 4) //One tick every two second - creature.recalculate_move_delay = TRUE + if(human_creature) + human_creature.temporary_slowdown = max(human_creature.temporary_slowdown, 4) //One tick every two second + human_creature.recalculate_move_delay = TRUE return TRUE ////////////////////////////////////// @@ -595,6 +630,9 @@ /datum/effect_system/smoke_spread/cn20 smoke_type = /obj/effect/particle_effect/smoke/cn20 +/datum/effect_system/smoke_spread/cn20/xeno + smoke_type = /obj/effect/particle_effect/smoke/cn20/xeno + // XENO SMOKES /datum/effect_system/smoke_spread/xeno_acid diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm index 5b72168b0851..2abb28075496 100644 --- a/code/game/objects/items/explosives/grenades/marines.dm +++ b/code/game/objects/items/explosives/grenades/marines.dm @@ -465,6 +465,45 @@ icon_state = "grenade_phos_clf" item_state = "grenade_phos_clf" +/* +//================================================ + Nerve Gas Grenades +//================================================ +*/ +/obj/item/explosive/grenade/nerve_gas + name = "\improper CN20 canister grenade" + desc = "A canister grenade of deadly nerve gas. It is set to detonate in 4 seconds." + icon_state = "flashbang2"//temp icon + det_time = 40 + item_state = "grenade_phos_clf"//temp icon + underslug_launchable = FALSE + harmful = TRUE + antigrief_protection = TRUE + var/datum/effect_system/smoke_spread/cn20/nerve_gas + var/nerve_gas_radius = 2 + +/obj/item/explosive/grenade/nerve_gas/New() + ..() + nerve_gas = new /datum/effect_system/smoke_spread/cn20 + nerve_gas.attach(src) + +/obj/item/explosive/grenade/nerve_gas/Destroy() + QDEL_NULL(nerve_gas) + return ..() + +/obj/item/explosive/grenade/nerve_gas/prime() + playsound(src.loc, 'sound/effects/smoke.ogg', 25, 1, 4) + nerve_gas.set_up(nerve_gas_radius, 0, get_turf(src), null, 6) + nerve_gas.start() + qdel(src) + +/obj/item/explosive/grenade/nerve_gas/xeno + name = "\improper CN20-X canister grenade" + +/obj/item/explosive/grenade/nerve_gas/xeno/New() + nerve_gas = new /datum/effect_system/smoke_spread/cn20/xeno + nerve_gas.attach(src) + /* //================================================ Airburst Smoke Grenades diff --git a/code/game/objects/structures/pipes/vents/vents.dm b/code/game/objects/structures/pipes/vents/vents.dm index d540414e4c8e..298fbc57f4ad 100644 --- a/code/game/objects/structures/pipes/vents/vents.dm +++ b/code/game/objects/structures/pipes/vents/vents.dm @@ -128,6 +128,32 @@ initial_loc.air_vent_names -= id_tag . = ..() +/obj/structure/pipes/vents/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION(VV_HK_GAS, "Release Gas") + +/obj/structure/pipes/vents/vv_do_topic(list/href_list) + . = ..() + var/mob/user = usr + if(href_list[VV_HK_GAS] && check_rights(R_EVENT)) + if(welded) + to_chat(usr, SPAN_WARNING("You cannot release gas from a welded vent.")) + return FALSE + var/list/options = list(VENT_GAS_SMOKE, VENT_GAS_CN20, VENT_GAS_CN20_XENO) + var/gas_choice = tgui_input_list(user, "What gas do you wish to use?", "Gas Choice", options, 20 SECONDS) + if(!gas_choice) + return FALSE + var/radius_choice = tgui_input_number(user, "What radius do you wish to use?", "Gas Radius", 4, 10, 1, 20 SECONDS) + var/warn_choice = tgui_input_number(user, "How many seconds warning do you wish to give?", "Release Warning", 5, 30, 1, 20 SECONDS) + warn_choice = warn_choice SECONDS + + var/confirm = alert(user, "Confirm gas setup. \n\nGas: '[gas_choice]'\nRadius: '[radius_choice]'\nWarn Time: '[warn_choice / 10] seconds' \n\n Is this correct?", "Confirmation", "Yes", "No") + if(confirm != "Yes") + return FALSE + log_admin("[key_name(user)] released gas (Gas: [gas_choice], Radius: [radius_choice], Delay: [warn_choice]) from [name] at X[x], Y[y], Z[z].") + create_gas(gas_choice, radius_choice, warn_choice) + return TRUE + /obj/structure/pipes/vents/proc/create_gas(gas_type = VENT_GAS_SMOKE, radius = 4, warning_time = 5 SECONDS) if(welded) to_chat(usr, SPAN_WARNING("You cannot release gas from a welded vent.")) @@ -138,6 +164,8 @@ spreader = new /datum/effect_system/smoke_spread/bad if(VENT_GAS_CN20) spreader = new /datum/effect_system/smoke_spread/cn20 + if(VENT_GAS_CN20_XENO) + spreader = new /datum/effect_system/smoke_spread/cn20/xeno if(!spreader) return FALSE gas_holder = spreader diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index 0542594f1ab6..65839e9c8caf 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -201,7 +201,8 @@ blinded = TRUE set_stat(UNCONSCIOUS) else - blinded = FALSE + if(!interference)//If their connection to hivemind is affected, their vision should be too. + blinded = FALSE set_stat(CONSCIOUS) if(regular_update && halloss > 0) if(resting) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 5631a5a6baed..085e7c14393e 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -74682,6 +74682,10 @@ /obj/structure/bed/chair/comfy/ares{ dir = 1 }, +/obj/structure/pipes/vents/pump/no_boom{ + name = "Security Vent"; + desc = "Has a valve and pump attached to it, connected to multiple gas tanks." + }, /turf/open/floor/almayer/no_build{ icon_state = "plating" }, From b3a6329608416b33f2a66fc9da7b57c1752d4c2d Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 08:54:24 +0100 Subject: [PATCH 21/35] Automatic changelog for PR #4350 [ci skip] --- html/changelogs/AutoChangeLog-pr-4350.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4350.yml diff --git a/html/changelogs/AutoChangeLog-pr-4350.yml b/html/changelogs/AutoChangeLog-pr-4350.yml new file mode 100644 index 000000000000..4780d592b9da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4350.yml @@ -0,0 +1,7 @@ +author: "realforest2001" +delete-after: True +changes: + - rscadd: "Adds CN20-X Nerve Gas, an alteration of base CN20 that can affect xenos." + - rscadd: "CN20 and CN20-X are now translucent and do not obstruct vision much." + - admin: "Adds a VV list dropdown to release gas from vents as the manual proc was too clunky." + - rscadd: "Adds nerve gas grenades for CN20 and CN20-X" \ No newline at end of file From d717166b5e34533a9f4d34d2574ffe50b83e86bf Mon Sep 17 00:00:00 2001 From: cuberound <122645057+cuberound@users.noreply.github.com> Date: Mon, 11 Sep 2023 07:37:52 +0200 Subject: [PATCH 22/35] Makes gau able to hit resting mobs (#4304) # About the pull request GAU should be able to hit resting mobs, that is just a bug. Copy of a part of Tisx GAU buff that makes GAU able to hit mobs. # Explain why it's good for the game it might make GAU a bit less of a joke. if it is too strong they way to balance it migth be removal of the explosion and spread decreas by one. # Changelog :cl: balance: GAU can hit mobs that are on ground now /:cl: --- code/modules/cm_marines/dropship_ammo.dm | 26 +++++++++++++++--------- code/modules/projectiles/ammo_datums.dm | 5 +++-- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/code/modules/cm_marines/dropship_ammo.dm b/code/modules/cm_marines/dropship_ammo.dm index d3d0266e5982..264400caa0dd 100644 --- a/code/modules/cm_marines/dropship_ammo.dm +++ b/code/modules/cm_marines/dropship_ammo.dm @@ -146,6 +146,8 @@ fire_mission_delay = 2 var/bullet_spread_range = 4 //how far from the real impact turf can bullets land var/shrapnel_type = /datum/ammo/bullet/shrapnel/gau //For siming 30mm bullet impacts. + var/directhit_damage = 105 //how much damage is to be inficted to a mob, this is here so that we can hit resting mobs. + var/penetration = 10 //AP value pretty much /obj/structure/ship_ammo/heavygun/get_examine_text(mob/user) . = ..() @@ -165,25 +167,27 @@ var/soundplaycooldown = 0 var/debriscooldown = 0 for(var/i = 1 to ammo_used_per_firing) - var/turf/U = pick(turf_list) + var/turf/impact_tile = pick(turf_list) sleep(1) var/datum/cause_data/cause_data = create_cause_data(initial(name), source_mob) - U.ex_act(EXPLOSION_THRESHOLD_VLOW, pick(alldirs), cause_data) - create_shrapnel(U,1,0,0,shrapnel_type,cause_data,FALSE,100) //simulates a bullet - for(var/atom/movable/AM in U) - if(iscarbon(AM)) - AM.ex_act(EXPLOSION_THRESHOLD_VLOW, null, cause_data) + impact_tile.ex_act(EXPLOSION_THRESHOLD_VLOW, pick(alldirs), cause_data) + create_shrapnel(impact_tile,1,0,0,shrapnel_type,cause_data,FALSE,100) //simulates a bullet + for(var/atom/movable/explosion_effect in impact_tile) + if(iscarbon(explosion_effect)) + var/mob/living/carbon/bullet_effect = explosion_effect + explosion_effect.ex_act(EXPLOSION_THRESHOLD_VLOW, null, cause_data) + bullet_effect.apply_armoured_damage(directhit_damage,ARMOR_BULLET,BRUTE,null,penetration) else - AM.ex_act(EXPLOSION_THRESHOLD_VLOW) + explosion_effect.ex_act(EXPLOSION_THRESHOLD_VLOW) if(!soundplaycooldown) //so we don't play the same sound 20 times very fast. - playsound(U, 'sound/effects/gauimpact.ogg',40,1,20) + playsound(impact_tile, 'sound/effects/gauimpact.ogg',40,1,20) soundplaycooldown = 3 soundplaycooldown-- if(!debriscooldown) - U.ceiling_debris_check(1) + impact_tile.ceiling_debris_check(1) debriscooldown = 6 debriscooldown-- - new /obj/effect/particle_effect/expl_particles(U) + new /obj/effect/particle_effect/expl_particles(impact_tile) sleep(11) //speed of sound simulation playsound(impact, 'sound/effects/gau.ogg',100,1,60) @@ -200,6 +204,8 @@ point_cost = 325 fire_mission_delay = 2 shrapnel_type = /datum/ammo/bullet/shrapnel/gau/at + directhit_damage = 80 //how much damage is to be inficted to a mob, this is here so that we can hit resting mobs. + penetration = 40 //AP value pretty much //laser battery diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index 63daf7ad9a47..449ce574eb2c 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -3135,7 +3135,8 @@ /datum/ammo/bullet/shrapnel/gau //for the GAU to have a impact bullet instead of firecrackers name = "30mm Multi-Purpose shell" - damage = 115 //More damaging, but 2x less shells and low AP + damage = 1 // ALL DAMAGE IS IN dropship_ammo SO WE CAN DEAL DAMAGE TO RESTING MOBS, these will still remain however so that we can get cause_data and status effects. + damage_type = BRUTE penetration = ARMOR_PENETRATION_TIER_2 accuracy = HIT_ACCURACY_TIER_MAX max_range = 0 @@ -3144,7 +3145,7 @@ /datum/ammo/bullet/shrapnel/gau/at name = "30mm Anti-Tank shell" - damage = 80 //Standard AP vs standard. (more AP for less damage) + damage = 1 // ALL DAMAGE IS IN dropship_ammo SO WE CAN DEAL DAMAGE TO RESTING MOBS, these will still remain however so that we can get cause_data and status effects. penetration = ARMOR_PENETRATION_TIER_8 accuracy = HIT_ACCURACY_TIER_MAX /* From 92cf04ad55329d45cc906c268a960f21d7e833c0 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:08:58 +0100 Subject: [PATCH 23/35] Automatic changelog for PR #4304 [ci skip] --- html/changelogs/AutoChangeLog-pr-4304.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4304.yml diff --git a/html/changelogs/AutoChangeLog-pr-4304.yml b/html/changelogs/AutoChangeLog-pr-4304.yml new file mode 100644 index 000000000000..6781eac2c3ac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4304.yml @@ -0,0 +1,4 @@ +author: "cuberound" +delete-after: True +changes: + - balance: "GAU can hit mobs that are on ground now" \ No newline at end of file From 108358726a2b53354cbd30e880581ad6f31de893 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 11 Sep 2023 01:40:18 -0400 Subject: [PATCH 24/35] Cryorine changes (#4352) # About the pull request Cryorines now cost 6 points. It increases by 6 each purchase. Cryorines now give 5 marines. 1 SL (for the first one only), 1 medic, 1 engi, rest rifleman. # Explain why it's good for the game A bunch of extra specs running around is just too strong. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow balance: Cryorines now cost 6 points. It increases by 6 each purchase. balance: Cryorines now give 5 marines. 1 SL (for the first one only), 1 medic, 1 engi, rest rifleman. /:cl: --- code/datums/emergency_calls/cryo_marines.dm | 10 ++++++++-- code/modules/cm_tech/techs/marine/tier3/cryorine.dm | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/code/datums/emergency_calls/cryo_marines.dm b/code/datums/emergency_calls/cryo_marines.dm index e7dcba08ed61..7ed61852e9bf 100644 --- a/code/datums/emergency_calls/cryo_marines.dm +++ b/code/datums/emergency_calls/cryo_marines.dm @@ -1,13 +1,12 @@ -//whiskey outpost extra marines /datum/emergency_call/cryo_squad name = "Marine Cryo Reinforcements (Squad)" mob_max = 10 mob_min = 1 probability = 0 objectives = "Assist the USCM forces" - max_engineers = 4 + max_engineers = 2 max_medics = 2 name_of_spawn = /obj/effect/landmark/ert_spawns/distress_cryo shuttle_id = "" @@ -95,3 +94,10 @@ /obj/effect/landmark/ert_spawns/distress_cryo name = "Distress_Cryo" + +/datum/emergency_call/cryo_squad/tech + name = "Marine Cryo Reinforcements (Tech)" + mob_max = 5 + max_engineers = 1 + max_medics = 1 + max_heavies = 0 diff --git a/code/modules/cm_tech/techs/marine/tier3/cryorine.dm b/code/modules/cm_tech/techs/marine/tier3/cryorine.dm index 84361baa618f..56542e0000a6 100644 --- a/code/modules/cm_tech/techs/marine/tier3/cryorine.dm +++ b/code/modules/cm_tech/techs/marine/tier3/cryorine.dm @@ -7,8 +7,8 @@ announce_name = "ALMAYER SPECIAL ASSETS AUTHORIZED" announce_message = "Additional troops are being taken out of cryo." - required_points = 10 - increase_per_purchase = 5 + required_points = 6 + increase_per_purchase = 6 flags = TREE_FLAG_MARINE tier = /datum/tier/three @@ -23,4 +23,4 @@ /datum/tech/repeatable/cryomarine/on_unlock() . = ..() - SSticker.mode.get_specific_call("Marine Cryo Reinforcements (Squad)", FALSE, FALSE, announce_dispatch_message = FALSE) + SSticker.mode.get_specific_call("Marine Cryo Reinforcements (Tech)", FALSE, FALSE, announce_dispatch_message = FALSE) From 99da0ff46621ac0909638f92e1f894b02749d129 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:23:40 +0100 Subject: [PATCH 25/35] Automatic changelog for PR #4352 [ci skip] --- html/changelogs/AutoChangeLog-pr-4352.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4352.yml diff --git a/html/changelogs/AutoChangeLog-pr-4352.yml b/html/changelogs/AutoChangeLog-pr-4352.yml new file mode 100644 index 000000000000..17a65c454e91 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4352.yml @@ -0,0 +1,5 @@ +author: "Morrow" +delete-after: True +changes: + - balance: "Cryorines now cost 6 points. It increases by 6 each purchase." + - balance: "Cryorines now give 5 marines. 1 SL (for the first one only), 1 medic, 1 engi, rest rifleman." \ No newline at end of file From 0d44285392c7c4cd6d5b1c596084879760a04bc4 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Mon, 11 Sep 2023 06:49:17 +0100 Subject: [PATCH 26/35] fixes WY access to research (#4381) # About the pull request Bugs bad. Restores access to main area of research for WY research team. # Explain why it's good for the game I did an oops. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: Fixes WY access to Almayer Research. /:cl: --- code/game/machinery/doors/multi_tile.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 797a82bead76..6123d56b8f23 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -66,6 +66,7 @@ icon = 'icons/obj/structures/doors/Door2x1research.dmi' opacity = FALSE glass = 1 + req_one_access = list(ACCESS_MARINE_RESEARCH, ACCESS_WY_RESEARCH, ACCESS_WY_EXEC) /obj/structure/machinery/door/airlock/multi_tile/research/colony req_access = null @@ -178,7 +179,7 @@ /obj/structure/machinery/door/airlock/multi_tile/almayer/medidoor/research name = "\improper Research Airlock" - req_one_access = list(ACCESS_MARINE_RESEARCH) + req_one_access = list(ACCESS_MARINE_RESEARCH, ACCESS_WY_RESEARCH, ACCESS_WY_EXEC) masterkey_resist = TRUE /obj/structure/machinery/door/airlock/multi_tile/almayer/medidoor/research/colony From f69c6328609fff7c7b72135bd24d5530dd8cd022 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:38:41 +0100 Subject: [PATCH 27/35] Automatic changelog for PR #4381 [ci skip] --- html/changelogs/AutoChangeLog-pr-4381.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4381.yml diff --git a/html/changelogs/AutoChangeLog-pr-4381.yml b/html/changelogs/AutoChangeLog-pr-4381.yml new file mode 100644 index 000000000000..fe2c3cca9231 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4381.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - bugfix: "Fixes WY access to Almayer Research." \ No newline at end of file From bc1d21edd62cbcf7fb8d3f5de3db35d3d7820b41 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Mon, 11 Sep 2023 07:03:08 +0100 Subject: [PATCH 28/35] Project ARES: Functional Access Tickets (#4111) # About the pull request Adds fully functional access tickets to the APOLLO consoles. Updates required access to core areas to reflect this. # Explain why it's good for the game Finally controls who can access the place. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Finally adds fully functional access request tickets to APOLLO console for entry to AI core. /:cl: --------- Co-authored-by: Benedict --- code/__DEFINES/ARES.dm | 22 +- code/game/machinery/ARES/ARES.dm | 6 - code/game/machinery/ARES/ARES_procs.dm | 226 ++++++++++-------- code/game/machinery/ARES/ARES_records.dm | 14 ++ .../game/machinery/ARES/ARES_step_triggers.dm | 13 +- maps/map_files/USS_Almayer/USS_Almayer.dmm | 45 ++-- tgui/packages/tgui/interfaces/WorkingJoe.js | 204 ++++++++-------- 7 files changed, 280 insertions(+), 250 deletions(-) diff --git a/code/__DEFINES/ARES.dm b/code/__DEFINES/ARES.dm index ec84a6ab5992..405070218741 100644 --- a/code/__DEFINES/ARES.dm +++ b/code/__DEFINES/ARES.dm @@ -34,13 +34,14 @@ /// Logged in the security updates #define ARES_LOG_SECURITY 2 -/// Access levels specifically for Working Joe management console -#define APOLLO_ACCESS_REQUEST 0 -#define APOLLO_ACCESS_REPORTER 1 -#define APOLLO_ACCESS_TEMP 2 -#define APOLLO_ACCESS_AUTHED 3 -#define APOLLO_ACCESS_JOE 4 -#define APOLLO_ACCESS_DEBUG 5 +// Access levels specifically for Working Joe management console +#define APOLLO_ACCESS_LOGOUT 0 +#define APOLLO_ACCESS_REQUEST 1 +#define APOLLO_ACCESS_REPORTER 2 +#define APOLLO_ACCESS_TEMP 3 +#define APOLLO_ACCESS_AUTHED 4 +#define APOLLO_ACCESS_JOE 5 +#define APOLLO_ACCESS_DEBUG 6 /// Ticket statuses, both for Access and Maintenance /// Pending assignment/rejection @@ -54,6 +55,13 @@ /// Completed by WJs #define TICKET_COMPLETED "completed" +/// Granted Access Ticket +#define TICKET_GRANTED "granted" +/// Revoked Access Ticket +#define TICKET_REVOKED "revoked" +/// Self-Returned Access Ticket +#define TICKET_RETURNED "returned" + /// Checks for if buttons can be used, these may yet be removed and internalised to the UI programming #define TICKET_OPEN "OPEN" #define TICKET_CLOSED "CLOSED" diff --git a/code/game/machinery/ARES/ARES.dm b/code/game/machinery/ARES/ARES.dm index 4bfd5b98ad26..166c03d98cab 100644 --- a/code/game/machinery/ARES/ARES.dm +++ b/code/game/machinery/ARES/ARES.dm @@ -206,12 +206,6 @@ var/list/login_list = list() - /// If this is used to create AI Core access tickets - var/ticket_console = FALSE - var/obj/item/card/id/authenticator_id - var/ticket_authenticated = FALSE - var/obj/item/card/id/target_id - /obj/structure/machinery/computer/working_joe/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) if(link && !override) return FALSE diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm index bd3fa6536be0..2ac662a91b15 100644 --- a/code/game/machinery/ARES/ARES_procs.dm +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -32,6 +32,8 @@ GLOBAL_LIST_INIT(maintenance_categories, list( /// Working Joe stuff var/list/tickets_maintenance = list() var/list/tickets_access = list() + var/list/waiting_ids = list() + var/list/active_ids = list() /datum/ares_link/Destroy() for(var/obj/structure/machinery/ares/link in linked_systems) @@ -623,100 +625,22 @@ GLOBAL_LIST_INIT(maintenance_categories, list( /obj/structure/machinery/computer/working_joe/ares_auth_to_text(access_level) switch(access_level) - if(APOLLO_ACCESS_REQUEST)//0 + if(APOLLO_ACCESS_LOGOUT)//0 + return "Logged Out" + if(APOLLO_ACCESS_REQUEST)//1 return "Unauthorized Personnel" - if(APOLLO_ACCESS_REPORTER)//1 + if(APOLLO_ACCESS_REPORTER)//2 return "Validated Incident Reporter" - if(APOLLO_ACCESS_TEMP)//2 + if(APOLLO_ACCESS_TEMP)//3 return "Authorized Visitor" - if(APOLLO_ACCESS_AUTHED)//3 + if(APOLLO_ACCESS_AUTHED)//4 return "Certified Personnel" - if(APOLLO_ACCESS_JOE)//4 + if(APOLLO_ACCESS_JOE)//5 return "Working Joe" - if(APOLLO_ACCESS_DEBUG)//5 + if(APOLLO_ACCESS_DEBUG)//6 return "AI Service Technician" // ------ Maintenance Controller UI ------ // -/obj/structure/machinery/computer/working_joe/verb/eject_id() - set category = "Object" - set name = "Eject ID Card" - set src in oview(1) - - if(!usr || usr.stat || usr.lying) - return FALSE - - if(authenticator_id) - authenticator_id.loc = get_turf(src) - if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) - usr.put_in_hands(authenticator_id) - if(operable()) // Powered. Console can response. - visible_message("[SPAN_BOLD("[src]")] states, \"AUTH LOGOUT: Session end confirmed.\"") - else - to_chat(usr, "You remove [authenticator_id] from [src].") - ticket_authenticated = FALSE // No card - no access - authenticator_id = null - - else if(target_id) - target_id.loc = get_turf(src) - if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) - usr.put_in_hands(target_id) - else - to_chat(usr, "You remove [target_id] from [src].") - target_id = null - - else - to_chat(usr, "There is nothing to remove from the console.") - return - -/obj/structure/machinery/computer/working_joe/attackby(obj/object, mob/user) - if(istype(object, /obj/item/card/id)) - if(!ticket_console) - to_chat(user, SPAN_WARNING("This console doesn't have an ID port!")) - return FALSE - if(!operable()) - to_chat(user, SPAN_NOTICE("You try to insert [object] but [src] remains silent.")) - return FALSE - var/obj/item/card/id/idcard = object - if((idcard.assignment == JOB_WORKING_JOE) || (ACCESS_ARES_DEBUG in idcard.access)) - if(!authenticator_id) - if(user.drop_held_item()) - object.forceMove(src) - authenticator_id = object - authenticate(authenticator_id) - else if(!target_id) - if(user.drop_held_item()) - object.forceMove(src) - target_id = object - else - to_chat(user, "Both slots are full already. Remove a card first.") - return FALSE - else - if(!target_id) - if(user.drop_held_item()) - object.forceMove(src) - target_id = object - else - to_chat(user, "Both slots are full already. Remove a card first.") - return FALSE - else - ..() - -/obj/structure/machinery/computer/working_joe/proc/authenticate(obj/item/card/id/id_card) - if(!id_card) - visible_message("[SPAN_BOLD("[src]")] states, \"AUTH ERROR: Authenticator card is missing!\"") - return FALSE - - if((ACCESS_MARINE_AI in id_card.access) || (ACCESS_ARES_DEBUG in id_card.access)) - ticket_authenticated = TRUE - visible_message("[SPAN_BOLD("[src]")] states, \"AUTH LOGIN: Welcome, [id_card.registered_name]. Access granted.\"") - return TRUE - - visible_message("[SPAN_BOLD("[src]")] states, \"AUTH ERROR: Access denied.\"") - return FALSE - - - - /obj/structure/machinery/computer/working_joe/attack_hand(mob/user as mob) if(..() || !allowed(usr) || inoperable()) return FALSE @@ -733,7 +657,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list( /obj/structure/machinery/computer/working_joe/ui_data(mob/user) var/list/data = list() - data["ticket_console"] = ticket_console data["current_menu"] = current_menu data["last_page"] = last_menu @@ -751,9 +674,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list( data["apollo_log"] = list() data["apollo_log"] += link.apollo_log - data["authenticated"] = ticket_authenticated - - var/list/logged_maintenance = list() for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance) if(!istype(maint_ticket)) @@ -778,10 +698,11 @@ GLOBAL_LIST_INIT(maintenance_categories, list( data["maintenance_tickets"] = logged_maintenance var/list/logged_access = list() + var/list/requesting_access = list() for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access) var/lock_status = TICKET_OPEN switch(access_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) + if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) lock_status = TICKET_CLOSED var/list/current_ticket = list() @@ -796,8 +717,10 @@ GLOBAL_LIST_INIT(maintenance_categories, list( current_ticket["lock_status"] = lock_status current_ticket["ref"] = "\ref[access_ticket]" logged_access += list(current_ticket) - data["access_tickets"] = logged_access + if(lock_status == TICKET_OPEN) + requesting_access += access_ticket.ticket_name + data["access_tickets"] = logged_access return data @@ -867,9 +790,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list( if("page_request") last_menu = current_menu current_menu = "access_requests" - if("page_returns") - last_menu = current_menu - current_menu = "access_returns" if("page_report") last_menu = current_menu current_menu = "maint_reports" @@ -966,28 +886,122 @@ GLOBAL_LIST_INIT(maintenance_categories, list( return TRUE if("new_access") - var/priority_report = FALSE - var/ticket_holder = tgui_input_text(operator, "Who is the ticket for?", "Ticket Holder", encode = FALSE) + var/obj/item/card/id/idcard = operator.get_active_hand() + var/has_id = FALSE + if(istype(idcard)) + has_id = TRUE + else if(operator.wear_id) + idcard = operator.wear_id + if(istype(idcard)) + has_id = TRUE + if(!has_id) + to_chat(operator, SPAN_WARNING("You require an ID card to request an access ticket!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(idcard.registered_name != last_login) + to_chat(operator, SPAN_WARNING("This ID card does not match the active login!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + var/ticket_holder = last_login if(!ticket_holder) return FALSE var/details = tgui_input_text(operator, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE) if(!details) return FALSE - if(authentication >= APOLLO_ACCESS_AUTHED) - var/is_priority = tgui_alert(operator, "Is this a priority request?", "Priority designation", list("Yes", "No")) - if(is_priority == "Yes") - priority_report = TRUE - - var/confirm = alert(operator, "Please confirm the submission of your access ticket request. \n\n Priority: [priority_report ? "Yes" : "No"] \n Holder: '[ticket_holder]' \n Details: '[details]' \n\n Is this correct?", "Confirmation", "Yes", "No") + var/confirm = alert(operator, "Please confirm the submission of your access ticket request. \n\nHolder: '[ticket_holder]' \n Details: '[details]' \n\n Is this correct?", "Confirmation", "Yes", "No") if(confirm != "Yes" || !link) return FALSE - var/datum/ares_ticket/access/access_ticket = new(last_login, ticket_holder, details, priority_report) + var/datum/ares_ticket/access/access_ticket = new(last_login, ticket_holder, details, FALSE, idcard.registered_gid) + link.waiting_ids += idcard link.tickets_access += access_ticket - if(priority_report) - ares_apollo_talk("Priority Access Request: [ticket_holder] - ID [access_ticket.ticket_id]. Seek and resolve.") log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(operator)] as [last_login] with Holder '[ticket_holder]' and Details of '[details]'.") + message_admins(SPAN_STAFF_IC("[key_name_admin(operator)] created a new ARES Access Ticket."), 1) return TRUE + if("return_access") + playsound = FALSE + var/datum/ares_ticket/access/access_ticket + for(var/datum/ares_ticket/access/possible_ticket in link.tickets_access) + if(possible_ticket.ticket_status != TICKET_GRANTED) + continue + if(possible_ticket.ticket_name != last_login) + continue + access_ticket = possible_ticket + break + + for(var/obj/item/card/id/identification in link.active_ids) + if(!istype(identification)) + continue + if(identification.registered_gid != access_ticket.user_id_num) + continue + + access_ticket.ticket_status = TICKET_RETURNED + identification.access -= ACCESS_MARINE_AI_TEMP + identification.modification_log += "Temporary AI Access self-returned by [key_name(operator)]." + + to_chat(operator, SPAN_NOTICE("Temporary Access Ticket surrendered.")) + playsound(src, 'sound/machines/chime.ogg', 15, 1) + ares_apollo_talk("[last_login] surrendered their access ticket.") + + authentication = get_ares_access(identification) + if(authentication) + login_list += "[last_login] at [worldtime2text()], Surrendered Temporary Access Ticket." + return TRUE + + to_chat(operator, SPAN_WARNING("This ID card does not have an access ticket!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + if("auth_access") + playsound = FALSE + var/datum/ares_ticket/access/access_ticket = locate(params["ticket"]) + if(!access_ticket) + return FALSE + for(var/obj/item/card/id/identification in link.waiting_ids) + if(!istype(identification)) + continue + if(identification.registered_gid != access_ticket.user_id_num) + continue + identification.handle_ares_access(last_login, operator) + access_ticket.ticket_status = TICKET_GRANTED + playsound(src, 'sound/machines/chime.ogg', 15, 1) + return TRUE + for(var/obj/item/card/id/identification in link.active_ids) + if(!istype(identification)) + continue + if(identification.registered_gid != access_ticket.user_id_num) + continue + identification.handle_ares_access(last_login, operator) + access_ticket.ticket_status = TICKET_REVOKED + playsound(src, 'sound/machines/chime.ogg', 15, 1) + return TRUE + return FALSE + if(playsound) playsound(src, "keyboard_alt", 15, 1) + +/obj/item/card/id/proc/handle_ares_access(logged_in, mob/user) + var/announce_text = "[logged_in] revoked core access from [registered_name]'s ID card." + var/operator = key_name(user) + var/datum/ares_link/link = GLOB.ares_link + if(logged_in == MAIN_AI_SYSTEM) + if(!user) + operator = "[MAIN_AI_SYSTEM] (Sensor Trip)" + else + operator = "[user.ckey]/([MAIN_AI_SYSTEM])" + if(ACCESS_MARINE_AI_TEMP in access) + access -= ACCESS_MARINE_AI_TEMP + link.active_ids -= src + modification_log += "Temporary AI access revoked by [operator]" + to_chat(user, SPAN_NOTICE("Access revoked from [registered_name].")) + else + access += ACCESS_MARINE_AI_TEMP + modification_log += "Temporary AI access granted by [operator]" + announce_text = "[logged_in] granted core access to [registered_name]'s ID card." + to_chat(user, SPAN_NOTICE("Access granted to [registered_name].")) + link.waiting_ids -= src + link.active_ids += src + ares_apollo_talk(announce_text) + return TRUE diff --git a/code/game/machinery/ARES/ARES_records.dm b/code/game/machinery/ARES/ARES_records.dm index 4e2b479e71a2..65fc2b1aa762 100644 --- a/code/game/machinery/ARES/ARES_records.dm +++ b/code/game/machinery/ARES/ARES_records.dm @@ -107,3 +107,17 @@ /datum/ares_ticket/access ticket_type = ARES_RECORD_ACCESS + var/user_id_num + +/datum/ares_ticket/access/New(user, name, details, priority, global_id_num) + var/ref_holder = "\ref[src]" + var/pos = length(ref_holder) + var/new_id = "#[copytext("\ref[src]", pos - 4, pos)]" + + ticket_time = worldtime2text() + ticket_submitter = user + ticket_details = details + ticket_name = name + ticket_priority = priority + ticket_id = new_id + user_id_num = global_id_num diff --git a/code/game/machinery/ARES/ARES_step_triggers.dm b/code/game/machinery/ARES/ARES_step_triggers.dm index a50aa40abd90..335a877f9f25 100644 --- a/code/game/machinery/ARES/ARES_step_triggers.dm +++ b/code/game/machinery/ARES/ARES_step_triggers.dm @@ -163,7 +163,18 @@ to_chat(passer, SPAN_BOLDWARNING("You hear a harsh buzzing sound as you cross the threshold!")) ares_apollo_talk(broadcast_message) if(idcard) - idcard.access -= ACCESS_MARINE_AI_TEMP + /// Removes the access from the ID and updates the ID's modification log. + for(var/obj/item/card/id/identification in link.active_ids) + if(identification != idcard) + continue + idcard.access -= ACCESS_MARINE_AI_TEMP + link.active_ids -= idcard + idcard.modification_log += "Temporary AI access revoked by [MAIN_AI_SYSTEM]" + /// Updates the related access ticket. + for(var/datum/ares_ticket/access/access_ticket in link.tickets_access) + if(access_ticket.user_id_num != idcard.registered_gid) + continue + access_ticket.ticket_status = TICKET_REVOKED COOLDOWN_START(src, sensor_cooldown, COOLDOWN_ARES_ACCESS_CONTROL) if(alert_id && link) for(var/obj/effect/step_trigger/ares_alert/sensor in link.linked_alerts) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 085e7c14393e..8f14dc4a1223 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -5830,7 +5830,7 @@ name = "ARES Core Access"; pixel_x = -24; pixel_y = 24; - req_one_access_txt = "1;200;90;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -11045,7 +11045,7 @@ name = "ARES Chamber Lockdown"; pixel_x = 24; pixel_y = -8; - req_one_access_txt = "1;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/door_control{ id = "ARES Railing"; @@ -21863,7 +21863,7 @@ name = "ARES Core Lockdown"; pixel_x = 24; pixel_y = -8; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ dir = 8; @@ -36289,7 +36289,7 @@ name = "ARES Operations Shutter"; pixel_x = 24; pixel_y = -8; - req_one_access_txt = "1;200;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ dir = 4; @@ -36872,7 +36872,7 @@ name = "ARES Operations Shutter"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "1;200;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -37292,8 +37292,7 @@ /obj/structure/machinery/computer/working_joe{ dir = 8; pixel_x = 17; - pixel_y = -6; - ticket_console = 1 + pixel_y = -6 }, /obj/item/storage/box/ids{ pixel_x = -4 @@ -38053,7 +38052,7 @@ name = "Working Joe Cryogenics Lockdown"; pixel_x = 24; pixel_y = 8; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -38591,7 +38590,7 @@ name = "ARES Chamber Lockdown"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "1;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/door/poddoor/railing{ closed_layer = 4.1; @@ -38660,7 +38659,7 @@ name = "ARES Chamber Lockdown"; pixel_x = 24; pixel_y = 8; - req_one_access_txt = "1;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/door/poddoor/railing{ closed_layer = 4; @@ -42230,7 +42229,7 @@ name = "ARES Chamber Lockdown"; pixel_x = -24; pixel_y = 8; - req_one_access_txt = "1;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/door/poddoor/railing{ closed_layer = 4; @@ -44935,7 +44934,7 @@ id = "ARES StairsUpper"; name = "ARES Core Access"; pixel_x = 24; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -47063,7 +47062,7 @@ name = "ARES Core Lockdown"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ dir = 8; @@ -48859,7 +48858,7 @@ name = "ARES Operations Shutter"; pixel_x = 24; pixel_y = -8; - req_one_access_txt = "1;200;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -55281,8 +55280,7 @@ }, /obj/structure/machinery/computer/working_joe{ dir = 8; - pixel_x = 17; - ticket_console = 1 + pixel_x = 17 }, /obj/structure/sign/safety/laser{ pixel_y = 24 @@ -56821,7 +56819,7 @@ id = "ARES StairsUpper"; name = "ARES Core Access"; pixel_x = -24; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -56880,7 +56878,7 @@ name = "ARES Core Lockdown"; pixel_x = -24; pixel_y = 8; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ dir = 4; @@ -60712,7 +60710,7 @@ name = "ARES Operations Shutter"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "1;200;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ dir = 8; @@ -73757,8 +73755,7 @@ }, /obj/structure/machinery/computer/working_joe{ dir = 4; - pixel_x = -17; - ticket_console = 1 + pixel_x = -17 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -75081,7 +75078,7 @@ name = "Working Joe Cryogenics Lockdown"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "91;92" }, /obj/effect/landmark/late_join/working_joe, /obj/effect/landmark/start/working_joe, @@ -77384,7 +77381,7 @@ name = "ARES Core Lockdown"; pixel_x = 24; pixel_y = 8; - req_one_access_txt = "19;200;90;91;92" + req_one_access_txt = "90;91;92" }, /obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer/no_build{ @@ -78686,7 +78683,7 @@ name = "ARES Core Access"; pixel_x = 24; pixel_y = 24; - req_one_access_txt = "1;200;90;91;92" + req_one_access_txt = "90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" diff --git a/tgui/packages/tgui/interfaces/WorkingJoe.js b/tgui/packages/tgui/interfaces/WorkingJoe.js index ab8e4783ef41..6881d731db1b 100644 --- a/tgui/packages/tgui/interfaces/WorkingJoe.js +++ b/tgui/packages/tgui/interfaces/WorkingJoe.js @@ -10,8 +10,8 @@ const PAGES = { 'maint_reports': () => MaintReports, 'maint_claim': () => MaintManagement, 'access_requests': () => AccessRequests, - 'access_returns': () => AccessReturns, 'access_tickets': () => AccessTickets, + 'id_access': () => AccessID, }; export const WorkingJoe = (props, context) => { const { data } = useBackend(context); @@ -63,14 +63,12 @@ const Login = (props, context) => { const MainMenu = (props, context) => { const { data, act } = useBackend(context); - const { - logged_in, - access_text, - last_page, - current_menu, - access_level, - ticket_console, - } = data; + const { logged_in, access_text, last_page, current_menu, access_level } = + data; + let can_request_access = 'Yes'; + if (access_level > 2) { + can_request_access = 'No'; + } return ( <> @@ -112,12 +110,11 @@ const MainMenu = (props, context) => {

Navigation Menu

-

Request Submission

- {access_level <= 1 && ( + {can_request_access === 'Yes' && (
- -
-

Return Access

-
- - ); -}; const AccessTickets = (props, context) => { const { data, act } = useBackend(context); @@ -880,7 +838,6 @@ const AccessTickets = (props, context) => {

Access Ticket Management

- {!!access_tickets.length && ( { Time - - Category + + Submitter + + + For - Details + Reason )} @@ -909,12 +869,40 @@ const AccessTickets = (props, context) => { } else if (ticket.lock_status === 'CLOSED') { can_claim = 'No'; } - let can_mark = 'Yes'; + let can_update = 'Yes'; if (ticket.assignee !== logged_in) { - can_mark = 'No'; + can_update = 'No'; } else if (ticket.lock_status === 'CLOSED') { - can_mark = 'No'; + can_update = 'No'; + } + let view_status = 'Ticket is pending assignment.'; + let view_icon = 'circle-question'; + let update_tooltip = 'Update Access'; + if (ticket.status === 'assigned') { + view_status = 'Ticket is assigned.'; + view_icon = 'circle-plus'; + update_tooltip = 'Grant Access'; + } else if (ticket.status === 'rejected') { + view_status = 'Ticket has been rejected.'; + view_icon = 'circle-xmark'; + } else if (ticket.status === 'cancelled') { + view_status = 'Ticket was cancelled by reporter.'; + view_icon = 'circle-stop'; + } else if (ticket.status === 'granted') { + view_status = 'Access ticket has been granted.'; + view_icon = 'circle-check'; + update_tooltip = 'Revoke Access'; + } else if (ticket.status === 'revoked') { + view_status = 'Access ticket has been revoked.'; + view_icon = 'circle-minus'; + update_tooltip = 'Access revoked. No further changes possible.'; + } else if (ticket.status === 'returned') { + view_status = 'Access ticket has been returned.'; + view_icon = 'circle-minus'; + update_tooltip = + 'Access self-returned. No further changes possible.'; } + return ( {!!ticket.priority_status && ( @@ -930,13 +918,17 @@ const AccessTickets = (props, context) => { {ticket.time} - - {ticket.category} + + {ticket.submitter} + + + {ticket.title} {ticket.details} +
-

AntiAir Control Logs

- {!!aa_adjustments.length && ( +

Flight Control Logs

+ {!!records_flight.length && ( { Time - + User - - Adjustment + + Details )} - {aa_adjustments.map((record, i) => { + {records_flight.map((record, i) => { return ( {record.time} - + {record.user} - + {record.details} + + act('delete_record', { record: record.ref })} + /> + ); })} From 51463b15e36085a04671781d156c9db78e5fb3c7 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 11 Sep 2023 10:37:43 +0100 Subject: [PATCH 35/35] Automatic changelog for PR #4225 [ci skip] --- html/changelogs/AutoChangeLog-pr-4225.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4225.yml diff --git a/html/changelogs/AutoChangeLog-pr-4225.yml b/html/changelogs/AutoChangeLog-pr-4225.yml new file mode 100644 index 000000000000..dec1d322ec9b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4225.yml @@ -0,0 +1,7 @@ +author: "realforest2001" +delete-after: True +changes: + - bugfix: "Fixes ARES Security Logs and stops ARES logs recording mob datums instead of names." + - rscadd: "Moves AntiAir records to Security Logs." + - rscadd: "Adds Flight Records to ARES Interface, detailing launches and setting changes. Does not include CAS details." + - code_imp: "Changes ARES log procs from using 'user' to 'user_name' to identify it should be the string rather than mob datum." \ No newline at end of file