[(99.5%) MODULAR] Marine ERT Rework: Pass The Ammunition (#14321)
* marine modsuit code * modsuit icons pt1 * marine icons pt2 * modified equipment * modified gear * stray space * module updates * moar icons! * creatin' custom fire sounds!! * m44a firing noise * fixin' stuff * m44a pulse rifle * m44a variants * fixin' shit * more fixes * one line fix * woo more fixes * final fixes(?) * honestly quite incredible * mag icon fixes * m44a ammo belt * marine survival box * pulse rifles for everyone! * more updates * honestly quite incredible * honestly quite incredible * balancing * underbarrel shotgun adjustments * buckshot > slugs * buckshot again * god bless buckshot, yo * crowbar dont fit * ninety-nine > 99 * hammer time * hammer time * woot * marine smartgun * smartgunner modsuit * blessing from god * cleaning code * icon fixes * dme checks * more icon fixes * << massive idiot * << lol * goodbye old turret * use more gun™️ * we did it boys, syndicate smartgun is no more Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> * we did it boys, syndicate smartgun is more Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> * we did it boys, attack_item is more Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> * single letter subtype? cringe! * see above * YEP * linter issue (ツ) * stray s moment * merge master of upstream * fix the dme * Revert "Fixing14321" * // * woo * refactor these nuts Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> * sniping’s a good job mate * shieldin’ Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> * fuck (fuck) * fuck * UNGA * req changes Co-authored-by: John Doe <gamingskeleton3@gmail.com> Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> Co-authored-by: nevimer <foxmail@protonmail.com>
@@ -1,4 +1,9 @@
|
||||
// Black Mesa away mission factions
|
||||
|
||||
#define FACTION_XEN "xen"
|
||||
#define FACTION_HECU "hecu"
|
||||
#define FACTION_BLACKOPS "blackops"
|
||||
#define FACTION_BLACKMESA "blackmesa"
|
||||
|
||||
// ERT faction
|
||||
#define FACTION_ERT "ert"
|
||||
|
||||
@@ -68,3 +68,6 @@
|
||||
|
||||
/// From mob/living/*/set_combat_mode(): (new_state)
|
||||
#define COMSIG_LIVING_COMBAT_MODE_TOGGLE "living_combat_mode_toggle"
|
||||
|
||||
/// To chambered round on gun's `process_fire()`: (list/iff_factions)
|
||||
#define COMSIG_CHAMBERED_BULLET_FIRE "chambered_bullet_fire"
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
forge_objectives()
|
||||
if(equip_ert)
|
||||
equipERT()
|
||||
owner?.current.faction |= FACTION_ERT //SKYRAT ADDITION
|
||||
. = ..()
|
||||
|
||||
/datum/antagonist/ert/get_team()
|
||||
|
||||
@@ -182,6 +182,11 @@
|
||||
var/static/list/projectile_connections = list(
|
||||
COMSIG_ATOM_ENTERED = .proc/on_entered,
|
||||
)
|
||||
//SKYRAT ADDITION START
|
||||
/// If this should be able to hit the target even on direct firing when `ignored_factions` applies
|
||||
var/ignore_direct_target = FALSE
|
||||
//SKYRAT ADDITION END
|
||||
|
||||
/// If true directly targeted turfs can be hit
|
||||
var/can_hit_turfs = FALSE
|
||||
|
||||
@@ -505,7 +510,7 @@
|
||||
var/mob/M = firer
|
||||
if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
|
||||
return FALSE
|
||||
if(ignored_factions?.len && ismob(target) && !direct_target)
|
||||
if(ignored_factions?.len && ismob(target) && (!direct_target || ignore_direct_target)) //SKYRAT EDIT: ignore_direct_target
|
||||
var/mob/target_mob = target
|
||||
if(faction_check(target_mob.faction, ignored_factions))
|
||||
return FALSE
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
add_overlay = FALSE
|
||||
|
||||
if(add_overlay)
|
||||
icon_to_use = overlay_icon_file
|
||||
var/mutable_appearance/module_icon = mutable_appearance(icon_to_use, icon_state_to_use, layer = standing.layer + 0.1) // Just changed the raw icon path to icon_to_use and the used_overlay to icon_state_to_use
|
||||
module_icon.appearance_flags |= RESET_COLOR
|
||||
. += module_icon
|
||||
|
||||
|
Before Width: | Height: | Size: 530 B After Width: | Height: | Size: 706 B |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,115 @@
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a
|
||||
name = "\improper NT M44A Pulse Rifle"
|
||||
desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package."
|
||||
icon_state = "m44a"
|
||||
inhand_icon_state = "m44a"
|
||||
icon = 'modular_skyrat/modules/marines/icons/m44a.dmi'
|
||||
righthand_file = 'modular_skyrat/modules/marines/icons/m44a_r.dmi'
|
||||
lefthand_file = 'modular_skyrat/modules/marines/icons/m44a_l.dmi'
|
||||
fire_sound = 'modular_skyrat/modules/marines/sound/m44a.ogg'
|
||||
fire_delay = 1
|
||||
burst_size = 3
|
||||
spread = 6
|
||||
pin = /obj/item/firing_pin/implant/mindshield
|
||||
can_suppress = FALSE
|
||||
emp_damageable = FALSE
|
||||
can_bayonet = FALSE
|
||||
realistic = FALSE
|
||||
mag_display = TRUE
|
||||
mag_display_ammo = FALSE
|
||||
mag_type = /obj/item/ammo_box/magazine/m44a
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_OCLOTHING
|
||||
company_flag = COMPANY_NANOTRASEN
|
||||
|
||||
/obj/item/ammo_box/magazine/m44a
|
||||
name = "m44a magazine (.300 compressed)"
|
||||
desc = "This magazine uses a bluespace compression chamber to hold a maximum of ninety-nine .300 caliber caseless rounds for the M44A pulse rifle."
|
||||
icon = 'modular_skyrat/modules/marines/icons/m44a.dmi'
|
||||
icon_state = "300compressed"
|
||||
max_ammo = 99
|
||||
multiple_sprites = AMMO_BOX_FULL_EMPTY_BASIC
|
||||
ammo_type = /obj/item/ammo_casing/caseless/c300
|
||||
caliber = "300comp"
|
||||
|
||||
/obj/item/ammo_casing/caseless/c300
|
||||
name = ".300 caseless round"
|
||||
desc = "A .300 caseless round for proprietary Nanotrasen firearms."
|
||||
caliber = "300comp"
|
||||
projectile_type = /obj/projectile/bullet/a300
|
||||
|
||||
/obj/projectile/bullet/a300
|
||||
name = ".300 caseless bullet"
|
||||
damage = 13
|
||||
armour_penetration = 30 //gonna actually kill the brit that made this var require a U in armor
|
||||
embedding = null
|
||||
shrapnel_type = null
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped
|
||||
name = "\improper NT M44AS Pulse Rifle"
|
||||
desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a long-range scope."
|
||||
icon_state = "m44a_s"
|
||||
inhand_icon_state = "m44a_s"
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/scope, range_modifier = 2.2)
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg
|
||||
name = "\improper M2 auto-shotgun underbarrel"
|
||||
desc = "This shouldn't be heeere!"
|
||||
can_suppress = FALSE
|
||||
has_gun_safety = FALSE
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/as2/ubsg
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/shot/as2/ubsg
|
||||
max_ammo = 3
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun
|
||||
name = "\improper NT M44ASG Pulse Rifle"
|
||||
desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a two-round semi-automatic underbarrel 12 gauge shotgun."
|
||||
icon_state = "m44a_sg"
|
||||
inhand_icon_state = "m44a_sg"
|
||||
/// Reference to the underbarrel shotgun
|
||||
var/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/underbarrel
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Initialize()
|
||||
. = ..()
|
||||
underbarrel = new /obj/item/gun/ballistic/shotgun/automatic/as2/ubsg(src)
|
||||
update_appearance()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/afterattack_secondary(atom/target, mob/living/user, flag, params)
|
||||
underbarrel.afterattack(target, user, flag, params)
|
||||
return SECONDARY_ATTACK_CONTINUE_CHAIN
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/attackby(obj/item/attacking_item, mob/user, params)
|
||||
if(!istype(attacking_item, /obj/item/ammo_casing))
|
||||
..()
|
||||
if(istype(attacking_item, underbarrel.magazine.ammo_type))
|
||||
underbarrel.attack_self(user)
|
||||
underbarrel.attackby(attacking_item, user, params)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher
|
||||
name = "\improper NT M44AGL Pulse Rifle"
|
||||
desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with an underbarrel grenade launcher, and a red dot scope to help align it. Compensating for something?"
|
||||
icon_state = "m44a_gl"
|
||||
inhand_icon_state = "m44a_gl"
|
||||
/// Underbarrel grenade launcher reference
|
||||
var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Initialize()
|
||||
. = ..()
|
||||
underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src)
|
||||
update_appearance()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/afterattack_secondary(atom/target, mob/living/user, flag, params)
|
||||
underbarrel.afterattack(target, user, flag, params)
|
||||
return SECONDARY_ATTACK_CONTINUE_CHAIN
|
||||
|
||||
/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/attackby(obj/item/attacking_item, mob/user, params)
|
||||
if(!istype(attacking_item, /obj/item/ammo_casing))
|
||||
..()
|
||||
if(istype(attacking_item, underbarrel.magazine.ammo_type))
|
||||
underbarrel.attack_self(user)
|
||||
underbarrel.attackby(attacking_item, user, params)
|
||||
@@ -1,16 +0,0 @@
|
||||
// 1 2 3 4 marine corps marine corps
|
||||
//parent type already has EMP protection and stuff
|
||||
|
||||
/obj/item/storage/backpack/ert/marine
|
||||
name = "marine backpack"
|
||||
desc = "A spacious backpack with lots of pockets and a magnetic latching mechanism to attach to whatever gear one might wear."
|
||||
icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
|
||||
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
|
||||
icon_state = "marine"
|
||||
inhand_icon_state = "securitypack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/backpack/ert/marine/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_combined_w_class = 30
|
||||
@@ -0,0 +1,91 @@
|
||||
// 1 2 3 4 marine corps marine corps
|
||||
|
||||
/datum/mod_theme/marines
|
||||
name = "marine"
|
||||
desc = "Developed by Nanotrasen in collaboration with multiple high-profile contractors, this specialized suit is made for high-intensity combat."
|
||||
extended_desc = "A black and blue suit of Nanotrasen design made to be utilized by corporate space marines \
|
||||
in active combat situations where standard gear won't cut it. Lightweight composite armor plating over \
|
||||
a strong exoskeleton ensures that no speed is sacrificed for protection, and a variety of unique \
|
||||
modules keep the wearer efficient during active combat situations. When response teams fail, \
|
||||
you're the backup's backup - the desperate measures."
|
||||
default_skin = "marine"
|
||||
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, FIRE = 100, ACID = 50, WOUND = 20) //honestly quite incredible
|
||||
atom_flags = PREVENT_CONTENTS_EXPLOSION_1
|
||||
resistance_flags = FIRE_PROOF|ACID_PROOF
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
siemens_coefficient = 0
|
||||
slowdown_inactive = 0.5
|
||||
slowdown_active = 0
|
||||
complexity_max = DEFAULT_MAX_COMPLEXITY + 10 //drr drr drr
|
||||
allowed_suit_storage = list(
|
||||
/obj/item/flashlight,
|
||||
/obj/item/tank/internals,
|
||||
/obj/item/ammo_box,
|
||||
/obj/item/ammo_casing,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/item/assembly/flash,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/gun/ballistic,
|
||||
/obj/item/melee/hammer,
|
||||
)
|
||||
skins = list(
|
||||
"marine" = list(
|
||||
MOD_ICON_OVERRIDE = 'modular_skyrat/modules/marines/icons/mod.dmi',
|
||||
MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/marines/icons/wornmod.dmi',
|
||||
HELMET_FLAGS = list(
|
||||
UNSEALED_LAYER = NECK_LAYER,
|
||||
UNSEALED_CLOTHING = SNUG_FIT,
|
||||
SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|FLASH_PROTECTION_WELDER,
|
||||
UNSEALED_INVISIBILITY = HIDEFACIALHAIR,
|
||||
SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT,
|
||||
SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF,
|
||||
),
|
||||
CHESTPLATE_FLAGS = list(
|
||||
UNSEALED_CLOTHING = THICKMATERIAL,
|
||||
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
|
||||
SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDETAIL,
|
||||
),
|
||||
GAUNTLETS_FLAGS = list(
|
||||
UNSEALED_CLOTHING = THICKMATERIAL,
|
||||
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
|
||||
CAN_OVERSLOT = TRUE,
|
||||
),
|
||||
BOOTS_FLAGS = list(
|
||||
UNSEALED_CLOTHING = THICKMATERIAL,
|
||||
SEALED_CLOTHING = STOPSPRESSUREDAMAGE,
|
||||
CAN_OVERSLOT = TRUE,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
/obj/item/mod/control/pre_equipped/marine
|
||||
theme = /datum/mod_theme/marines
|
||||
applied_cell = /obj/item/stock_parts/cell/bluespace
|
||||
initial_modules = list(
|
||||
/obj/item/mod/module/storage/large_capacity,
|
||||
/obj/item/mod/module/emp_shield,
|
||||
/obj/item/mod/module/magnetic_harness,
|
||||
/obj/item/mod/module/holster,
|
||||
/obj/item/mod/module/flashlight,
|
||||
/obj/item/mod/module/jetpack,
|
||||
/obj/item/mod/module/noslip,
|
||||
/obj/item/mod/module/power_kick,
|
||||
/obj/item/mod/module/megaphone,
|
||||
/obj/item/mod/module/springlock/contractor,
|
||||
/obj/item/mod/module/dna_lock, //in lieu of req_access
|
||||
/obj/item/mod/module/visor/sechud, //for identifying teammates also in suits
|
||||
)
|
||||
|
||||
/obj/item/mod/control/pre_equipped/marine/engineer //smartgunner version of modsuit, with less versatile modules but the ALMIGHTY SMARTGUN
|
||||
theme = /datum/mod_theme/marines
|
||||
applied_cell = /obj/item/stock_parts/cell/bluespace
|
||||
initial_modules = list(
|
||||
/obj/item/mod/module/storage/large_capacity,
|
||||
/obj/item/mod/module/emp_shield/advanced,
|
||||
/obj/item/mod/module/flashlight,
|
||||
/obj/item/mod/module/jetpack,
|
||||
/obj/item/mod/module/noslip,
|
||||
/obj/item/mod/module/dna_lock,
|
||||
/obj/item/mod/module/visor/sechud,
|
||||
/obj/item/mod/module/smartgun/marines,
|
||||
)
|
||||
@@ -0,0 +1,32 @@
|
||||
/obj/item/mod/module/smartgun
|
||||
name = "MOD smartgun module"
|
||||
desc = "A bulky module that attahces to the back of a MODsuit, this \
|
||||
module is comprised of two parts, a holster and the M63A4 \"Smartgun\". \
|
||||
The holster works as storage for a gun that would be otherwise uncarryable, \
|
||||
and the gun itself fires at a blistering rate of fire, capable of suppressing enemies \
|
||||
without hurting teammates thanks to IFF technology."
|
||||
icon_state = "smartgun"
|
||||
icon = 'modular_skyrat/modules/marines/icons/items/module.dmi'
|
||||
overlay_icon_file = 'modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi'
|
||||
module_type = MODULE_ACTIVE
|
||||
complexity = 3
|
||||
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
|
||||
device = /obj/item/gun/ballistic/automatic/smart_machine_gun
|
||||
incompatible_modules = list(/obj/item/mod/module/smartgun)
|
||||
cooldown_time = 0.5 SECONDS
|
||||
overlay_state_inactive = "module_smartgun_off" //appears on back when it's off
|
||||
overlay_state_active = "module_smartgun_on"
|
||||
/// Power consumed per bullet fired
|
||||
var/power_per_bullet = 25
|
||||
|
||||
/obj/item/mod/module/smartgun/on_activation()
|
||||
. = ..()
|
||||
RegisterSignal(device, COMSIG_GUN_FIRED, .proc/consume_energy)
|
||||
|
||||
/obj/item/mod/module/smartgun/proc/consume_energy(mob/user, atom/target, params, zone_override)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
drain_power(power_per_bullet)
|
||||
|
||||
/obj/item/mod/module/smartgun/marines
|
||||
removable = FALSE //no stealing!!
|
||||
@@ -0,0 +1,148 @@
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun
|
||||
name = "\improper M63A4 \"Smartgun\""
|
||||
desc = "A weapon with a blistering rate of fire, so heavy that it needs to be mounted on a modsuit to wield. \
|
||||
It's equipped with IFF technology, allowing the bullets to intentionally miss friendly targets."
|
||||
icon = 'modular_skyrat/modules/marines/icons/items/guns.dmi'
|
||||
lefthand_file = 'modular_skyrat/modules/marines/icons/mobs/guns_l.dmi'
|
||||
righthand_file = 'modular_skyrat/modules/marines/icons/mobs/guns_r.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi'
|
||||
icon_state = "smartgun"
|
||||
worn_icon_state = "module_smartgun_off" // just in case. You shouldn't be able to do this, though
|
||||
inhand_icon_state = "smartgun"
|
||||
fire_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/mg34_fire.ogg'
|
||||
rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg'
|
||||
suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
|
||||
fire_sound_volume = 70
|
||||
fire_select_modes = list(SELECT_SEMI_AUTOMATIC, SELECT_FULLY_AUTOMATIC)
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
spread = 18
|
||||
mag_type = /obj/item/ammo_box/magazine/smartgun_drum
|
||||
can_suppress = FALSE
|
||||
fire_delay = 0.5
|
||||
realistic = FALSE
|
||||
bolt_type = BOLT_TYPE_OPEN
|
||||
show_bolt_icon = FALSE
|
||||
tac_reloads = FALSE
|
||||
burst_size = 1
|
||||
pin = /obj/item/firing_pin/implant/mindshield
|
||||
mag_display_ammo = FALSE
|
||||
mag_display = FALSE
|
||||
/// If the gun's dustcover is open or not
|
||||
var/cover_open = FALSE
|
||||
/// Factions that the gun cannot shoot under any circumstances
|
||||
var/list/iff_factions = list("ert")
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/update_icon_updates_onmob)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
|
||||
. = ..()
|
||||
if(chambered)
|
||||
SEND_SIGNAL(chambered, COMSIG_CHAMBERED_BULLET_FIRE, iff_factions)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<b>RMB with an empty hand</b> to [cover_open ? "close" : "open"] the dust cover."
|
||||
if(cover_open && magazine)
|
||||
. += span_notice("It seems like you could use an <b>empty hand</b> to remove the magazine.")
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/attack_hand_secondary(mob/user, list/modifiers)
|
||||
if(!user.canUseTopic(src))
|
||||
return
|
||||
cover_open = !cover_open
|
||||
to_chat(user, span_notice("You [cover_open ? "open" : "close"] [src]'s cover."))
|
||||
playsound(src, 'sound/weapons/gun/l6/l6_door.ogg', 60, TRUE)
|
||||
update_appearance()
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/can_shoot()
|
||||
if(cover_open)
|
||||
balloon_alert_to_viewers("cover open!")
|
||||
return FALSE
|
||||
return chambered
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/eject_magazine(mob/user, display_message = TRUE, obj/item/ammo_box/magazine/tac_load = null)
|
||||
if(!cover_open)
|
||||
to_chat(user, span_warning("The cover is closed! Open it before ejecting the magazine!"))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/attackby(obj/item/attack_item, mob/user, params)
|
||||
if(!cover_open && istype(attack_item, mag_type))
|
||||
to_chat(user, span_warning("[src]'s dust cover prevents a magazine from being fit."))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/update_overlays()
|
||||
. = ..()
|
||||
. += "[base_icon_state]_door_open"
|
||||
|
||||
/obj/item/gun/ballistic/automatic/smart_machine_gun/unrestricted
|
||||
pin = /obj/item/firing_pin
|
||||
// Magazine itself
|
||||
|
||||
/obj/item/ammo_box/magazine/smartgun_drum
|
||||
name = "smartgun drum (10x28mm caseless)"
|
||||
icon = 'modular_skyrat/modules/marines/icons/items/ammo.dmi'
|
||||
icon_state = "smartgun_drum"
|
||||
ammo_type = /obj/item/ammo_casing/smart/caseless/a10x28
|
||||
caliber = "a10x28"
|
||||
max_ammo = 500
|
||||
multiple_sprites = AMMO_BOX_FULL_EMPTY
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
// Smart ammo casings
|
||||
|
||||
/obj/item/ammo_casing/smart
|
||||
icon = 'modular_skyrat/modules/gunsgalore/icons/ammo/ammo.dmi'
|
||||
|
||||
/obj/item/ammo_casing/smart/Initialize(mapload)
|
||||
. = ..()
|
||||
RegisterSignal(src, COMSIG_CHAMBERED_BULLET_FIRE, .proc/iff_transfer)
|
||||
|
||||
/obj/item/ammo_casing/smart/proc/iff_transfer(datum/source, list/iff_factions)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(istype(loaded_projectile, /obj/projectile/bullet/smart))
|
||||
var/obj/projectile/bullet/smart/smart_proj = loaded_projectile
|
||||
smart_proj.ignored_factions = iff_factions.Copy()
|
||||
|
||||
/obj/item/ammo_casing/smart/caseless
|
||||
firing_effect_type = null
|
||||
heavy_metal = FALSE
|
||||
|
||||
/obj/item/ammo_casing/smart/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
|
||||
if (!..()) //failed firing
|
||||
return FALSE
|
||||
if(istype(fired_from, /obj/item/gun))
|
||||
var/obj/item/gun/shot_from = fired_from
|
||||
if(shot_from.chambered == src)
|
||||
shot_from.chambered = null //Nuke it. Nuke it now.
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
/obj/item/ammo_casing/smart/caseless/update_icon_state()
|
||||
. = ..()
|
||||
icon_state = "[initial(icon_state)]"
|
||||
|
||||
/obj/item/ammo_casing/smart/caseless/a10x28
|
||||
name = "10x28mm bullet"
|
||||
desc = "A 10x28m caseless bullet."
|
||||
icon_state = "792x57-casing"
|
||||
caliber = "a10x28"
|
||||
projectile_type = /obj/projectile/bullet/smart/a10x28
|
||||
|
||||
// Smart bullets
|
||||
|
||||
/obj/projectile/bullet/smart
|
||||
ignore_direct_target = TRUE
|
||||
|
||||
/obj/projectile/bullet/smart/a10x28
|
||||
name = "10x28mm bullet"
|
||||
damage = 12
|
||||
armour_penetration = 5
|
||||
wound_bonus = 15
|
||||
wound_falloff_tile = 1
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 423 B |
|
After Width: | Height: | Size: 475 B |
|
After Width: | Height: | Size: 792 B |
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 644 B |
|
After Width: | Height: | Size: 529 B |
|
After Width: | Height: | Size: 529 B |
|
After Width: | Height: | Size: 643 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 601 B |
|
After Width: | Height: | Size: 648 B |
|
After Width: | Height: | Size: 475 B |
|
After Width: | Height: | Size: 640 B |
|
After Width: | Height: | Size: 1.8 KiB |
@@ -1,9 +1,54 @@
|
||||
/datum/outfit/centcom/ert/marine
|
||||
suit_store = /obj/item/gun/ballistic/automatic/cmg
|
||||
belt = /obj/item/storage/belt/military/assault/full/cmg
|
||||
|
||||
/datum/outfit/centcom/ert/marine/medic
|
||||
suit_store = /obj/item/storage/belt/holster/detective/full/ert/skyrat
|
||||
|
||||
/datum/outfit/centcom/ert/marine/engineer
|
||||
suit_store = /obj/item/gun/ballistic/shotgun/automatic/as2
|
||||
/datum/outfit/centcom/ert/marine //commander
|
||||
suit_store = /obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher
|
||||
belt = /obj/item/storage/belt/military/assault/full/m44a
|
||||
back = /obj/item/mod/control/pre_equipped/marine
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/survival/engineer/marine = 1,
|
||||
/obj/item/melee/baton/security/loaded = 1,
|
||||
/obj/item/storage/box/handcuffs = 1,
|
||||
/obj/item/ammo_box/a40mm = 2, //gods must be strong
|
||||
)
|
||||
l_hand = null
|
||||
r_hand = null
|
||||
|
||||
/datum/outfit/centcom/ert/marine/security //generic and/or heavy
|
||||
suit_store = /obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun
|
||||
belt = /obj/item/storage/belt/military/assault/full/m44a
|
||||
back = /obj/item/mod/control/pre_equipped/marine
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/survival/engineer/marine = 1,
|
||||
/obj/item/melee/baton/security/loaded = 1,
|
||||
/obj/item/storage/box/handcuffs = 1,
|
||||
/obj/item/ammo_box/advanced/s12gauge/buckshot/marine = 2,
|
||||
)
|
||||
l_hand = null
|
||||
r_hand = null
|
||||
|
||||
/datum/outfit/centcom/ert/marine/medic //medic
|
||||
suit_store = /obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped
|
||||
belt = /obj/item/storage/belt/military/assault/full/m44a
|
||||
back = /obj/item/mod/control/pre_equipped/marine
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/survival/engineer/marine = 1,
|
||||
/obj/item/reagent_containers/hypospray/combat = 1,
|
||||
/obj/item/storage/medkit/regular = 1,
|
||||
/obj/item/storage/medkit/advanced = 1,
|
||||
/obj/item/sensor_device = 1,
|
||||
/obj/item/pinpointer/crew/prox = 1,
|
||||
/obj/item/stack/medical/gauze/twelve = 1,
|
||||
/obj/item/reagent_containers/syringe = 1,
|
||||
/obj/item/reagent_containers/glass/bottle/formaldehyde = 1,
|
||||
/obj/item/stack/sticky_tape/surgical = 1,
|
||||
)
|
||||
l_hand = /obj/item/gun/medbeam
|
||||
r_hand = null
|
||||
|
||||
/datum/outfit/centcom/ert/marine/engineer //engineer
|
||||
suit_store = /obj/item/melee/hammer //doesn't need a rifle
|
||||
back = /obj/item/mod/control/pre_equipped/marine/engineer
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/survival/engineer/marine = 1,
|
||||
/obj/item/ammo_box/magazine/smartgun_drum = 4, //AND WE'LL ALL STAY FREE
|
||||
)
|
||||
l_hand = null
|
||||
r_hand = null
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
/obj/item/storage/belt/holster/detective/full/ert/skyrat
|
||||
/obj/item/storage/belt/military/assault/full/m44a
|
||||
|
||||
/obj/item/storage/belt/holster/detective/full/ert/skyrat/PopulateContents()
|
||||
/obj/item/storage/belt/military/assault/full/m44a/PopulateContents()
|
||||
generate_items_inside(list(
|
||||
/obj/item/gun/ballistic/automatic/pistol/firefly = 1,
|
||||
/obj/item/ammo_box/magazine/multi_sprite/firefly = 2,
|
||||
/obj/item/ammo_box/magazine/m44a = 6,
|
||||
), src)
|
||||
|
||||
/obj/item/storage/belt/military/assault/full/cmg/PopulateContents()
|
||||
generate_items_inside(list(
|
||||
/obj/item/ammo_box/magazine/multi_sprite/cmg/lethal = 6,
|
||||
), src)
|
||||
/obj/item/ammo_box/advanced/s12gauge/buckshot/marine
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/storage/box/survival/engineer/marine
|
||||
name = "military survival box"
|
||||
desc = "A box issued to Nanotrasen space marines, containing field essentials. This one is labelled to contain an extended-capacity tank."
|
||||
illustration = "extendedtank"
|
||||
internal_type = /obj/item/tank/internals/emergency_oxygen/engi
|
||||
|
||||
/obj/item/storage/box/survival/engineer/marine/PopulateContents()
|
||||
..()
|
||||
new /obj/item/storage/crayons(src) //absolutely required
|
||||
|
||||
@@ -5497,7 +5497,10 @@
|
||||
#include "modular_skyrat\modules\mapping\code\turnstile.dm"
|
||||
#include "modular_skyrat\modules\mapping\code\vgdecals.dm"
|
||||
#include "modular_skyrat\modules\mapping\code\wardrobes.dm"
|
||||
#include "modular_skyrat\modules\marines\code\miscellaneous.dm"
|
||||
#include "modular_skyrat\modules\marines\code\gear.dm"
|
||||
#include "modular_skyrat\modules\marines\code\mod.dm"
|
||||
#include "modular_skyrat\modules\marines\code\modsuit_modules.dm"
|
||||
#include "modular_skyrat\modules\marines\code\smartgun.dm"
|
||||
#include "modular_skyrat\modules\medical\code\bodypart.dm"
|
||||
#include "modular_skyrat\modules\medical\code\bodypart_aid.dm"
|
||||
#include "modular_skyrat\modules\medical\code\carbon_defense.dm"
|
||||
|
||||