From 052c4ebe4a6915ba68394699d512a1ac6b816f9b Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 16:19:32 +0200 Subject: [PATCH 1/7] init --- code/game/objects/items/explosives/mine.dm | 135 +++++++++++++----- .../projectiles/guns/specialist/sharp.dm | 127 ++++++++++++---- 2 files changed, 196 insertions(+), 66 deletions(-) diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index bf718cadf122..e00a6fdeb221 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -397,19 +397,24 @@ layer = ABOVE_OBJ_LAYER shrapnel_spread = 360 health = 50 + ignore_small_xeno = TRUE + var/disarmed = FALSE - var/explosion_size = 100 + var/explosion_strength = 100 var/explosion_falloff = 50 var/mine_level = 1 var/deploy_time = 0 var/mine_state = "" - var/timer_id + var/mine_safety = FALSE + var/setup_timer // initialized in sharp.dm drop_dart + var/upgrade_timer // used here + var/disarm_timer // initialized in sharp.dm drop_dart /obj/item/explosive/mine/sharp/proc/upgrade_mine() mine_level++ icon_state = mine_state + "_[mine_level]" if(mine_level < 4) - timer_id = addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, upgrade_mine)), 30 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) + upgrade_timer = addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, upgrade_mine)), 30 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) /obj/item/explosive/mine/sharp/check_for_obstacles(mob/living/user) return FALSE @@ -417,19 +422,40 @@ /obj/item/explosive/mine/sharp/attackby(obj/item/W, mob/user) if(user.action_busy) return - else if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL)) - user.visible_message(SPAN_NOTICE("[user] starts disarming [src]."), \ - SPAN_NOTICE("You start disarming [src].")) - if(!do_after(user, 30, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) - user.visible_message(SPAN_WARNING("[user] stops disarming [src]."), \ - SPAN_WARNING("You stop disarming [src].")) - return - if(!active)//someone beat us to it - return - user.visible_message(SPAN_NOTICE("[user] finishes disarming [src]."), \ - SPAN_NOTICE("You finish disarming [src].")) - disarm() - return + if(!disarmed) + if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL)) + user.visible_message(SPAN_NOTICE("[user] starts disarming [src]."), \ + SPAN_NOTICE("You start disarming [src].")) + if(!do_after(user, 3 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) + user.visible_message(SPAN_WARNING("[user] stops disarming [src]."), \ + SPAN_WARNING("You stop disarming [src].")) + return + if(!active)//someone beat us to it + return + user.visible_message(SPAN_NOTICE("[user] finishes disarming [src]."), \ + SPAN_NOTICE("You finish disarming [src].")) + disarm() + else + if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL)) + if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_GRENADIER) + to_chat(user, SPAN_WARNING("You don't seem to know how to rearm \the [src]...")) + return + var/turf = get_turf(src) + for(var/obj/item/explosive/mine/existing_mine in turf) + if(existing_mine != src) + to_chat(user, SPAN_WARNING("There is already a mine deployed here!")) + return + user.visible_message(SPAN_NOTICE("[user] starts rearming [src]."), \ + SPAN_NOTICE("You start rearming [src].")) + if(!do_after(user, 1 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) + user.visible_message(SPAN_WARNING("[user] stops rearming [src]."), \ + SPAN_WARNING("You stop rearming [src].")) + return + if(active)//someone beat us to it + return + user.visible_message(SPAN_NOTICE("[user] finishes rearming [src]."), \ + SPAN_NOTICE("You finish rearming [src].")) + rearm(user) /obj/item/explosive/mine/sharp/set_tripwire() if(!active && !tripwire) @@ -441,22 +467,32 @@ /obj/item/explosive/mine/sharp/prime(mob/user) set waitfor = FALSE + if (disarmed) + qdel(src) + return + if(!cause_data) cause_data = create_cause_data(initial(name), user, src) else if(user) cause_data.weak_mob = WEAKREF(user) if(mine_level == 1) - explosion_size = 100 + explosion_strength = 100 else if(mine_level == 2) - explosion_size = 100 + explosion_strength = 100 explosion_falloff = 25 else if(mine_level == 3) - explosion_size = 125 + explosion_strength = 125 explosion_falloff = 30 else - explosion_size = 125 + explosion_strength = 125 explosion_falloff = 25 - cell_explosion(loc, explosion_size, explosion_falloff, EXPLOSION_FALLOFF_SHAPE_LINEAR, CARDINAL_ALL_DIRS, cause_data, enviro=map_deployed) + + if (mine_safety) + for(var/mob/living/carbon/human in range(explosion_strength / explosion_falloff, src)) + if (human.get_target_lock(iff_signal)) + disarm() + return + cell_explosion(loc, explosion_strength, explosion_falloff, EXPLOSION_FALLOFF_SHAPE_LINEAR, CARDINAL_ALL_DIRS, cause_data, enviro=map_deployed) playsound(loc, 'sound/weapons/gun_sharp_explode.ogg', 100) qdel(src) @@ -465,12 +501,19 @@ active = FALSE triggered = FALSE icon_state = "sharp_mine_disarmed" - desc = "A disarmed P9 SHARP rifle dart, useless now." + desc = "A disarmed P9 SHARP rifle dart. With the right training, it can potentially be rearmed with a security access tuner." QDEL_NULL(tripwire) disarmed = TRUE - deltimer(timer_id) - add_to_garbage(src) + deltimer(upgrade_timer) + deltimer(disarm_timer) + playsound(src, 'sound/weapons/smartgun_fail.ogg', src, 25) +/obj/item/explosive/mine/sharp/proc/rearm(mob/user) + disarmed = FALSE + mine_level = 1 + desc = "An experimental P9 SHARP proximity triggered explosive dart designed by Armat Systems for use by the United States Colonial Marines. This one has full 360 detection range." + deploy_mine(user) + disarm_timer = addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, disarm)), 5 MINUTES, TIMER_DELETE_ME | TIMER_STOPPABLE) /obj/item/explosive/mine/sharp/attack_self(mob/living/user) if(disarmed) @@ -482,18 +525,17 @@ return if(!hard_iff_lock && user) iff_signal = user.faction + if(user && src.loc == user) + user.drop_inv_item_on_ground(src) cause_data = create_cause_data(initial(name), user, src) - if(user) - user.drop_inv_item_on_ground(src) setDir(user ? user.dir : dir) //The direction it is planted in is the direction the user faces at that time activate_sensors() update_icon() deploy_time = world.time mine_state = icon_state - timer_id = addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, upgrade_mine)), 30 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) - for(var/mob/living/carbon/mob in range(1, src)) - try_to_prime(mob) + upgrade_timer = addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, upgrade_mine)), 30 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) + anchored = TRUE /obj/item/explosive/mine/sharp/attack_alien() if(disarmed) @@ -518,33 +560,56 @@ if(health <= 0) prime() +/obj/item/explosive/mine/sharp/get_examine_text(mob/user) + . = ..() + var/extended_description = "" + if(skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_GRENADIER)) + extended_description = mine_safety ? "SAFE" : "DANGER" + . += SPAN_INFO("Your training allows you to discern what mode this mine was fired in: it appears to be set to [extended_description] mode.") + if(disarmed) + . += SPAN_INFO("The dart's internal timer has already expired, but you are trained in resetting the clock with a multitool.") + else if(deploy_time) + var/remaining_ds = max(0, (deploy_time + 5 MINUTES) - world.time) + var/remaining_mins = round(remaining_ds / 600, 1) + . += SPAN_INFO("Your training allows you to determine how much time is approximately left on the mine: ~[remaining_mins] [remaining_mins == 1 ? "minute" : "minutes"] remaining before auto-disarm.") + /obj/item/explosive/mine/sharp/incendiary name = "\improper P9 SHARP incendiary dart" - desc = "An experimental P9 SHARP proximity triggered explosive dart designed by Armat Systems for use by the United States Colonial Marines. This one has full 360 detection range." icon_state = "sharp_incendiary_mine" + var/incendiary_radius = 1 /obj/item/explosive/mine/sharp/incendiary/prime(mob/user) set waitfor = FALSE + if (disarmed) + qdel(src) + return if(!cause_data) cause_data = create_cause_data(initial(name), user, src) else if(user) cause_data.weak_mob = WEAKREF(user) + if(mine_level == 1) + incendiary_radius = 2 var/datum/effect_system/smoke_spread/phosphorus/smoke = new /datum/effect_system/smoke_spread/phosphorus/sharp - var/smoke_radius = 2 - smoke.set_up(smoke_radius, 0, loc) + smoke.set_up(incendiary_radius, 0, loc) smoke.start() playsound(loc, 'sound/weapons/gun_sharp_explode.ogg', 100) else if(mine_level == 2) var/datum/reagent/napalm/green/reagent = new() - new /obj/flamer_fire(loc, cause_data, reagent, 2) + new /obj/flamer_fire(loc, cause_data, reagent, incendiary_radius, null, FLAMESHAPE_STAR) playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) else if(mine_level == 3) var/datum/reagent/napalm/ut/reagent = new() - new /obj/flamer_fire(loc, cause_data, reagent, 2) + new /obj/flamer_fire(loc, cause_data, reagent, incendiary_radius, null, FLAMESHAPE_STAR) playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) else var/datum/reagent/napalm/ut/reagent = new() - new /obj/flamer_fire(loc, cause_data, reagent, 3) + new /obj/flamer_fire(loc, cause_data, reagent, incendiary_radius, null, FLAMESHAPE_STAR) playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) + + if (mine_safety) + for(var/mob/living/carbon/human in range(incendiary_radius, src)) + if (human.get_target_lock(iff_signal)) + disarm() + return qdel(src) diff --git a/code/modules/projectiles/guns/specialist/sharp.dm b/code/modules/projectiles/guns/specialist/sharp.dm index 270674e4b597..aeba93bdf2c6 100644 --- a/code/modules/projectiles/guns/specialist/sharp.dm +++ b/code/modules/projectiles/guns/specialist/sharp.dm @@ -20,20 +20,22 @@ aim_slowdown = SLOWDOWN_ADS_SPECIALIST wield_delay = WEAPON_DELAY_VERY_SLOW - flags_gun_features = GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + flags_gun_features = GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_AUTO_EJECTOR flags_item = TWOHANDED|NO_CRYO_STORE map_specific_decoration = TRUE - var/explosion_delay_sharp = TRUE + var/current_mine_safety = TRUE /obj/item/weapon/gun/rifle/sharp/Initialize() . = ..() AddElement(/datum/element/corp_label/armat) + LAZYADD(actions_types, list(/datum/action/item_action/specialist/sharp_firemode_ability)) + return ..() /obj/item/weapon/gun/rifle/sharp/get_examine_text(mob/user) . = ..() - . += SPAN_INFO("Switching firemodes will toggle the explosion delay timer between 1 second and 5 seconds.") + . += SPAN_INFO("Switching firemodes will toggle SAFE operation, with much greater IFF-logic of fired mines.") /obj/item/weapon/gun/rifle/sharp/set_bullet_traits() LAZYADD(traits_to_give, list( @@ -52,7 +54,6 @@ damage_mult = BASE_BULLET_DAMAGE_MULT recoil = RECOIL_OFF - /obj/item/weapon/gun/rifle/sharp/unload_chamber(mob/user) if(!in_chamber) return @@ -74,14 +75,57 @@ to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) return FALSE -//code for changing explosion delay on direct hits +//code for changing mine modes + +/datum/action/item_action/specialist/sharp_firemode_ability + ability_primacy = SPEC_PRIMARY_ACTION_1 + +/datum/action/item_action/specialist/sharp_firemode_ability/New(mob/living/user, obj/item/holder) + . = ..() + name = "Toggle SHARP Firemode" + button.name = name + update_button_icon() + update_ability_icon() + +/datum/action/item_action/specialist/sharp_firemode_ability/proc/update_ability_icon() + var/obj/item/weapon/gun/rifle/sharp/sharp_rifle = holder_item + var/icon = 'icons/mob/hud/actions.dmi' + var/icon_state + if(sharp_rifle.current_mine_safety) + icon_state = "sharp_safe" + else + icon_state = "sharp_danger" + button.overlays.Cut() + var/image/IMG = image(icon, button, icon_state) + button.overlays += IMG + +/datum/action/item_action/specialist/sharp_firemode_ability/can_use_action() + if(owner.is_mob_incapacitated()) + return FALSE + return TRUE + +/datum/action/item_action/specialist/sharp_firemode_ability/action_activate() + . = ..() + var/obj/item/weapon/gun/rifle/sharp/sharp_rifle = holder_item + if(!ishuman(owner)) + return + sharp_rifle.do_toggle_firemode(owner) /obj/item/weapon/gun/rifle/sharp/do_toggle_firemode(mob/user) . = ..() - explosion_delay_sharp = !explosion_delay_sharp - playsound(user, 'sound/weapons/handling/gun_burst_toggle.ogg', 15, 1) - to_chat(user, SPAN_NOTICE("[icon2html(src, user)] You [explosion_delay_sharp ? SPAN_BOLD("enable") : SPAN_BOLD("disable")] [src]'s delayed fire mode. Explosive ammo will blow up in [explosion_delay_sharp ? SPAN_BOLD("5 seconds") : SPAN_BOLD("2.5 seconds")].")) - user.balloon_alert(user, "explosion delay [explosion_delay_sharp ? "5 seconds" : "2.5 seconds"].") + var/mine_mode_notice = "" + if(current_mine_safety) + current_mine_safety = FALSE + mine_mode_notice += "[icon2html(src, user)] You set [src]'s mine mode to DANGER mode. Explosive ammo will blow up regardless of friendly presence." + user.balloon_alert(user, "DANGER mode activated.") + else + current_mine_safety = TRUE + mine_mode_notice += "[icon2html(src, user)] You set [src]'s mine mode to SAFE mode. Explosive ammo will not blow up near detected friendly targets." + user.balloon_alert(user, "SAFE mode activated.") + to_chat(user, SPAN_NOTICE(mine_mode_notice)) + + var/datum/action/item_action/specialist/sharp_firemode_ability/SFA = locate(/datum/action/item_action/specialist/sharp_firemode_ability) in actions + SFA.update_ability_icon() @@ -108,6 +152,7 @@ shell_speed = AMMO_SPEED_TIER_2 var/embed_object = /obj/item/sharp/explosive var/mine_level = 0 + var/mine_safety = FALSE /datum/ammo/rifle/sharp/on_embed(mob/embedded_mob, obj/limb/target_organ) if(!ishuman(embedded_mob)) @@ -138,36 +183,46 @@ return var/mob/shooter = shot_dart.firer + var/obj/item/weapon/gun/rifle/sharp/weapon = shot_dart.shot_from shake_camera(target, 2, 1) if(shooter && ismob(shooter)) target.balloon_alert(target, "you have been hit by an explosive dart!", text_color = "#ce1e1e") if(!target.get_target_lock(shooter.faction_group)) - var/obj/item/weapon/gun/rifle/sharp/weapon = shot_dart.shot_from playsound(get_turf(target), 'sound/weapons/gun_sharp_explode.ogg', 100) - if(weapon && weapon.explosion_delay_sharp) - addtimer(CALLBACK(src, PROC_REF(delayed_explosion), shot_dart, target, shooter), 5 SECONDS) - else + if(weapon) + mine_safety = weapon.current_mine_safety addtimer(CALLBACK(src, PROC_REF(delayed_explosion), shot_dart, target, shooter), 2.5 SECONDS) /datum/ammo/rifle/sharp/explosive/drop_dart(loc, obj/projectile/shot_dart, mob/shooter) var/signal_explosion = FALSE if(locate(/obj/item/explosive/mine) in get_turf(loc)) signal_explosion = TRUE - var/obj/item/explosive/mine/sharp/dart = new /obj/item/explosive/mine/sharp(loc) + var/obj/item/explosive/mine/sharp/mine = new /obj/item/explosive/mine/sharp(loc) + var/obj/item/weapon/gun/rifle/sharp/weapon = shot_dart.shot_from + if(weapon) + mine.mine_safety = weapon.current_mine_safety // if no darts on tile, don't arm, explode instead. if(signal_explosion) - INVOKE_ASYNC(dart, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, prime), shooter) + INVOKE_ASYNC(mine, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, prime), shooter) else - dart.anchored = TRUE - addtimer(CALLBACK(dart, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, deploy_mine), shooter), 3 SECONDS, TIMER_DELETE_ME) - addtimer(CALLBACK(dart, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, disarm)), 5 MINUTES, TIMER_DELETE_ME) + mine.anchored = TRUE + mine.setup_timer = addtimer(CALLBACK(mine, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, deploy_mine), shooter, weapon), 3 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) + mine.disarm_timer = addtimer(CALLBACK(mine, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, disarm)), 5 MINUTES, TIMER_DELETE_ME | TIMER_STOPPABLE) /datum/ammo/rifle/sharp/explosive/proc/delayed_explosion(obj/projectile/shot_dart, mob/target, mob/shooter) if(ismob(target)) - var/explosion_size = 60 - var/falloff_size = 35 + var/explosion_strength = 60 + var/explosion_falloff = 35 var/cause_data = create_cause_data("P9 SHARP Rifle", shooter) - cell_explosion(get_turf(target), explosion_size, falloff_size, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, cause_data) + if (mine_safety) + for(var/mob/living/carbon/human in range(explosion_strength / explosion_falloff, target)) + if (human.get_target_lock(shooter.faction_group)) + playsound(target, 'sound/weapons/smartgun_fail.ogg', target, 25) + to_chat(target, SPAN_WARNING("[shot_dart] releases itself from you!")) + target.balloon_alert(target, "an attached explosive dart releases itself from you!") + to_chat(shooter, SPAN_WARNING("[shot_dart] recognized an IFF marked target and did not detonate!")) + return + cell_explosion(get_turf(target), explosion_strength, explosion_falloff, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, cause_data) /datum/ammo/rifle/sharp/incendiary @@ -180,34 +235,44 @@ if(!target || target == shot_dart.firer) return var/mob/shooter = shot_dart.firer + var/obj/item/weapon/gun/rifle/sharp/weapon = shot_dart.shot_from shake_camera(target, 2, 1) if(shooter && ismob(shooter)) - target.balloon_alert(target, "you have been hit by an incendiary dart!", text_color = "#ce1e1e") + target.balloon_alert(target, "you have been hit by an incendiary dart!", text_color = "#ce7c1e") if(!target.get_target_lock(shooter.faction_group)) - var/obj/item/weapon/gun/rifle/sharp/weapon = shot_dart.shot_from playsound(get_turf(target), 'sound/weapons/gun_sharp_explode.ogg', 100) - if(weapon && weapon.explosion_delay_sharp) - addtimer(CALLBACK(src, PROC_REF(delayed_fire), shot_dart, target, shooter), 5 SECONDS) - else + if(weapon) + mine_safety = weapon.current_mine_safety addtimer(CALLBACK(src, PROC_REF(delayed_fire), shot_dart, target, shooter), 2.5 SECONDS) /datum/ammo/rifle/sharp/incendiary/drop_dart(loc, obj/projectile/shot_dart, mob/shooter) var/signal_explosion = FALSE if(locate(/obj/item/explosive/mine) in get_turf(loc)) signal_explosion = TRUE - var/obj/item/explosive/mine/sharp/incendiary/dart = new /obj/item/explosive/mine/sharp/incendiary(loc) + var/obj/item/explosive/mine/sharp/incendiary/mine = new /obj/item/explosive/mine/sharp/incendiary(loc) + var/obj/item/weapon/gun/rifle/sharp/weapon = shot_dart.shot_from + if(weapon) + mine.mine_safety = weapon.current_mine_safety // if no darts on tile, don't arm, explode instead. if(signal_explosion) - INVOKE_ASYNC(dart, TYPE_PROC_REF(/obj/item/explosive/mine/sharp/incendiary, prime), shooter) + INVOKE_ASYNC(mine, TYPE_PROC_REF(/obj/item/explosive/mine/sharp/incendiary, prime), shooter) else - dart.anchored = TRUE - addtimer(CALLBACK(dart, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, deploy_mine), shooter), 3 SECONDS, TIMER_DELETE_ME) - addtimer(CALLBACK(dart, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, disarm)), 5 MINUTES, TIMER_DELETE_ME) + mine.anchored = TRUE + mine.setup_timer = addtimer(CALLBACK(mine, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, deploy_mine), shooter, weapon), 3 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) + mine.disarm_timer = addtimer(CALLBACK(mine, TYPE_PROC_REF(/obj/item/explosive/mine/sharp, disarm)), 5 MINUTES, TIMER_DELETE_ME | TIMER_STOPPABLE) /datum/ammo/rifle/sharp/incendiary/proc/delayed_fire(obj/projectile/shot_dart, mob/target, mob/shooter) if(ismob(target)) var/datum/effect_system/smoke_spread/phosphorus/smoke = new /datum/effect_system/smoke_spread/phosphorus/sharp var/smoke_radius = 2 + if(mine_safety) + for(var/mob/living/carbon/human in range(smoke_radius, target)) + if (human.get_target_lock(shooter.faction_group)) + playsound(target, 'sound/weapons/smartgun_fail.ogg', target, 25) + to_chat(target, SPAN_WARNING("[shot_dart] releases itself from you!")) + target.balloon_alert(target, "an attached incendiary dart releases itself from you!") + to_chat(shooter, SPAN_WARNING("[shot_dart] recognized an IFF marked target and did not detonate!")) + return smoke.set_up(smoke_radius, 0, get_turf(target)) smoke.start() From c714ff46df22f0ec765fb4132133e94dd541a33c Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 16:23:14 +0200 Subject: [PATCH 2/7] icons --- icons/mob/hud/actions.dmi | Bin 46597 -> 47886 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/hud/actions.dmi b/icons/mob/hud/actions.dmi index 4a754815243b9704fbbaa6db5632bbcfe3a1a799..ad963d0a951c428c5587f3b01ad120edaa330927 100644 GIT binary patch delta 22394 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 delta 21095 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 From 2895a91b4635a038f8477a404764999f8a6a7524 Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 16:28:18 +0200 Subject: [PATCH 3/7] multiple initialize() fix, missing sound fix, description change --- code/modules/projectiles/guns/specialist/sharp.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/specialist/sharp.dm b/code/modules/projectiles/guns/specialist/sharp.dm index aeba93bdf2c6..8db897a8d990 100644 --- a/code/modules/projectiles/guns/specialist/sharp.dm +++ b/code/modules/projectiles/guns/specialist/sharp.dm @@ -28,7 +28,6 @@ var/current_mine_safety = TRUE /obj/item/weapon/gun/rifle/sharp/Initialize() - . = ..() AddElement(/datum/element/corp_label/armat) LAZYADD(actions_types, list(/datum/action/item_action/specialist/sharp_firemode_ability)) return ..() @@ -113,6 +112,7 @@ /obj/item/weapon/gun/rifle/sharp/do_toggle_firemode(mob/user) . = ..() + playsound(user, 'sound/weapons/handling/gun_burst_toggle.ogg', 15, 1) var/mine_mode_notice = "" if(current_mine_safety) current_mine_safety = FALSE @@ -120,7 +120,7 @@ user.balloon_alert(user, "DANGER mode activated.") else current_mine_safety = TRUE - mine_mode_notice += "[icon2html(src, user)] You set [src]'s mine mode to SAFE mode. Explosive ammo will not blow up near detected friendly targets." + mine_mode_notice += "[icon2html(src, user)] You set [src]'s mine mode to SAFE mode. Explosive ammo will NEVER blow up near detected friendly targets." user.balloon_alert(user, "SAFE mode activated.") to_chat(user, SPAN_NOTICE(mine_mode_notice)) From 634589e663ff1cb2599434f588e2418fc419386f Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 16:29:37 +0200 Subject: [PATCH 4/7] readded multitool, extended magazine descriptions --- code/modules/cm_marines/equipment/kit_boxes.dm | 1 + code/modules/projectiles/magazines/rifles.dm | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 5093c68a490f..1d3e7b320da6 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -225,6 +225,7 @@ new /obj/item/ammo_magazine/pistol/vp78(src) new /obj/item/ammo_magazine/pistol/vp78(src) new /obj/item/device/binoculars(src) + new /obj/item/device/multitool(src) //maybe put in req for later use? diff --git a/code/modules/projectiles/magazines/rifles.dm b/code/modules/projectiles/magazines/rifles.dm index 0a03c799f7f8..9a61d79173d4 100644 --- a/code/modules/projectiles/magazines/rifles.dm +++ b/code/modules/projectiles/magazines/rifles.dm @@ -734,17 +734,17 @@ /obj/item/ammo_magazine/rifle/sharp/explosive name = "\improper 9X-E sticky explosive dart magazine" - desc = "A specialized explosive sticky dart magazine for the SHARP rifle." + desc = "A specialized explosive dart magazine for the P9 SHARP rifle. Darts either embed into targets and detonate after a short delay, or stay behind as proximity-triggered explosive mines." /obj/item/ammo_magazine/rifle/sharp/incendiary name = "\improper 9X-T sticky incendiary dart magazine" - desc = "A specialized incendiary dart magazine for the SHARP rifle." + desc = "A specialized incendiary dart magazine for the P9 SHARP rifle. Darts either embed into targets and release an incendiary concoction after a short delay, or stay behind as proximity-triggered incendiary mines." icon_state = "sharp_incendiary_mag" default_ammo = /datum/ammo/rifle/sharp/incendiary /obj/item/ammo_magazine/rifle/sharp/flechette name = "\improper 9X-F flechette dart magazine" - desc = "A specialized flechette dart magazine for the SHARP rifle." + desc = "A specialized flechette dart magazine for the P9 SHARP rifle. Unlike their explosive and incendiary counterparts, the darts detonate on contact without delay, dispersing a concentrated cone of metal shards that shred anything in their path." icon_state = "sharp_flechette_mag" default_ammo = /datum/ammo/rifle/sharp/flechette From 78bf4152292cee921d27afe626e318a5d4c48c3a Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 17:09:16 +0200 Subject: [PATCH 5/7] readjusted iff, smoke/non-smoke incendiary refactor, non-human examine --- code/game/objects/items/explosives/mine.dm | 44 ++++++++++++------- .../projectiles/guns/specialist/sharp.dm | 4 +- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index e00a6fdeb221..a3a8c4c05d12 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -470,13 +470,14 @@ if (disarmed) qdel(src) return - if(!cause_data) cause_data = create_cause_data(initial(name), user, src) else if(user) cause_data.weak_mob = WEAKREF(user) + if(mine_level == 1) explosion_strength = 100 + explosion_falloff = 50 else if(mine_level == 2) explosion_strength = 100 explosion_falloff = 25 @@ -488,7 +489,7 @@ explosion_falloff = 25 if (mine_safety) - for(var/mob/living/carbon/human in range(explosion_strength / explosion_falloff, src)) + for(var/mob/living/carbon/human in range((explosion_strength / explosion_falloff) - 1, src)) if (human.get_target_lock(iff_signal)) disarm() return @@ -563,6 +564,8 @@ /obj/item/explosive/mine/sharp/get_examine_text(mob/user) . = ..() var/extended_description = "" + if(!ishuman(user)) + return if(skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_GRENADIER)) extended_description = mine_safety ? "SAFE" : "DANGER" . += SPAN_INFO("Your training allows you to discern what mode this mine was fired in: it appears to be set to [extended_description] mode.") @@ -576,7 +579,9 @@ /obj/item/explosive/mine/sharp/incendiary name = "\improper P9 SHARP incendiary dart" icon_state = "sharp_incendiary_mine" - var/incendiary_radius = 1 + var/incendiary_radius + var/is_smoke + var/datum/incendiary_reagent /obj/item/explosive/mine/sharp/incendiary/prime(mob/user) set waitfor = FALSE @@ -590,26 +595,33 @@ if(mine_level == 1) incendiary_radius = 2 - var/datum/effect_system/smoke_spread/phosphorus/smoke = new /datum/effect_system/smoke_spread/phosphorus/sharp - smoke.set_up(incendiary_radius, 0, loc) - smoke.start() - playsound(loc, 'sound/weapons/gun_sharp_explode.ogg', 100) + is_smoke = TRUE else if(mine_level == 2) - var/datum/reagent/napalm/green/reagent = new() - new /obj/flamer_fire(loc, cause_data, reagent, incendiary_radius, null, FLAMESHAPE_STAR) - playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) + incendiary_radius = 1 + is_smoke = FALSE + incendiary_reagent = new /datum/reagent/napalm/green() else if(mine_level == 3) - var/datum/reagent/napalm/ut/reagent = new() - new /obj/flamer_fire(loc, cause_data, reagent, incendiary_radius, null, FLAMESHAPE_STAR) - playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) + incendiary_radius = 1 + is_smoke = FALSE + incendiary_reagent = new /datum/reagent/napalm/ut() else - var/datum/reagent/napalm/ut/reagent = new() - new /obj/flamer_fire(loc, cause_data, reagent, incendiary_radius, null, FLAMESHAPE_STAR) - playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) + incendiary_radius = 1 + is_smoke = FALSE + incendiary_reagent = new /datum/reagent/napalm/ut() if (mine_safety) for(var/mob/living/carbon/human in range(incendiary_radius, src)) if (human.get_target_lock(iff_signal)) disarm() return + + if(is_smoke) + var/datum/effect_system/smoke_spread/phosphorus/smoke = new /datum/effect_system/smoke_spread/phosphorus/sharp + smoke.set_up(incendiary_radius, 0, loc) + smoke.start() + playsound(loc, 'sound/weapons/gun_sharp_explode.ogg', 100) + else + new /obj/flamer_fire(loc, cause_data, incendiary_reagent, incendiary_radius, null, FLAMESHAPE_STAR) + playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) + qdel(src) diff --git a/code/modules/projectiles/guns/specialist/sharp.dm b/code/modules/projectiles/guns/specialist/sharp.dm index 8db897a8d990..b9a4e4d72bff 100644 --- a/code/modules/projectiles/guns/specialist/sharp.dm +++ b/code/modules/projectiles/guns/specialist/sharp.dm @@ -34,7 +34,7 @@ /obj/item/weapon/gun/rifle/sharp/get_examine_text(mob/user) . = ..() - . += SPAN_INFO("Switching firemodes will toggle SAFE operation, with much greater IFF-logic of fired mines.") + . += SPAN_INFO("Switching firemodes will toggle SAFE mode operation, with much greater IFF-logic of fired mines when activated.") /obj/item/weapon/gun/rifle/sharp/set_bullet_traits() LAZYADD(traits_to_give, list( @@ -215,7 +215,7 @@ var/explosion_falloff = 35 var/cause_data = create_cause_data("P9 SHARP Rifle", shooter) if (mine_safety) - for(var/mob/living/carbon/human in range(explosion_strength / explosion_falloff, target)) + for(var/mob/living/carbon/human in range((explosion_strength / explosion_falloff) - 1, target)) if (human.get_target_lock(shooter.faction_group)) playsound(target, 'sound/weapons/smartgun_fail.ogg', target, 25) to_chat(target, SPAN_WARNING("[shot_dart] releases itself from you!")) From 18a6ae160c97eefa99fa73253e7b6830566ac959 Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 17:44:10 +0200 Subject: [PATCH 6/7] added square flameshape, level 4 incendiary is 5x5 --- code/__DEFINES/objects.dm | 1 + code/game/objects/items/explosives/mine.dm | 10 +++--- .../projectiles/guns/flamer/flameshape.dm | 33 +++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/code/__DEFINES/objects.dm b/code/__DEFINES/objects.dm index 33b6c3d1af88..30f9b8f04577 100644 --- a/code/__DEFINES/objects.dm +++ b/code/__DEFINES/objects.dm @@ -169,6 +169,7 @@ GLOBAL_LIST_INIT(RESTRICTED_CAMERA_NETWORKS, list( //Those networks can only be #define FLAMESHAPE_IRREGULAR "irregular" #define FLAMESHAPE_TRIANGLE "triangle" #define FLAMESHAPE_LINE "line" +#define FLAMESHAPE_SQUARE "square" #define FLAME_REAGENT_USE_AMOUNT 1 diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index a3a8c4c05d12..12601ce28c0f 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -597,20 +597,20 @@ incendiary_radius = 2 is_smoke = TRUE else if(mine_level == 2) - incendiary_radius = 1 + incendiary_radius = 2 is_smoke = FALSE incendiary_reagent = new /datum/reagent/napalm/green() else if(mine_level == 3) - incendiary_radius = 1 + incendiary_radius = 2 is_smoke = FALSE incendiary_reagent = new /datum/reagent/napalm/ut() else - incendiary_radius = 1 + incendiary_radius = 3 is_smoke = FALSE incendiary_reagent = new /datum/reagent/napalm/ut() if (mine_safety) - for(var/mob/living/carbon/human in range(incendiary_radius, src)) + for(var/mob/living/carbon/human in range(is_smoke ? incendiary_radius : incendiary_radius - 1, src)) if (human.get_target_lock(iff_signal)) disarm() return @@ -621,7 +621,7 @@ smoke.start() playsound(loc, 'sound/weapons/gun_sharp_explode.ogg', 100) else - new /obj/flamer_fire(loc, cause_data, incendiary_reagent, incendiary_radius, null, FLAMESHAPE_STAR) + new /obj/flamer_fire(loc, cause_data, incendiary_reagent, incendiary_radius, null, FLAMESHAPE_SQUARE) playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 45) qdel(src) diff --git a/code/modules/projectiles/guns/flamer/flameshape.dm b/code/modules/projectiles/guns/flamer/flameshape.dm index fffcf1a53ee3..d11504e3a56c 100644 --- a/code/modules/projectiles/guns/flamer/flameshape.dm +++ b/code/modules/projectiles/guns/flamer/flameshape.dm @@ -257,6 +257,38 @@ if(F.to_call) F.to_call.Invoke() +/datum/flameshape/square + name = "Square" + id = FLAMESHAPE_SQUARE + +/datum/flameshape/square/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1) + var/turf/source_turf = get_turf(F.loc) + var/radius = fire_spread_amount - 1 + + for(var/turf/T in range(radius, source_turf)) + if(T == source_turf) + continue + if(istype(T, /turf/open/space)) + continue + + var/obj/flamer_fire/foundflame = locate() in T + if(foundflame && foundflame.tied_reagent == F.tied_reagent) + continue + + if(T.density) + T.flamer_fire_act(burn_dam, F.weapon_cause_data) + continue + + var/obj/flamer_fire/temp = new() + var/atom/A = LinkBlocked(temp, source_turf, T) + + if(A) + A.flamer_fire_act(burn_dam, F.weapon_cause_data) + if(A.flags_atom & ON_BORDER) + continue + + var/ring = get_dist(source_turf, T) + addtimer(CALLBACK(src, PROC_REF(generate_fire), T, F, 0, FLAMESHAPE_SQUARE, null, FALSE, fuel_pressure), ring) GLOBAL_LIST_INIT(flameshapes, list( FLAMESHAPE_DEFAULT = new /datum/flameshape/default(), @@ -265,4 +297,5 @@ GLOBAL_LIST_INIT(flameshapes, list( FLAMESHAPE_MINORSTAR = new /datum/flameshape/star/minor(), FLAMESHAPE_TRIANGLE = new /datum/flameshape/triangle(), FLAMESHAPE_LINE = new /datum/flameshape/line(), + FLAMESHAPE_SQUARE = new /datum/flameshape/square() )) From f682b6de4e67e280f746f8dddc29f133009fd3bb Mon Sep 17 00:00:00 2001 From: MPhonks Date: Mon, 27 Jul 2026 20:15:00 +0200 Subject: [PATCH 7/7] balloon alert idiomatic usage fix --- code/modules/projectiles/guns/specialist/sharp.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/specialist/sharp.dm b/code/modules/projectiles/guns/specialist/sharp.dm index b9a4e4d72bff..3491b08b6d4d 100644 --- a/code/modules/projectiles/guns/specialist/sharp.dm +++ b/code/modules/projectiles/guns/specialist/sharp.dm @@ -117,11 +117,11 @@ if(current_mine_safety) current_mine_safety = FALSE mine_mode_notice += "[icon2html(src, user)] You set [src]'s mine mode to DANGER mode. Explosive ammo will blow up regardless of friendly presence." - user.balloon_alert(user, "DANGER mode activated.") + user.balloon_alert(user, "activated DANGER mode") else current_mine_safety = TRUE mine_mode_notice += "[icon2html(src, user)] You set [src]'s mine mode to SAFE mode. Explosive ammo will NEVER blow up near detected friendly targets." - user.balloon_alert(user, "SAFE mode activated.") + user.balloon_alert(user, "activated SAFE mode") to_chat(user, SPAN_NOTICE(mine_mode_notice)) var/datum/action/item_action/specialist/sharp_firemode_ability/SFA = locate(/datum/action/item_action/specialist/sharp_firemode_ability) in actions