From 6916730ecab0461857153e9baad5d6bafa9fba98 Mon Sep 17 00:00:00 2001 From: Jacquerel Date: Thu, 15 Jan 2026 20:45:43 +0000 Subject: [PATCH] Ballista adjustments (#94724) Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- .../components/crafting/ranged_weapon.dm | 4 +- .../components/projectile_instance_drop.dm | 50 ++ .../objects/items/weaponry/melee/baton.dm | 1 - .../cannons/mounted_guns/mounted_gun.dm | 490 ++++++++++-------- .../projectile/bullets/cannonball.dm | 72 +++ .../projectiles/projectile/bullets/rifle.dm | 40 -- icons/obj/weapons/cannons.dmi | Bin 28895 -> 29132 bytes icons/obj/weapons/guns/projectiles.dmi | Bin 147060 -> 147338 bytes tgstation.dme | 1 + 9 files changed, 401 insertions(+), 257 deletions(-) create mode 100644 code/datums/components/projectile_instance_drop.dm diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index c78bf9ff708..86cf1d3b151 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -328,7 +328,7 @@ category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY -/datum/crafting_recipe/Ratvarian_Repeater +/datum/crafting_recipe/ratvarian_repeater name = "Emplaced Ratvarian Repeater" tool_behaviors = list(TOOL_SCREWDRIVER,TOOL_WRENCH) result = /obj/structure/mounted_gun/ratvarian_repeater @@ -344,7 +344,7 @@ category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY -/datum/crafting_recipe/Detached_Ratvarian_Repeater +/datum/crafting_recipe/detached_ratvarian_repeater name = "Iconoclast's Repeater" tool_behaviors = list(TOOL_WELDER) result = /obj/item/gun/energy/laser/musket/repeater diff --git a/code/datums/components/projectile_instance_drop.dm b/code/datums/components/projectile_instance_drop.dm new file mode 100644 index 00000000000..f3e757ed4f2 --- /dev/null +++ b/code/datums/components/projectile_instance_drop.dm @@ -0,0 +1,50 @@ +/// Similar to the projectile drop element but holds an instance of an atom instead +/datum/component/projectile_instance_drop + dupe_mode = COMPONENT_DUPE_ALLOWED + var/atom/movable/dropped_atom + +/datum/component/projectile_instance_drop/Initialize(atom/movable/dropped_atom) + if(!isprojectile(parent)) + return COMPONENT_INCOMPATIBLE + if (!dropped_atom) + stack_trace("[type] created with no atom to drop.") + return COMPONENT_INCOMPATIBLE + src.dropped_atom = dropped_atom + +/datum/component/projectile_instance_drop/RegisterWithParent() + dropped_atom.forceMove(parent) + RegisterSignal(parent, COMSIG_PROJECTILE_RANGE_OUT, PROC_REF(drop_item)) + RegisterSignal(parent, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_projectile_hit)) + RegisterSignals(dropped_atom, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING), PROC_REF(on_instance_left)) + +/datum/component/projectile_instance_drop/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_PROJECTILE_RANGE_OUT, COMSIG_PROJECTILE_SELF_ON_HIT)) + if (dropped_atom) + UnregisterSignal(dropped_atom, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) + QDEL_NULL(dropped_atom) // If it left our atom's contents then this is a null reference, if it didn't then it's fucked I guess + +/datum/component/projectile_instance_drop/Destroy(force) + dropped_atom = null + return ..() + +/// When we hit something check if we should hit the floor +/datum/component/projectile_instance_drop/proc/on_projectile_hit(obj/projectile/source, atom/movable/firer, atom/target, angle, hit_limb_zone, blocked, pierce_hit) + SIGNAL_HANDLER + if (blocked < 100 && !pierce_hit) + drop_item(source) + +/// Drop item to ground +/datum/component/projectile_instance_drop/proc/drop_item(obj/projectile/source) + SIGNAL_HANDLER + var/turf/drop_turf = source.drop_location() + var/atom/movable/dropping = dropped_atom + dropping.forceMove(drop_turf) + if (isitem(dropping)) + var/obj/item/item_dropped = dropping + item_dropped.do_drop_animation(drop_turf) + +/// If our projectile exits our contents then remove the component +/datum/component/projectile_instance_drop/proc/on_instance_left() + SIGNAL_HANDLER + dropped_atom = null + qdel(src) diff --git a/code/game/objects/items/weaponry/melee/baton.dm b/code/game/objects/items/weaponry/melee/baton.dm index 5f1c330ca4e..639e3d2f020 100644 --- a/code/game/objects/items/weaponry/melee/baton.dm +++ b/code/game/objects/items/weaponry/melee/baton.dm @@ -237,7 +237,6 @@ /// Wrapper for calling "stun()" and doing relevant vfx/sfx /obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, clumsy = FALSE) - PROTECTED_PROC(TRUE) COOLDOWN_START(src, cooldown_check, cooldown) if(on_stun_sound) playsound(src, on_stun_sound, on_stun_volume, TRUE, -1) diff --git a/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm b/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm index 4fb12092708..3d7b9b0136f 100644 --- a/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm +++ b/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm @@ -8,52 +8,70 @@ anchored = FALSE icon = 'icons/obj/weapons/cannons.dmi' icon_state = "falconet_patina" - var/icon_state_base = "falconet_patina" - var/icon_state_loaded = "falconet_patina" - var/icon_state_fire = "falconet_patina_fire" + base_icon_state = "falconet_patina" max_integrity = 300 - ///whether the cannon can be unwrenched from the ground. Anchorable_cannon equivalent. + /// Suffix added to base icon state when firing + var/fire_suffix = "_fire" + /// whether the cannon can be unwrenched from the ground. Anchorable_cannon equivalent. var/anchorable_gun = TRUE - /// does this thing need ammo at all or does it just make ammo? - var/uses_ammo = TRUE - ///Max shots per firing of the gun. + /// Max shots per firing of the gun. var/max_shots_per_fire = 1 - ///Delay it takes to load the gun. Set to 0 if none. - var/load_delay = 0 - ///Message displayed when loading gun + /// Delay it takes to load the gun. Set to 0 if none. + var/load_delay = 0 SECONDS + /// Message displayed when loading gun var/loading_message = "gun loaded" - ///Shots currently loaded. Should never be more than max_shots_per_fire. + /// Shots currently loaded. Should never be more than max_shots_per_fire. var/shots_in_gun = 1 - ///shots added to gun, per piece of ammo loaded. + /// Shots added to gun, per piece of ammo loaded. var/shots_per_load = 1 - ///Does it have an alternative ammo type it can uses - var/has_alt_ammo = FALSE - //Is it loaded with said alternative ammo? - var/use_alt_ammo = FALSE - ///Accepted "ammo" type - var/obj/item/ammo_type = /obj/item/ammo_casing/strilka310 - ///Alternative ammo types, for extra effects! - var/obj/item/alt_ammo_type = /obj/item/ammo_casing/strilka310 - ///Projectile from said gun. Doesnt automatically inherit said ammo's projectile in case you wanted to make a gun that shoots floor tiles or something. - var/obj/projectile/projectile_type = /obj/projectile/bullet/strilka310 - ///Projectile from said gun. Doesnt automatically inherit said ammo's projectile in case you wanted to make a gun that shoots floor tiles or something. - var/obj/projectile/alt_projectile_type = /obj/projectile/bullet/strilka310 - ///If the gun has anything in it. - var/loaded_gun = TRUE - ///If the gun is currently loaded with its maximum capacity. - var/fully_loaded_gun = TRUE - ///delay in firing the gun after lighting + /// Things you can load into the gun + var/list/accepted_ammo_types = list(/obj/item/ammo_casing/strilka310) + /// Projectile to fire + var/projectile_type = /obj/projectile/bullet/strilka310 + /// Delay in firing the gun after lighting var/fire_delay = 5 DECISECONDS - ///Delay between shots + /// Delay between shots var/shot_delay = 3 DECISECONDS - ///If the gun shakes the camera when firing + /// If the gun shakes the camera when firing var/firing_shakes_camera = TRUE - ///sound of firing for all but last shot + /// Sound of firing for all but last shot var/fire_sound = 'sound/items/weapons/gun/general/mountedgun.ogg' - ///sound of firing for last shot + /// Sound of firing for last shot var/last_fire_sound = 'sound/items/weapons/gun/general/mountedgunend.ogg' - ///So you can't reload it mid-firing + /// So you can't reload it mid-firing var/is_firing = FALSE + /// How many degrees to vary fire angle if the gun is not anchored + var/unanchored_variance = 20 + /// What items to spawn when destroyed + var/list/debris = list( + /obj/item/stack/sheet/iron = 4, + /obj/item/stack/rods = 3, + /obj/item/assembly/igniter = 1, + ) + +/obj/structure/mounted_gun/Initialize(mapload) + . = ..() + AddElement(/datum/element/simple_rotation) + register_context() + +/obj/structure/mounted_gun/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(!isliving(user)) + return + + if(anchorable_gun && held_item?.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = anchored ? "Unanchor" : "Anchor" + + if(is_type_in_list(held_item, accepted_ammo_types)) + context[SCREENTIP_CONTEXT_LMB] = "Load weapon" + + if (!held_item) + context[SCREENTIP_CONTEXT_LMB] = "Fire weapon" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/structure/mounted_gun/update_icon_state() + . = ..() + icon_state = base_icon_state + (is_firing ? fire_suffix : "") /obj/structure/mounted_gun/wrench_act(mob/living/user, obj/item/tool) . = ..() @@ -63,88 +81,138 @@ return ITEM_INTERACT_SUCCESS ///Covers Reloading and lighting of the gun -/obj/structure/mounted_gun/attackby(obj/item/ammo_casing/used_item, mob/user, params) +/obj/structure/mounted_gun/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(user.combat_mode || !is_type_in_list(tool, accepted_ammo_types)) //see if the gun needs to be loaded in some way. + return NONE + if(is_firing) - balloon_alert(user, "gun is firing!") - return - if(istype(used_item, ammo_type) && (uses_ammo == TRUE)) //see if the gun needs to be loaded in some way. - if(fully_loaded_gun) - balloon_alert(user, "already fully loaded!") - return + balloon_alert(user, "gun firing!") + return ITEM_INTERACT_BLOCKING - if(load_delay > 0 && !do_after(user, load_delay, target = src)) - return + var/fully_loaded = shots_in_gun >= max_shots_per_fire + if(fully_loaded) + balloon_alert(user, "already loaded!") + return ITEM_INTERACT_BLOCKING - shots_in_gun = shots_in_gun + shots_per_load //Add one to the shots in the gun - balloon_alert(user, loading_message) - loaded_gun = TRUE // Make sure it registers theres ammo in there, so it can fire. - QDEL_NULL(used_item) - if(shots_in_gun >= max_shots_per_fire) - shots_in_gun = max_shots_per_fire // in case of somehow firing only some of a guns shots, and reloading, you still cant get above the maximum ammo size. - fully_loaded_gun = TRUE //So you cant load extra. - icon_state = icon_state_loaded - return + if (load_delay > 0) + user.visible_message(span_warning("[user] starts loading [src].")) + if(!do_after(user, load_delay, target = src)) + return ITEM_INTERACT_BLOCKING + + shots_in_gun = min(shots_in_gun + shots_per_load, max_shots_per_fire) + balloon_alert(user, loading_message) + QDEL_NULL(tool) + return ITEM_INTERACT_SUCCESS /obj/structure/mounted_gun/attack_hand(mob/living/user, list/modifiers) - if(is_firing) - balloon_alert(user, "gun is firing!") + . = ..() + if (.) return - user.log_message("fired a mounted gun", LOG_ATTACK) - addtimer(CALLBACK(src, PROC_REF(fire)), fire_delay) //uses fire proc as shown below to shoot the gun - return + if (is_firing) + balloon_alert(user, "gun firing!") + return + try_firing(user) -/obj/structure/mounted_gun/proc/fire() - if (!loaded_gun) - balloon_alert_to_viewers("gun is not loaded!","",2) +/// Start firing the weapon on interaction +/obj/structure/mounted_gun/proc/try_firing(mob/living/user) + user.log_message("fired a [initial(name)]", LOG_ATTACK) + addtimer(CALLBACK(src, PROC_REF(fire_sequence), user), fire_delay) + +/// Loop firing until we are done +/obj/structure/mounted_gun/proc/fire_sequence(mob/living/user) + if (!shots_in_gun) + balloon_alert(user, "not loaded!") return + is_firing = TRUE - for(var/times_fired = 1, times_fired <= shots_in_gun, times_fired++) //The normal DM for loop structure since the times it has fired is changing in the loop itself. - for(var/mob/shaken_mob in urange(10, src)) - if(shaken_mob.stat == CONSCIOUS && firing_shakes_camera == TRUE) //is the mob awake to feel the shaking? - shake_camera(shaken_mob, 3, 1) - icon_state = icon_state_fire - if(loaded_gun) + update_appearance(UPDATE_ICON_STATE) - if (times_fired < shots_in_gun) - playsound(src, fire_sound, 50, FALSE, 5) - else - playsound(src, last_fire_sound, 50, TRUE, 5) //for the empty fire sound + var/delay = 0 + while (shots_in_gun > 0) + shots_in_gun-- + addtimer(CALLBACK(src, PROC_REF(fire_loop), user), delay, TIMER_DELETE_ME) + if (shots_in_gun == 0) + addtimer(CALLBACK(src, PROC_REF(finish_firing)), delay, TIMER_DELETE_ME) + else + delay += time_until_next_shot() - var/obj/projectile/fired_projectile = (use_alt_ammo) ? new alt_projectile_type(get_turf(src)) : new projectile_type(get_turf(src)) - fired_projectile.firer = src - fired_projectile.fired_from = src - fired_projectile.fire(dir2angle(dir)) - sleep(shot_delay) +/// Called when we run out of bullets +/obj/structure/mounted_gun/proc/finish_firing() + is_firing = FALSE + update_appearance(UPDATE_ICON_STATE) - if(uses_ammo == TRUE) - loaded_gun = FALSE - use_alt_ammo = FALSE - shots_in_gun = 0 - fully_loaded_gun = FALSE - is_firing = FALSE - icon_state = icon_state_base +/// Return +/obj/structure/mounted_gun/proc/time_until_next_shot() + return shot_delay +/obj/structure/mounted_gun/atom_deconstruct(disassembled = TRUE) + . = ..() + dump_contents() + for (var/type in debris) + for (var/i in 1 to debris[type]) + new type(drop_location()) + +/obj/structure/mounted_gun/dump_contents() + return // Generally we don't have contents to dump but some children do. + +/// Perform the contents of the loop, return the amount of time until the next shot +/obj/structure/mounted_gun/proc/fire_loop(mob/living/user) + for(var/mob/shaken_mob in urange(3, src)) + if(shaken_mob.stat == CONSCIOUS && firing_shakes_camera) //is the mob awake to feel the shaking? + shake_camera(shaken_mob, 3, 1) + playsound(src, shots_in_gun > 0 ? fire_sound : last_fire_sound, vol = 50, vary = FALSE, falloff_exponent = 5) + fire_gun(user) + +/// Actually finally shoot the thing +/obj/structure/mounted_gun/proc/fire_gun(mob/living/user) + var/obj/projectile/fired_projectile = get_fired_projectile() + fired_projectile.firer = user + fired_projectile.fired_from = src + var/fire_angle = dir2angle(dir) + (!anchorable_gun || anchored ? 0 : rand(-unanchored_variance, unanchored_variance)) + fired_projectile.fire(fire_angle) + return fired_projectile + +/// What kind of ammo are we shooting +/obj/structure/mounted_gun/proc/get_fired_projectile() + return new projectile_type(get_turf(src)) + +/// Rapidly fires a barrage of random junk ammo /obj/structure/mounted_gun/organ_gun - name = "Pipe Organ Gun" desc = "To become master over one who has killed, one must become a better killer. This engine of destruction is one of many things made to that end." icon_state = "pipeorgangun" - icon_state_base = "pipeorgangun" - icon_state_loaded = "pipeorgangun" - icon_state_fire = "pipeorgangun_fire" + base_icon_state = "pipeorgangun" anchored = FALSE - anchorable_gun = TRUE max_shots_per_fire = 8 shots_in_gun = 8 shots_per_load = 2 - ammo_type = /obj/item/ammo_casing/junk + accepted_ammo_types = list(/obj/item/ammo_casing/junk) projectile_type = /obj/projectile/bullet/junk - loaded_gun = TRUE - fully_loaded_gun = TRUE fire_delay = 3 DECISECONDS shot_delay = 2 DECISECONDS firing_shakes_camera = FALSE - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 24.5, /datum/material/wood = SHEET_MATERIAL_AMOUNT * 15, /datum/material/glass = SMALL_MATERIAL_AMOUNT) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 24.5, + /datum/material/wood = SHEET_MATERIAL_AMOUNT * 15, + /datum/material/glass = SMALL_MATERIAL_AMOUNT + ) + debris = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/mineral/wood = 3, + /obj/item/storage/toolbox = 1, + /obj/item/stack/rods = 4, + /obj/item/assembly/igniter = 1, + ) + /// Different kinds of bullet we can fire + var/static/list_of_projectiles = list( + /obj/projectile/bullet/junk = 40, + /obj/projectile/bullet/incendiary/fire/junk = 25, + /obj/projectile/bullet/junk/shock = 25, + /obj/projectile/bullet/junk/hunter = 20, + /obj/projectile/bullet/junk/phasic = 8, + /obj/projectile/bullet/junk/ripper = 8, + /obj/projectile/bullet/junk/reaper = 3, + ) /obj/structure/mounted_gun/organ_gun/examine_more(mob/user) . = ..() @@ -156,59 +224,31 @@ . += span_info("As such, the man who ended another's life with a stone, was in turn smote himself by another wielding a spear. After spears, bows. Swords. Guns. Tanks. Missiles. And on and on Vengeance fed. Growing stronger. Growing Worse.") . += span_info("Vengeance persists to this day. It sometimes may slumber, seemingly content with having gorged itself, but in the end, its ceaseless hunger can be neither numbed nor sated.") -/obj/structure/mounted_gun/organ_gun/fire() - if (!loaded_gun) - balloon_alert_to_viewers("Gun is not loaded!","",2) - return - for(var/times_fired = 1, times_fired <= shots_in_gun, times_fired++) //The normal DM for loop structure since the times it has fired is changing in the loop itself. - for(var/mob/shaken_mob in urange(10, src)) - if((shaken_mob.stat == CONSCIOUS)&&(firing_shakes_camera == TRUE)) - shake_camera(shaken_mob, 3, 1) - icon_state = icon_state_fire - if(loaded_gun) - playsound(src, fire_sound, 50, TRUE, 5) - - var/list_of_projectiles = list( - /obj/projectile/bullet/junk = 40, - /obj/projectile/bullet/incendiary/fire/junk = 25, - /obj/projectile/bullet/junk/shock = 25, - /obj/projectile/bullet/junk/hunter = 20, - /obj/projectile/bullet/junk/phasic = 8, - /obj/projectile/bullet/junk/ripper = 8, - /obj/projectile/bullet/junk/reaper = 3, - ) - projectile_type = pick_weight(list_of_projectiles) - - var/obj/projectile/fired_projectile = new projectile_type(get_turf(src)) - fired_projectile.firer = src - fired_projectile.fired_from = src - fired_projectile.fire(dir2angle(dir)) - sleep(shot_delay) - loaded_gun = FALSE - shots_in_gun = 0 - fully_loaded_gun = FALSE - icon_state = icon_state_base - -/obj/structure/mounted_gun/canister_gatling //for the funny skeleton pirates! +/obj/structure/mounted_gun/organ_gun/get_fired_projectile() + var/random_type = pick_weight(list_of_projectiles) + return new random_type(get_turf(src)) +/// Rapidly sprays a large amount of bullets, used by pirates +/obj/structure/mounted_gun/canister_gatling name = "Canister Gatling Gun" desc = "''Quantity has a quality of its own.''" icon_state = "canister_gatling" - icon_state_base = "canister_gatling" - icon_state_loaded = "canister_gatling" - icon_state_fire = "canister_gatling_fire" + base_icon_state = "canister_gatling" anchored = FALSE - anchorable_gun = TRUE max_shots_per_fire = 50 shots_per_load = 50 shots_in_gun = 50 - ammo_type = /obj/item/ammo_casing/canister_shot + accepted_ammo_types = list(/obj/item/ammo_casing/canister_shot) projectile_type = /obj/projectile/bullet/shrapnel - loaded_gun = TRUE - fully_loaded_gun = TRUE fire_delay = 3 DECISECONDS shot_delay = 1 DECISECONDS firing_shakes_camera = FALSE + debris = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/mineral/wood = 3, + /obj/item/stack/rods = 4, + /obj/item/assembly/igniter = 1, + ) /obj/item/ammo_casing/canister_shot name = "Canister Shot" @@ -219,25 +259,22 @@ w_class = WEIGHT_CLASS_BULKY projectile_type = /obj/projectile/bullet/shrapnel +/// Hand-cranked laser repeater which does not need to be reloaded /obj/structure/mounted_gun/ratvarian_repeater name = "Ratvarian Repeater" desc = "''Brains? Bronze? Why not both?''" icon_state = "ratvarian_repeater" - icon_state_base = "ratvarian_repeater" - icon_state_fire = "ratvarian_repeater_fire" + base_icon_state = "ratvarian_repeater" loading_message = "gun charged" anchored = FALSE - anchorable_gun = TRUE - uses_ammo = FALSE - load_delay = 30 + accepted_ammo_types = list() // We don't want any of that shit + load_delay = 3 SECONDS max_shots_per_fire = 12 shots_per_load = 12 shots_in_gun = 12 fire_sound = 'sound/items/weapons/thermalpistol.ogg' last_fire_sound = 'sound/items/weapons/thermalpistol.ogg' projectile_type = /obj/projectile/beam/laser/repeater - loaded_gun = TRUE - fully_loaded_gun = TRUE fire_delay = 1 shot_delay = 2 firing_shakes_camera = FALSE @@ -246,79 +283,65 @@ /datum/material/bronze = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.29 ) + debris = list( + /obj/item/stack/cable_coil = 4, + /obj/item/stock_parts/micro_laser = 1, + /obj/item/stock_parts/capacitor = 1, + /obj/item/shard = 2, + /obj/item/stack/sheet/bronze = 2, + /obj/item/stack/rods = 3, + ) -/obj/structure/mounted_gun/ratvarian_repeater/dump_contents() - return // Stub because we don't want to do anything here - -/obj/structure/mounted_gun/ratvarian_repeater/attack_hand(mob/user, params) //the repeater is weird so has to have its own code since it takes no ammo. - - if(is_firing) - balloon_alert(user, "gun is firing!") +/obj/structure/mounted_gun/ratvarian_repeater/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(!isliving(user)) return - if(!fully_loaded_gun) + if(anchorable_gun && held_item?.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = anchored ? "Unanchor" : "Anchor" + + if (!held_item) + context[SCREENTIP_CONTEXT_LMB] = shots_in_gun >= max_shots_per_fire ? "Fire weapon" : "Crank weapon" + + return CONTEXTUAL_SCREENTIP_SET + +// Charge the gun instead of firing it if it's not loaded +/obj/structure/mounted_gun/ratvarian_repeater/try_firing(mob/user) + var/fully_loaded = shots_in_gun >= max_shots_per_fire + if(fully_loaded) + return ..() + + if (load_delay > 0) + user.visible_message(span_warning("[user] starts winding [src].")) if(!do_after(user, load_delay, target = src)) return - shots_in_gun = shots_per_load //Add one to the shots in the gun - balloon_alert(user, "mechanism wound.") - playsound(src, 'sound/effects/magic/clockwork/fellowship_armory.ogg', 50, FALSE, 5) - loaded_gun = TRUE // Make sure it registers theres ammo in there, so it can fire. - if(shots_in_gun >= max_shots_per_fire) - shots_in_gun = max_shots_per_fire // in case of somehow firing only some of a guns shots, and reloading, you still cant get above the maximum ammo size. - fully_loaded_gun = TRUE //So you cant load extra. - return - user.log_message("fired a ratvatian repeater", LOG_ATTACK) - addtimer(CALLBACK(src, PROC_REF(fire)), fire_delay) //uses fire proc as shown below to shoot the gun + shots_in_gun = min(shots_in_gun + shots_per_load, max_shots_per_fire) + playsound(src, 'sound/effects/magic/clockwork/fellowship_armory.ogg', 50, FALSE, 5) -/obj/structure/mounted_gun/ratvarian_repeater/fire() - if (!loaded_gun) - balloon_alert_to_viewers("needs winding!", vision_distance = 2) - return - is_firing = TRUE - for(var/times_fired = 1, times_fired <= shots_in_gun, times_fired++) //The normal DM for loop structure since the times it has fired is changing in the loop itself. - if(loaded_gun) - icon_state = icon_state_fire - if (times_fired < shots_in_gun) - playsound(src, fire_sound, 50, FALSE, 5) - else - playsound(src, last_fire_sound, 50, TRUE, 5) //for the empty fire sound - var/obj/projectile/fired_projectile = new projectile_type(get_turf(src)) - fired_projectile.firer = src - fired_projectile.fired_from = src - fired_projectile.fire(dir2angle(dir)) - if(times_fired % 2 != 1)//Burst Fire. - sleep(shot_delay) - sleep(shot_delay) - loaded_gun = FALSE - shots_in_gun = 0 - fully_loaded_gun = FALSE - is_firing = FALSE - icon_state = icon_state_base +/obj/structure/mounted_gun/ratvarian_repeater/time_until_next_shot() + return shots_in_gun % 2 != 1 ? shot_delay * 2 : shot_delay +/// A makeshift structure for firing spears with increased force /obj/structure/mounted_gun/ballista name = "Improvised Ballista" desc = "''Engineers like to solve problems. If there are no problems handily available, they will create their own problems.''" - icon_state = "Improvised_Ballista" - icon_state_base = "Improvised_Ballista" - icon_state_loaded = "Improvised_Ballista_Loaded" - icon_state_fire = "Improvised_Ballista" + icon_state = "improvised_ballista" + base_icon_state = "improvised_ballista" + throwforce = 30 anchored = FALSE - anchorable_gun = TRUE - uses_ammo = TRUE - load_delay = 60 + load_delay = 6 SECONDS max_shots_per_fire = 1 shots_per_load = 1 - shots_in_gun = 1 + shots_in_gun = 0 fire_sound = 'sound/items/xbow_lock.ogg' last_fire_sound = 'sound/items/xbow_lock.ogg' - has_alt_ammo = TRUE - ammo_type = /obj/item/spear + accepted_ammo_types = list( + /obj/item/brass_spear, + /obj/item/melee/baton/security/cattleprod, + /obj/item/nullrod/spear, + /obj/item/spear, + ) projectile_type = /obj/projectile/bullet/ballista_spear - alt_ammo_type = /obj/item/spear/dragonator - alt_projectile_type = /obj/projectile/bullet/ballista_spear_dragon - loaded_gun = FALSE - fully_loaded_gun = FALSE fire_delay = 1 shot_delay = 1 firing_shakes_camera = FALSE @@ -326,27 +349,66 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15.15, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.5 ) + debris = list( + /obj/item/stack/cable_coil = 3, + /obj/item/stack/sheet/iron = 2, + /obj/item/stack/rods = 3, + ) + /// What spear has someone put in us? + var/obj/item/loaded_spear + +/obj/structure/mounted_gun/ballista/update_icon_state() + . = ..() + if (loaded_spear) + icon_state = base_icon_state + (istype(loaded_spear, /obj/item/melee/baton/security/cattleprod) ? "_loaded_prod" : "_loaded") + else + icon_state = base_icon_state + +/obj/structure/mounted_gun/ballista/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!is_type_in_list(tool, accepted_ammo_types) || user.combat_mode) + return NONE -/obj/structure/mounted_gun/ballista/attackby(obj/item/ammo_casing/used_item, mob/user, params) //again its single shot so its kinda weird. if(is_firing) - balloon_alert(user, "gun is firing") - return + balloon_alert(user, "gun firing!") + return ITEM_INTERACT_BLOCKING - if(!istype(used_item, ammo_type)) - return - - if(fully_loaded_gun) - balloon_alert(user, "already fully loaded!") - return - - if(istype(used_item, alt_ammo_type)) - use_alt_ammo = TRUE + if(loaded_spear) + balloon_alert(user, "already loaded!") + return ITEM_INTERACT_BLOCKING playsound(src, 'sound/items/weapons/draw_bow.ogg', 50, FALSE, 5) - do_after(user, load_delay, target = src) - shots_in_gun = 1 //MAX OF ONE SHOT. - balloon_alert(user, loading_message) - loaded_gun = TRUE - QDEL_NULL(used_item) - fully_loaded_gun = TRUE - icon_state = icon_state_loaded + if (load_delay > 0) + user.visible_message(span_warning("[user] starts loading [src].")) + if (!do_after(user, load_delay, target = src)) + return ITEM_INTERACT_BLOCKING + + shots_in_gun = 1 + + loaded_spear = tool + loaded_spear.forceMove(src) + update_appearance(UPDATE_ICON_STATE) + RegisterSignals(loaded_spear, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING), PROC_REF(on_spear_left)) + return ITEM_INTERACT_SUCCESS + +/obj/structure/mounted_gun/ballista/get_fired_projectile() + if (istype(loaded_spear, /obj/item/spear/dragonator)) + return new /obj/projectile/bullet/ballista_spear/dragonator(get_turf(src)) + if (istype(loaded_spear, /obj/item/melee/baton/security/cattleprod)) + return new /obj/projectile/bullet/ballista_spear/prod(get_turf(src)) + return ..() + +/obj/structure/mounted_gun/ballista/fire_gun(mob/living/user) + var/obj/projectile/bullet/ballista_spear/fired_projectile = . = ..() + fired_projectile.attach_spear(loaded_spear) + +/// Called when our spear is not inside us any more +/obj/structure/mounted_gun/ballista/proc/on_spear_left() + SIGNAL_HANDLER + UnregisterSignal(loaded_spear, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) + shots_in_gun = 0 + loaded_spear = null + update_appearance(UPDATE_ICON_STATE) + +/obj/structure/mounted_gun/ballista/dump_contents() + . = ..() + loaded_spear?.forceMove(drop_location()) diff --git a/code/modules/projectiles/projectile/bullets/cannonball.dm b/code/modules/projectiles/projectile/bullets/cannonball.dm index 30c95fdad6c..bfc781e6fac 100644 --- a/code/modules/projectiles/projectile/bullets/cannonball.dm +++ b/code/modules/projectiles/projectile/bullets/cannonball.dm @@ -87,3 +87,75 @@ object_damage_decreases = TRUE object_damage_decrease_on_hit = 40 range = 7 //let's keep it a bit sane, okay? + + +/// Mounted ballista projectile, not exactly a cannonball but it's close enough +/obj/projectile/bullet/ballista_spear + name = "ballista spear" + icon_state = "ballista_spear" + damage = 60 + speed = 3 + catastropic_dismemberment = TRUE + projectile_piercing = PASSMOB + dismemberment = 3 + embed_type = null + shrapnel_type = null + wound_bonus = 40 + exposed_wound_bonus = 30 + damage_type = BRUTE + +/// Set statistics based on provided spear +/obj/projectile/bullet/ballista_spear/proc/attach_spear(obj/item/spear) + damage = spear.throwforce * 2.5 + armour_penetration = spear.armour_penetration * 2 + wound_bonus += spear.wound_bonus // Most spears have a negative wound bonus so this actually goes down + AddComponent(/datum/component/projectile_instance_drop, spear) + +/// An even bigger ballista projectile designed for taking down monsters +/obj/projectile/bullet/ballista_spear/dragonator + name = "dragon-slaying ballista spear" + icon_state = "ballista_spear_dragon" + damage = 120 + speed = 4 + armour_penetration = 25 + wound_bonus = 15 + exposed_wound_bonus = 30 + +/obj/projectile/bullet/ballista_spear/dragonator/Initialize(mapload) + . = ..() + AddElement(/datum/element/bane, mob_biotypes = MOB_MINING, damage_multiplier = 2) + +/obj/projectile/bullet/ballista_spear/dragonator/attach_spear(obj/item/spear) + AddComponent(/datum/component/projectile_instance_drop, spear) + +/// A "spear" that's not sharp but has a different surprise on the end +/obj/projectile/bullet/ballista_spear/prod + name = "ballistic prod" + icon_state = "ballista_prod" + damage = 40 + projectile_piercing = NONE + dismemberment = 0 + sharpness = NONE + wound_bonus = 10 + exposed_wound_bonus = 20 + /// Reference to our stored cattleprod + var/obj/item/melee/baton/security/cattleprod/held_prod + +/obj/projectile/bullet/ballista_spear/prod/attach_spear(obj/item/spear) + AddComponent(/datum/component/projectile_instance_drop, spear) + if (!istype(spear, /obj/item/melee/baton/security/cattleprod)) + return // IDK how you did this but you're going to have a boring projectile + name = "ballistic [initial(spear.name)]" + held_prod = spear + RegisterSignals(held_prod, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(on_prod_left)) + +/obj/projectile/bullet/ballista_spear/prod/on_hit(mob/target, blocked = 0, pierce_hit) + . = ..() + if (held_prod?.active && blocked != 100) + var/mob/prodder = ismob(firer) ? firer : null + held_prod?.finalize_baton_attack(target, prodder) + +/// If our teleprod teleports out of the bullet then it's not going to prod anyone is it? +/obj/projectile/bullet/ballista_spear/prod/proc/on_prod_left() + SIGNAL_HANDLER + QDEL_IN(src, 1) // Not instantly because if it dropped on the floor because we hit someone we want to finish doing that first diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 7cc8deaf976..85c2ef8e2a4 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -228,43 +228,3 @@ desc = "doink!" damage_type = BRUTE icon_state = "paperball" - -//Big Ballista Mounted gun Spear -/obj/projectile/bullet/ballista_spear - name = "Spear" - icon_state = "ballista_spear" - damage = 80 - speed = 3 - catastropic_dismemberment = TRUE - projectile_piercing = PASSMOB - dismemberment = 3 - embed_type = null - armour_penetration = 25 - wound_bonus = 15 - exposed_wound_bonus = 30 - damage_type = BRUTE - shrapnel_type = /obj/item/spear - -/obj/projectile/bullet/ballista_spear/Initialize(mapload) - . = ..() - AddElement(/datum/element/projectile_drop, shrapnel_type) - -/obj/projectile/bullet/ballista_spear_dragon - name = "Dragon-Slaying Spear" - icon_state = "ballista_spear_dragon" - damage = 120 - speed = 4 - catastropic_dismemberment = TRUE - projectile_piercing = PASSMOB - dismemberment = 3 - embed_type = null - armour_penetration = 25 - wound_bonus = 15 - exposed_wound_bonus = 30 - damage_type = BRUTE - shrapnel_type = /obj/item/spear/dragonator - -/obj/projectile/bullet/ballista_spear_dragon/Initialize(mapload) - . = ..() - AddElement(/datum/element/projectile_drop, shrapnel_type) - AddElement(/datum/element/bane, mob_biotypes = MOB_MINING, damage_multiplier = 2) diff --git a/icons/obj/weapons/cannons.dmi b/icons/obj/weapons/cannons.dmi index 01158ad9dfff0ec187cf3d832843b0ea8e7dd5ba..861e3c286c54198d6101a422a4cc7a2f1b03dbc7 100644 GIT binary patch delta 9858 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 KUn6S~{=Wd{=tZ^w delta 9619 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 diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index a0feb9ba37218e715acd3fa218e078e04f07d3d2..333f8da065d1b34153563c64f4802b3a87966894 100644 GIT binary patch delta 30215 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 delta 29928 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 diff --git a/tgstation.dme b/tgstation.dme index c671a8e299f..17ae864a8ad 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1259,6 +1259,7 @@ #include "code\datums\components\pricetag.dm" #include "code\datums\components\proficient_miner.dm" #include "code\datums\components\profound_fisher.dm" +#include "code\datums\components\projectile_instance_drop.dm" #include "code\datums\components\prosthetic_item.dm" #include "code\datums\components\punchcooldown.dm" #include "code\datums\components\puzzgrid.dm"