diff --git a/code/__DEFINES/~RUtgmc_defines/calibers.dm b/code/__DEFINES/~RUtgmc_defines/calibers.dm index 57b35e29f4927..19e85ab71dfdc 100644 --- a/code/__DEFINES/~RUtgmc_defines/calibers.dm +++ b/code/__DEFINES/~RUtgmc_defines/calibers.dm @@ -1,2 +1,6 @@ #define CALIBER_44LS ".44 Long Special" #define CALIBER_500 ".500 Nigro Express" +#define CALIBER_40ACP ".40 ACP" +#define CALIBER_40ACPL ".40 ACPL" +#define CALIBER_9X18 "9x18mm" +#define CALIBER_DART "dart" diff --git a/code/__DEFINES/~RUtgmc_defines/loadout.dm b/code/__DEFINES/~RUtgmc_defines/loadout.dm index 52ea5e4c1b856..9849873a9c012 100644 --- a/code/__DEFINES/~RUtgmc_defines/loadout.dm +++ b/code/__DEFINES/~RUtgmc_defines/loadout.dm @@ -2,6 +2,7 @@ GLOBAL_LIST_INIT(engineer_gear_listed_products, list( /obj/effect/vendor_bundle/engi = list(CAT_ESS, "Essential Engineer Set", 0, "white"), + /obj/item/engi_upgrade_kit = list(CAT_ENGSUP, "Sentry Upgrade Kit", 15, "blue"), /obj/item/stack/sheet/metal/small_stack = list(CAT_ENGSUP, "Metal x10", METAL_PRICE_IN_GEAR_VENDOR, "orange"), /obj/item/stack/sheet/plasteel/small_stack = list(CAT_ENGSUP, "Plasteel x10", PLASTEEL_PRICE_IN_GEAR_VENDOR, "orange"), /obj/item/stack/sandbags_empty/half = list(CAT_ENGSUP, "Sandbags x25", SANDBAG_PRICE_IN_GEAR_VENDOR, "orange"), @@ -11,7 +12,6 @@ GLOBAL_LIST_INIT(engineer_gear_listed_products, list( /obj/item/explosive/plastique = list(CAT_ENGSUP, "Plastique explosive", 2, "orange3"), /obj/item/explosive/plastique/genghis_charge = list(CAT_ENGSUP, "EX-62 Genghis incendiary charge", 6, "orange3"), /obj/item/detpack = list(CAT_ENGSUP, "Detonation pack", 2, "orange3"), - /obj/item/storage/box/crate/minisentry = list(CAT_ENGSUP, "ST-580 point defense sentry kit", 45, "blue"), /obj/structure/closet/crate/uav_crate = list(CAT_ENGSUP, "Iguana Unmanned Vehicle", 50, "blue"), /obj/effect/teleporter_linker = list(CAT_ENGSUP, "Teleporters", 25, "blue"), /obj/item/tool/pickaxe/plasmacutter = list(CAT_ENGSUP, "Plasma cutter", 23, "blue"), @@ -70,6 +70,21 @@ GLOBAL_LIST_INIT(medic_gear_listed_products, list( /obj/item/defibrillator/gloves = list(CAT_MEDSUP, "Advanced medical gloves", 4, "yellow"), /obj/item/tweezers_advanced = list(CAT_MEDSUP, "Advanced Tweezers", 8, "yellow"), /obj/effect/vendor_bundle/stretcher = list(CAT_MEDSUP, "Medivac Stretcher", 16, "yellow"), + /obj/item/storage/ai2 = list(CAT_MEDSUP, "\"АИ\"-2 first aid kit", 16, "cyan"), + /obj/item/deployable_optable = list(CAT_MEDSUP, "Deployable Operating Table", 16, "yellow"), + /obj/item/storage/holster/belt/dartgun/full = list(CAT_MEDSUP, "DP-2 Dart Gun belt", 8, "blue"), + /obj/item/storage/dartbox/hypervene = list(CAT_MEDSUP, "Hypervene Dart Box", 2, "orange2"), + /obj/item/storage/dartbox/tramadol = list(CAT_MEDSUP, "Tramadol Dart Box", 2, "orange2"), + /obj/item/storage/dartbox/dylovene = list(CAT_MEDSUP, "Dylovene Dart Box", 2, "orange2"), + /obj/item/storage/dartbox/bicaridine = list(CAT_MEDSUP, "Bicaridine Dart Box", 4, "orange2"), + /obj/item/storage/dartbox/kelotane = list(CAT_MEDSUP, "Kelotane Dart Box", 4, "orange2"), + /obj/item/storage/dartbox/tricordrazine = list(CAT_MEDSUP, "Tricordrazine Dart Box", 4, "orange2"), + /obj/item/storage/dartbox/inaprovaline = list(CAT_MEDSUP, "Inaprovaline Dart Box", 6, "orange2"), + /obj/item/storage/dartbox/combat = list(CAT_MEDSUP, "Combat Dart Box", 10, "orange2"), + /obj/item/storage/dartbox/synaptizine = list(CAT_MEDSUP, "Synaptizine Dart Box", 12, "orange2"), + /obj/item/storage/dartbox/russian_red = list(CAT_MEDSUP, "Russian Red Dart Box", 12, "orange2"), + /obj/item/storage/dartbox/meraderm = list(CAT_MEDSUP, "Meraderm Dart Box", 16, "orange2"), + /obj/item/storage/dartbox/neuraline = list(CAT_MEDSUP, "Neuraline Dart Box", 24, "orange2"), )) //A way to give them everything at once that still works with loadouts would be nice, but barring that make sure that your point calculation is set up so they don't get more than what they're supposed to @@ -147,6 +162,7 @@ GLOBAL_LIST_INIT(leader_gear_listed_products, list( /obj/item/ammo_magazine/rifle/tx54/smoke = list(CAT_LEDSUP, "GL-54 tactical smoke Magazine for AR-55/GL-54", 1, "orange2"), /obj/item/ammo_magazine/rifle/tx54/smoke/tangle = list(CAT_LEDSUP, "GL-54 Tanglefoot Magazine for AR-55/GL-54", 3, "orange2"), /obj/item/cell/lasgun/lasrifle/recharger = list(CAT_LEDSUP, "Terra Experimental recharger battery", 4, "orange2"), + /obj/item/storage/ai2 = list(CAT_LEDSUP, "\"АИ\"-2 first aid kit", 12, "cyan"), /obj/item/storage/firstaid/adv = list(CAT_LEDSUP, "Advanced firstaid kit", 1, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/synaptizine = list(CAT_LEDSUP, "Injector (Synaptizine)", 2, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced = list(CAT_LEDSUP, "Injector (Advanced)", 2, "cyan"), @@ -227,10 +243,12 @@ GLOBAL_LIST_INIT(commander_gear_listed_products, list( /obj/item/tool/pickaxe/plasmacutter = list(CAT_FCSUP, "Plasma cutter", 23, "yellow"), /obj/item/clothing/glasses/welding/superior = list(CAT_FCSUP, "Superior welding goggles", 2, "yellow"), /obj/item/armor_module/module/welding/superior = list(CAT_FCSUP, "Superior welding module", 2, "yellow"), - /obj/item/storage/box/crate/minisentry = list(CAT_FCSUP, "ST-580 point defense sentry kit", 15, "yellow"), + /obj/item/weapon/gun/sentry/big_sentry = list(CAT_FCSUP, "ST-BASIC point defense sentry", 15, "yellow"), + /obj/item/engi_upgrade_kit = list(CAT_FCSUP, "Sentry Upgrade Kit", 5, "yellow"), /obj/item/healthanalyzer/gloves = list(CAT_FCSUP, "Health scanner gloves", 2, "yellow"), /obj/item/defibrillator/gloves = list(CAT_FCSUP, "Advanced medical gloves", 4, "yellow"), /obj/item/storage/pouch/medical_injectors/medic = list(CAT_FCSUP, "Advanced Injector Pouch", 16, "cyan"), + /obj/item/storage/ai2 = list(CAT_FCSUP, "\"АИ\"-2 first aid kit", 12, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/peridaxon_plus = list(CAT_FCSUP, "Injector (Peridaxon Plus)", 4, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/dexalinplus = list(CAT_FCSUP, "Injector (Dexalin Plus)", 1, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/quickclotplus = list(CAT_FCSUP, "Injector (Quick-Clot Plus)", 4, "cyan"), @@ -255,7 +273,8 @@ GLOBAL_LIST_INIT(synthetic_gear_listed_products, list( /obj/item/tool/weldingtool/hugetank = list(CAT_SYNTH, "High-capacity industrial blowtorch", 5, "orange"), /obj/item/explosive/plastique = list(CAT_SYNTH, "Plastique explosive", 2, "orange3"), /obj/item/explosive/plastique/genghis_charge = list(CAT_SYNTH, "EX-62 Genghis incendiary charge", 6, "orange3"), - /obj/item/storage/box/crate/minisentry = list(CAT_SYNTH, "ST-580 point defense sentry kit", 30, "blue"), + /obj/item/weapon/gun/sentry/big_sentry = list(CAT_SYNTH, "ST-BASIC point defense sentry", 30, "blue"), + /obj/item/engi_upgrade_kit = list(CAT_SYNTH, "Sentry Upgrade Kit", 15, "blue"), /obj/effect/teleporter_linker = list(CAT_SYNTH, "Teleporters", 15, "blue"), /obj/item/tool/pickaxe/plasmacutter = list(CAT_SYNTH, "Plasma cutter", 15, "blue"), /obj/item/attachable/buildasentry = list(CAT_SYNTH, "Build-A-Sentry Attachment", 30, "blue"), @@ -287,6 +306,8 @@ GLOBAL_LIST_INIT(synthetic_gear_listed_products, list( /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced = list(CAT_SYNTH, "Injector (Advanced)", 2, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/synaptizine = list(CAT_SYNTH, "Injector (Synaptizine)", 2, "cyan"), /obj/item/reagent_containers/hypospray/autoinjector/neuraline = list(CAT_SYNTH, "Injector (Neuraline)", 7, "cyan"), + /obj/item/storage/ai2 = list(CAT_SYNTH, "\"АИ\"-2 first aid kit", 8, "cyan"), + /obj/item/deployable_optable = list(CAT_SYNTH, "Deployable Operating Table", 12, "yellow"), /obj/item/healthanalyzer/gloves = list(CAT_SYNTH, "Health scanner gloves", 2, "yellow"), /obj/item/defibrillator/gloves = list(CAT_SYNTH, "Advanced medical gloves", 4, "yellow"), /obj/item/tweezers_advanced = list(CAT_SYNTH, "Advanced Tweezers", 8, "yellow"), diff --git a/code/__DEFINES/~RUtgmc_defines/loadout_variants.dm b/code/__DEFINES/~RUtgmc_defines/loadout_variants.dm index 098ee529afb7c..5da88902be56c 100644 --- a/code/__DEFINES/~RUtgmc_defines/loadout_variants.dm +++ b/code/__DEFINES/~RUtgmc_defines/loadout_variants.dm @@ -7,6 +7,10 @@ GLOBAL_LIST_INIT(loadout_variant_keys, list( CAPE_KILT = "kilt", CAPE_KILT_ALT = "kilt (alt)", CAPE_LONG = "long", + CAPE_HIGHLIGHT_LONG_LINE = "long_line", + CAPE_HIGHLIGHT_LONG_ARROW = "long_arrow", + CAPE_HIGHLIGHT_LONG_SKULL = "long_skull", + CAPE_HIGHLIGHT_LONG_MEDIC = "long_medic", CAPE_REGALY = "regaly", CAPE_ONELONG = "onelong", CAPE_HIGHLIGHT_NONE = "none", diff --git a/code/_onclick/hud/screen_objects/menu_text_objects.dm b/code/_onclick/hud/screen_objects/menu_text_objects.dm index 1b2db453df4ac..86f44be02c325 100644 --- a/code/_onclick/hud/screen_objects/menu_text_objects.dm +++ b/code/_onclick/hud/screen_objects/menu_text_objects.dm @@ -12,7 +12,7 @@ screen_loc = "CENTER" maptext_height = 480 maptext_width = 480 - maptext_x = 24 + maptext_x = 29 //RUTGMC EDIT maptext_y = 9 @@ -28,7 +28,7 @@ ///Clickable UI lobby objects which do stuff on Click() when pressed /atom/movable/screen/text/lobby/clickable maptext = "if you see this a coder was stinky" - icon = 'icons/UI_Icons/lobby_button.dmi' //hitbox prop + icon = 'modular_RUtgmc/icons/UI_Icons/lobby_button.dmi' //hitbox prop mouse_opacity = MOUSE_OPACITY_ICON /atom/movable/screen/text/lobby/clickable/MouseEntered(location, control, params) @@ -36,19 +36,27 @@ if(!(flags_atom & INITIALIZED)) //yes this can happen, fuck me return color = COLOR_ORANGE + icon_state += "_a" //RUTGMC ADDITION var/mob/new_player/player = usr - player.playsound_local(player, 'sound/effects/menu_click.ogg', 50) + player.playsound_local(player, 'modular_RUtgmc/sound/effects/UI/move.ogg', 40) //RUTGMC EDIT /atom/movable/screen/text/lobby/clickable/MouseExited(location, control, params) . = ..() color = initial(color) + //RUTGMC ADDITION BEGIN + var/mob/new_player/player = hud.mymob + if(icon_state != "ready_a") + icon_state = initial(icon_state) //ORIGINAL + else + icon_state = player.ready ? "ready" : "unready" + //RUTGMC ADDITION END /atom/movable/screen/text/lobby/clickable/Click() if(!(flags_atom & INITIALIZED)) //yes this can happen, fuck me to_chat(usr, span_warning("The game is still setting up, please try again later.")) return var/mob/new_player/player = usr - player.playsound_local(player, 'sound/effects/menu_select.ogg', 50) + player.playsound_local(player, 'modular_RUtgmc/sound/effects/UI/click.ogg', 60) //RUTGMC EDIT /atom/movable/screen/text/lobby/clickable/setup_character @@ -101,6 +109,10 @@ var/mob/new_player/player = hud.mymob player.toggle_ready() icon_state = player.ready ? "ready" : "unready" + //RUTGMC ADDITION BEGIN + if(MouseEntered()) + icon_state += "_a" + //RUTGMC ADDITION END update_text() /atom/movable/screen/text/lobby/clickable/manifest @@ -114,7 +126,7 @@ /atom/movable/screen/text/lobby/clickable/xenomanifest maptext = "VIEW HIVE" - icon_state = "manifest" + icon_state = "manifest_xeno" /atom/movable/screen/text/lobby/clickable/xenomanifest/Click() . = ..() diff --git a/code/_onclick/xeno.dm b/code/_onclick/xeno.dm index f5b3d560a7d0f..ae988e2284022 100644 --- a/code/_onclick/xeno.dm +++ b/code/_onclick/xeno.dm @@ -9,6 +9,35 @@ if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) return +//RUTGMC ADDON BEGIN + if(src.a_intent == INTENT_HELP) + var/fire_level_to_extinguish = 5 + var/turf/target_turf = A + for(var/obj/flamer_fire/fire in target_turf) + if((fire.firelevel > fire_level_to_extinguish) && (fire.flame_color == "red")) //TODO: Make firetypes, colour types are terrible + fire.firelevel -= fire_level_to_extinguish + fire.updateicon() + else + switch(fire.flame_color) + if("blue") //no change cause it has bigger firelvl. + if(fire.firelevel > fire_level_to_extinguish) + fire.firelevel -= fire_level_to_extinguish + fire.updateicon() + if("green") //extinguishes faster. + if(fire.firelevel > 2*fire_level_to_extinguish) + fire.firelevel -= 2*fire_level_to_extinguish + fire.updateicon() + else + qdel(fire) + else + qdel(fire) + src.do_attack_animation(target_turf) + playsound(target_turf, 'sound/effects/alien_tail_swipe2.ogg', 45, 1) //SFX + src.visible_message(span_danger("\The [src] pats at the fire!"), \ + span_danger("We pat the fire!")) + changeNext_move(CLICK_CD_MELEE) +//RUTGMC ADDON END + var/atom/S = A.handle_barriers(src) S.attack_alien(src, xeno_caste.melee_damage * xeno_melee_damage_modifier, isrightclick = islist(modifiers) ? modifiers["right"] : FALSE) GLOB.round_statistics.xeno_unarmed_attacks++ diff --git a/code/datums/components/deployable_item.dm b/code/datums/components/deployable_item.dm index b811cc176ef6b..8a34690dfb1a3 100644 --- a/code/datums/components/deployable_item.dm +++ b/code/datums/components/deployable_item.dm @@ -82,6 +82,11 @@ if(user.do_actions) user.balloon_alert(user, "You are already doing something!") return + if(CHECK_BITFIELD(item_to_deploy?.near_lock, TRUE)) + for(var/obj/machinery/deployable/def in urange(2, location)) + if(def != src) + user.balloon_alert(user, "Too close to [def]!") + return user.balloon_alert(user, "You start deploying...") user.setDir(newdir) //Face towards deploy location for ease of deploy. if(!do_after(user, deploy_time, NONE, item_to_deploy, BUSY_ICON_BUILD)) @@ -132,6 +137,7 @@ /datum/component/deployable_item/proc/finish_undeploy(datum/source, mob/user) var/obj/deployed_machine = source //The machinethat is undeploying should be the the one sending the Signal var/obj/item/undeployed_item = deployed_machine.get_internal_item() //Item the machine is undeploying + var/obj/held_item = user.get_active_held_item() //Active hand item check if(!undeployed_item) CRASH("[src] is missing it's internal item.") @@ -143,6 +149,9 @@ var/obj/machinery/deployable/mounted/sentry/sentry if(istype(deployed_machine, /obj/machinery/deployable/mounted/sentry)) sentry = deployed_machine + if(!istype(held_item, /obj/item/tool/multitool)) // Can't undeploy without multitool in active hand + user.balloon_alert(user, "You need to hold a multitool!") + return sentry?.set_on(FALSE) user.balloon_alert(user, "You start disassembling [undeployed_item]") if(!do_after(user, deploy_time, NONE, deployed_machine, BUSY_ICON_BUILD)) diff --git a/code/datums/emergency_calls/pmc.dm b/code/datums/emergency_calls/pmc.dm index d4bfb5979f919..31483658b34ed 100644 --- a/code/datums/emergency_calls/pmc.dm +++ b/code/datums/emergency_calls/pmc.dm @@ -32,24 +32,48 @@ print_backstory(H) if(!leader) - leader = H - var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/leader) + if(prob(70)) + leader = H + var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/leader) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

[span_notice("You are the leader of this private military contractor team in responding to the TGMC distress signal sent out nearby. Address the situation and get your team to safety!")]

") + return + else + leader = H + var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/leader_l) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

[span_notice("You are the leader of this private military contractor team in responding to the TGMC distress signal sent out nearby. Address the situation and get your team to safety!")]

") + return + + if(prob(20)) + var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/medic) H.apply_assigned_role_to_spawn(J) - to_chat(H, "

[span_notice("You are the leader of this private military contractor team in responding to the TGMC distress signal sent out nearby. Address the situation and get your team to safety!")]

") + to_chat(H, "

[span_notice("You are a PMC medic assigned to this team to respond to the TGMC distress signal sent out nearby. Don't forget to heal your squad members!")]

") return - if(prob(30)) + if(prob(20)) var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/gunner) H.apply_assigned_role_to_spawn(J) to_chat(H, "

[span_notice("You are a PMC heavy gunner assigned to this team to respond to the TGMC distress signal sent out nearby. Be the back guard of your squad!")]

") return - if(prob(30)) + if(prob(20)) + var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/engineer) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

[span_notice("You are a PMC engineer assigned to this team to respond to the TGMC distress signal sent out nearby. Support your squad with FLAMES!")]

") + return + + if(prob(20)) var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/sniper) H.apply_assigned_role_to_spawn(J) to_chat(H, "

[span_notice("You are a PMC heavy sniper assigned to this team to respond to the TGMC distress signal sent out nearby. Support your squad with long ranged firepower!")]

") return - var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/standard) - H.apply_assigned_role_to_spawn(J) - to_chat(H, "

[span_notice("You are a private military contractor assigned to this team to respond to the TGMC distress signal sent out nearby. Assist your team and protect NT's interests whenever possible!")]

") + if(prob(30)) + var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/standard) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

[span_notice("You are a private military contractor assigned to this team to respond to the TGMC distress signal sent out nearby. Assist your team and protect NT's interests whenever possible!")]

") + else + var/datum/job/J = SSjob.GetJobType(/datum/job/pmc/standard_m) + H.apply_assigned_role_to_spawn(J) + to_chat(H, "

[span_notice("You are a private military contractor assigned to this team to respond to the TGMC distress signal sent out nearby. Assist your team and protect NT's interests whenever possible!")]

") diff --git a/code/datums/gamemodes/_game_mode.dm b/code/datums/gamemodes/_game_mode.dm index 0cbe77d118a20..77cad7524b81a 100644 --- a/code/datums/gamemodes/_game_mode.dm +++ b/code/datums/gamemodes/_game_mode.dm @@ -808,7 +808,7 @@ GLOBAL_LIST_INIT(bioscan_locations, list( A.show_roundend_report(owner.client, PERSONAL_LAST_ROUND) /client/proc/roundend_report_file() - return "data/[ckey].html" + return "data/endgameckey/[ckey].html" //RUTGMC EDIT /endgameckey /datum/game_mode/proc/announce_xenomorphs() var/list/parts = list() diff --git a/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm b/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm index 1c7ff3d727c0a..2ce2ab3032c7a 100644 --- a/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm +++ b/code/datums/gamemodes/campaign/rewards/campaign_asset_jobs.dm @@ -504,7 +504,7 @@ What you lack in equipment and military training you make up in bravery and conv //PMC /datum/job/pmc/standard/campaign_bonus faction = FACTION_TERRAGOV - comm_title = "PMC" + comm_title = "PMC-ST" //RUTGMC EDIT job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS job_cost = 0 outfit = /datum/outfit/job/pmc/standard/campaign @@ -514,7 +514,7 @@ What you lack in equipment and military training you make up in bravery and conv /datum/job/pmc/gunner/campaign_bonus faction = FACTION_TERRAGOV - comm_title = "PMC" + comm_title = "PMC-SG" //RUTGMC EDIT job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS job_cost = 0 outfit = /datum/outfit/job/pmc/gunner/campaign @@ -524,7 +524,7 @@ What you lack in equipment and military training you make up in bravery and conv /datum/job/pmc/leader/campaign_bonus faction = FACTION_TERRAGOV - comm_title = "PMC" + comm_title = "PMC-LD" //RUTGMC EDIT job_flags = JOB_FLAG_LATEJOINABLE|JOB_FLAG_BOLD_NAME_ON_SELECTION|JOB_FLAG_PROVIDES_SQUAD_HUD|JOB_FLAG_CAN_SEE_ORDERS job_cost = 0 outfit = /datum/outfit/job/pmc/leader/campaign diff --git a/code/datums/jobs/job/pmc.dm b/code/datums/jobs/job/pmc.dm index 0821038f0079f..d9c7524ab2edd 100644 --- a/code/datums/jobs/job/pmc.dm +++ b/code/datums/jobs/job/pmc.dm @@ -1,3 +1,4 @@ +/* RUTGMC MOVED TO MODULE /datum/job/pmc job_category = JOB_CAT_MARINE access = ALL_PMC_ACCESS @@ -5,6 +6,7 @@ skills_type = /datum/skills/pmc faction = FACTION_NANOTRASEN minimap_icon = "pmc" + comm_title = "PMC" //PMC Standard @@ -241,3 +243,4 @@ H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_R_POUCH) H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) +*/ diff --git a/code/game/objects/items/explosives/grenades/grenade.dm b/code/game/objects/items/explosives/grenades/grenade.dm index 1e4f136a485e3..a834ecdf83827 100644 --- a/code/game/objects/items/explosives/grenades/grenade.dm +++ b/code/game/objects/items/explosives/grenades/grenade.dm @@ -85,11 +85,12 @@ addtimer(CALLBACK(src, PROC_REF(prime)), det_time) return TRUE +/* RUTGMC MOVED TO MODULE /obj/item/explosive/grenade/update_overlays() . = ..() if(active && dangerous) . += new /obj/effect/overlay/danger - +*/ /obj/item/explosive/grenade/proc/prime() explosion(loc, light_impact_range = src.light_impact_range, weak_impact_range = src.weak_impact_range) diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 31fc63ee706c6..f817919beb0d6 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -625,7 +625,7 @@ desc = "An eye catching white medical pouch capable of holding all your surgical tools." icon_state = "surgery" sprite_slots = 1 - storage_slots = 12 + storage_slots = 11 //RUTGMC EDIT 12 -> 11 max_storage_space = 24 can_hold = list( /obj/item/tool/surgery, diff --git a/code/game/objects/items/storage/surgical_tray.dm b/code/game/objects/items/storage/surgical_tray.dm index bed8f1703cf2f..5c98900f7e478 100644 --- a/code/game/objects/items/storage/surgical_tray.dm +++ b/code/game/objects/items/storage/surgical_tray.dm @@ -1,3 +1,4 @@ +/* MOVED TO MODULE /obj/item/storage/surgical_tray name = "surgical tray" desc = "A small metallic tray covered in sterile tarp. Intended to store surgical tools in a neat and clean fashion." @@ -31,3 +32,4 @@ icon_state = "surgical_tray_e" else icon_state = "surgical_tray" +*/ diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index 940466d749b25..5766bf6c2901f 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -508,6 +508,12 @@ if(!user.drop_held_item()) return + //RUTGMC ADD BEGIN + if(istype(I, /obj/item/cell/night_vision_battery)) + balloon_alert(user, "Not rechargeable") + return + //RUTGMC ADD END + if(cell) //hotswapping cell.update_icon() user.put_in_hands(cell) diff --git a/code/game/objects/machinery/camera/camera.dm b/code/game/objects/machinery/camera/camera.dm index 1d8cd4c61ea98..3c1244a2de877 100644 --- a/code/game/objects/machinery/camera/camera.dm +++ b/code/game/objects/machinery/camera/camera.dm @@ -1,7 +1,7 @@ /obj/machinery/camera name = "security camera" desc = "It's used to monitor rooms." - icon = 'icons/obj/machines/monitors.dmi' + icon = 'modular_RUtgmc/icons/obj/machines/monitors.dmi' //RUTGMC EDIT icon_state = "camera_icon" use_power = ACTIVE_POWER_USE idle_power_usage = 5 @@ -319,7 +319,9 @@ . = ..() if(obj_integrity <= 0) return + /* RUTGMC DELETION . += emissive_appearance(icon, "[icon_state]_emissive") + */ //This camera type automatically sets it's name to whatever the area that it's in is called. /obj/machinery/camera/autoname/Initialize(mapload) diff --git a/code/game/objects/machinery/vending/marine_vending.dm b/code/game/objects/machinery/vending/marine_vending.dm index 0c65676120a03..0b5e7a5cf0a72 100644 --- a/code/game/objects/machinery/vending/marine_vending.dm +++ b/code/game/objects/machinery/vending/marine_vending.dm @@ -136,6 +136,8 @@ /obj/structure/closet/crate/mortar_ammo/mortar_kit = 1, /obj/structure/closet/crate/mortar_ammo/howitzer_kit = 1, /obj/item/storage/box/crate/sentry = 4, + /obj/item/storage/box/crate/sentry_sniper = 2, + /obj/item/storage/box/crate/sentry_shotgun = 2, /obj/item/storage/box/tl102 = 1, /obj/item/weapon/gun/heavymachinegun = 1, /obj/item/ammo_magazine/heavymachinegun = 5, @@ -554,6 +556,8 @@ /obj/item/ammo_magazine/standard_atgun/beehive = -1, /obj/item/ammo_magazine/standard_atgun/incend = -1, /obj/item/storage/box/crate/sentry = -1, + /obj/item/storage/box/crate/sentry_shotgun = -1, + /obj/item/storage/box/crate/sentry_sniper = -1, /obj/item/storage/box/tl102 = -1, /obj/item/weapon/gun/heavymachinegun = -1, /obj/item/ammo_magazine/heavymachinegun = -1, diff --git a/code/game/objects/machinery/vending/new_marine_vendors.dm b/code/game/objects/machinery/vending/new_marine_vendors.dm index ad6063b329bff..f518b7d9de3fe 100644 --- a/code/game/objects/machinery/vending/new_marine_vendors.dm +++ b/code/game/objects/machinery/vending/new_marine_vendors.dm @@ -714,6 +714,7 @@ /obj/item/cell/high, /obj/item/lightreplacer, /obj/item/circuitboard/apc, + /obj/item/weapon/gun/sentry/big_sentry, ) /obj/effect/vendor_bundle/smartgunner_pistol diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index ce5de8df5d3f5..f161f06d47ff8 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -1,7 +1,7 @@ /obj/structure/largecrate name = "large crate" desc = "A hefty wooden crate." - icon = 'icons/obj/structures/crates.dmi' + icon = 'modular_RUtgmc/icons/obj/structures/crates.dmi' // RUTGMC EDIT icon_state = "densecrate" density = TRUE anchored = FALSE diff --git a/code/game/objects/structures/crates_lockers/largecrate_supplies.dm b/code/game/objects/structures/crates_lockers/largecrate_supplies.dm index 41f1254c74285..f966cc4442f97 100644 --- a/code/game/objects/structures/crates_lockers/largecrate_supplies.dm +++ b/code/game/objects/structures/crates_lockers/largecrate_supplies.dm @@ -87,6 +87,7 @@ /obj/structure/largecrate/supply name = "supply crate" + icon = 'modular_RUtgmc/icons/obj/structures/crates.dmi' // RUTGMC ADDON var/list/supplies = list() /obj/structure/largecrate/supply/Initialize(mapload) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 4f180cd016492..38892506d4b56 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -451,7 +451,10 @@ ///The battery inside var/obj/item/cell/night_vision_battery/battery ///How much energy this module needs when activated + /* ORIGINAL var/active_energy_cost = 4 //Little over 4 minutes of use + */ + var/active_energy_cost = 1.5 //RUTGMC EDIT ///Looping sound to play var/datum/looping_sound/active_sound = /datum/looping_sound/scan_pulse ///How loud the looping sound should be @@ -575,3 +578,11 @@ /obj/item/clothing/glasses/night_vision/mounted/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NODROP, NIGHT_VISION_GOGGLES_TRAIT) + +/obj/item/clothing/glasses/night_vision/pmc + icon = 'modular_RUtgmc/icons/obj/clothing/glasses.dmi' + icon_state = "night_vision_pmc" + deactive_state = "night_vision_pmc_off" + item_icons = list( + slot_glasses_str = 'modular_RUtgmc/icons/mob/clothing/eyes.dmi' + ) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 97b1823a88a2d..0ea35ed18bb0a 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -316,7 +316,7 @@ GLOBAL_LIST_INIT(organ_rel_size, list( /mob/living/carbon/can_be_operated_on() if(!lying_angle) return FALSE - if(locate(/obj/machinery/optable, loc) || locate(/obj/structure/bed/roller, loc)) + if(locate(/obj/machinery/optable, loc) || locate(/obj/structure/bed/roller, loc) || locate(/obj/machinery/deployable/optable, loc)) return TRUE var/obj/structure/table/T = locate(/obj/structure/table, loc) if(T && !T.flipped) return TRUE diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index 5cf59ed867aec..1ef8df5dac6ac 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -1004,7 +1004,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/shotgun/sx16_slug/on_hit_mob(mob/M, obj/projectile/P) staggerstun(M, P, slowdown = 1, knockback = 1) - +/* RUTGMC MOVED TO MODULE /datum/ammo/bullet/shotgun/tx15_flechette name = "shotgun flechette shell" handful_icon_state = "shotgun flechette shell" @@ -1036,7 +1036,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/shotgun/tx15_slug/on_hit_mob(mob/M, obj/projectile/P) staggerstun(M, P, slowdown = 2, knockback = 1) - +*/ /datum/ammo/bullet/shotgun/mbx900_buckshot name = "light shotgun buckshot shell" // If .410 is the smallest shotgun shell, then... handful_icon_state = "light shotgun buckshot shell" @@ -1361,14 +1361,15 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/turret name = "autocannon bullet" - bullet_color = COLOR_SOFT_RED + bullet_color = COLOR_PALE_GREEN_GRAY hud_state = "rifle" hud_state_empty = "rifle_empty" flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING|AMMO_SENTRY accurate_range = 10 damage = 25 - penetration = 20 - damage_falloff = 0.25 + penetration = 12 + sundering = 1 + damage_falloff = 0.5 /datum/ammo/bullet/turret/dumb icon_state = "bullet" @@ -1380,10 +1381,50 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh /datum/ammo/bullet/turret/mini name = "small caliber autocannon bullet" + bullet_color = COLOR_PALE_BLUE_GRAY + damage = 15 + accurate_range = 7 + penetration = 5 + sundering = 0 + damage_falloff = 0.5 + +/datum/ammo/bullet/turret/sniper + name = "antimaterial bullet" + bullet_color = COLOR_CYAN + accurate_range = 16 + damage = 70 + penetration = 40 + shell_speed = 4 + sundering = 5 + +/datum/ammo/bullet/turret/buckshot + name = "turret buckshot shell" + icon_state = "buckshot" + bullet_color = COLOR_SOMEWHAT_LIGHTER_RED + hud_state = "shotgun_buckshot" + bonus_projectiles_type = /datum/ammo/bullet/turret/spread + bonus_projectiles_amount = 6 + bonus_projectiles_scatter = 4 + shell_speed = 2 + max_range = 10 damage = 20 - penetration = 20 - flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SENTRY + penetration = 40 + damage_falloff = 2 +/datum/ammo/bullet/turret/buckshot/on_hit_mob(mob/M,obj/projectile/P) + staggerstun(M, P, knockback = 1, max_range = 4) + +/datum/ammo/bullet/turret/spread + name = "additional buckshot" + bullet_color = COLOR_SOMEWHAT_LIGHTER_RED + max_range = 10 + damage = 20 + penetration = 40 + damage_falloff = 1 + +/datum/ammo/flamethrower/turret + max_range = 8 + damage = 50 /datum/ammo/bullet/machinegun //Adding this for the MG Nests (~Art) name = "machinegun bullet" diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm index a0640ed6d9d5c..e50cc012e78fb 100644 --- a/code/modules/projectiles/guns/mounted.dm +++ b/code/modules/projectiles/guns/mounted.dm @@ -454,6 +454,7 @@ undeploy_time = 0.5 SECONDS max_integrity = 200 + near_lock = TRUE //RUTGMC ADDITION /obj/item/weapon/gun/standard_mmg/machinegunner starting_attachment_types = list(/obj/item/attachable/stock/t27, /obj/item/attachable/scope/unremovable/mmg) diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index 1b6719038e0f8..996867e7a53d6 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -1199,6 +1199,8 @@ /obj/item/weapon/gun/rifle/type71/seasonal desc = "The primary rifle of many space pirates and militias, the Type 71 is a reliable rifle chambered in 7.62x39mm, firing in three round bursts to conserve ammunition." + +/* RUTGMC MOVED TO MODULE //------------------------------------------------------- //SH-15 AUTOMATIC SHOTGUN @@ -1269,6 +1271,7 @@ /obj/item/weapon/gun/rifle/standard_autoshotgun/plasma_pistol starting_attachment_types = list(/obj/item/attachable/stock/tx15, /obj/item/attachable/motiondetector, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/pistol/plasma_pistol) +*/ //------------------------------------------------------- //SG-29 Smart Machine Gun (It's more of a rifle than the SG.) diff --git a/code/modules/projectiles/guns/sentries.dm b/code/modules/projectiles/guns/sentries.dm index 03489ffd340f9..bb72273de9ed1 100644 --- a/code/modules/projectiles/guns/sentries.dm +++ b/code/modules/projectiles/guns/sentries.dm @@ -31,6 +31,8 @@ allowed_ammo_types = list(/obj/item/ammo_magazine/sentry) +/obj/item/weapon/gun/sentry/ + /obj/item/storage/box/crate/sentry name = "\improper ST-571 sentry crate" desc = "A large case containing all you need to set up an automated sentry." @@ -54,10 +56,12 @@ new /obj/item/ammo_magazine/sentry(src) /obj/item/weapon/gun/sentry/big_sentry - name = "\improper ST-571 sentry gun" + name = "\improper ST-BASIC sentry gun" desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a M30 autocannon and a 500-round drum magazine." + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' icon_state = "sentry" + max_integrity = 200 turret_range = 8 deploy_time = 6 SECONDS max_shells = 500 @@ -76,6 +80,8 @@ /obj/item/attachable/scope/unremovable/tl102, ) + near_lock = TRUE + /obj/item/weapon/gun/sentry/pod_sentry name = "\improper ST-583 sentry gun" desc = "A fully automatic turret with AI targeting capabilities, designed specifically for deploying inside a paired drop pod shell. Armed with a M30 autocannon and a 500-round drum magazine. Designed to sweeping a landing area to support orbital assaults." @@ -236,26 +242,30 @@ new /obj/item/ammo_magazine/minisentry(src) /obj/item/weapon/gun/sentry/mini - name = "\improper ST-580 point defense sentry" + name = "\improper ST-MINI sentry" desc = "A deployable, automated turret with AI targeting capabilities. This is a lightweight portable model meant for rapid deployment and point defense. Armed with an light, high velocity machine gun and a 300-round drum magazine." + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' icon_state = "minisentry" - max_shells = 300 - knockdown_threshold = 80 + max_integrity = 125 + max_shells = 350 + knockdown_threshold = 70 ammo_datum_type = /datum/ammo/bullet/turret/mini default_ammo_type = /obj/item/ammo_magazine/minisentry allowed_ammo_types = list(/obj/item/ammo_magazine/minisentry) - fire_delay = 0.2 SECONDS + fire_delay = 0.15 SECONDS burst_delay = 0.2 SECONDS burst_amount = 3 extra_delay = 0.3 SECONDS - scatter = 3 + scatter = 4 - deploy_time = 3 SECONDS + deploy_time = 1 SECONDS gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC, GUN_FIREMODE_AUTOBURST) + near_lock = TRUE + /obj/item/weapon/gun/sentry/mini/combat_patrol sentry_iff_signal = TGMC_LOYALIST_IFF turret_flags = TURRET_HAS_CAMERA|TURRET_ALERTS @@ -295,4 +305,201 @@ ammo_datum_type = /datum/ammo/bullet/turret sentry_iff_signal = TGMC_LOYALIST_IFF +// Sniper Sentry + +/obj/item/weapon/gun/sentry/sniper_sentry + name = "\improper SRT-SNIPER sentry gun" + desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a heavy caliber AM-5 antimaterial rifle and a 75-round drum magazine." + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_sniper" + + max_integrity = 175 + + turret_range = 16 + deploy_time = 10 SECONDS + max_shells = 75 + fire_delay = 2 SECONDS + + burst_amount = 1 + extra_delay = 2 SECONDS + + scatter = 0 + + ammo_datum_type = /datum/ammo/bullet/turret/sniper + default_ammo_type = /obj/item/ammo_magazine/sentry/sniper + allowed_ammo_types = list(/obj/item/ammo_magazine/sentry/sniper) + + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + + attachable_allowed = list(/obj/item/attachable/scope/unremovable) + starting_attachment_types = list( + /obj/item/attachable/scope/unremovable, + ) + + near_lock = TRUE + +/obj/item/storage/box/crate/sentry_sniper + name = "\improper SST-574 sentry crate" + desc = "A large case containing all you need to set up an automated sentry." + icon_state = "sentry_case" + w_class = WEIGHT_CLASS_HUGE + max_w_class = WEIGHT_CLASS_HUGE + storage_slots = 6 + max_storage_space = 16 + can_hold = list( + /obj/item/weapon/gun/sentry/sniper_sentry, + /obj/item/ammo_magazine/sentry/sniper, + ) + bypass_w_limit = list( + /obj/item/weapon/gun/sentry/sniper_sentry, + /obj/item/ammo_magazine/sentry/sniper, + ) + +/obj/item/storage/box/crate/sentry_sniper/Initialize(mapload) + . = ..() + new /obj/item/weapon/gun/sentry/sniper_sentry(src) + new /obj/item/ammo_magazine/sentry/sniper(src) + +// Shotgun Sentry + +/obj/item/weapon/gun/sentry/shotgun_sentry + name = "\improper SHT-SHOTGUN sentry gun" + desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a heavy caliber SM-10 shotgun and a 100-round drum magazine." + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_shotgun" + + turret_range = 8 + deploy_time = 5 SECONDS + max_shells = 75 + fire_delay = 1.5 SECONDS + + burst_amount = 2 + extra_delay = 5 SECONDS + + scatter = 5 + + ammo_datum_type = /datum/ammo/bullet/turret/buckshot + default_ammo_type = /obj/item/ammo_magazine/sentry/shotgun + allowed_ammo_types = list(/obj/item/ammo_magazine/sentry/shotgun) + + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + + near_lock = TRUE + +/obj/item/storage/box/crate/sentry_shotgun + name = "\improper SHT-573 sentry crate" + desc = "A large case containing all you need to set up an automated sentry." + icon_state = "sentry_case" + w_class = WEIGHT_CLASS_HUGE + max_w_class = WEIGHT_CLASS_HUGE + storage_slots = 6 + max_storage_space = 16 + can_hold = list( + /obj/item/weapon/gun/sentry/shotgun_sentry, + /obj/item/ammo_magazine/sentry/shotgun, + ) + bypass_w_limit = list( + /obj/item/weapon/gun/sentry/shotgun_sentry, + /obj/item/ammo_magazine/sentry/shotgun, + ) + +/obj/item/storage/box/crate/sentry_shotgun/Initialize(mapload) + . = ..() + new /obj/item/weapon/gun/sentry/shotgun_sentry(src) + new /obj/item/ammo_magazine/sentry/shotgun(src) + +// Flamer Sentry + +/obj/item/weapon/gun/sentry/flamer_sentry + name = "\improper SFT-FLAMER sentry gun" + desc = "A deployable, fully automatic turret with AI targeting capabilities. Armed with a long flamer nozzle. WARNING, NO IFF" + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_flamer" + + fire_sound = 'sound/weapons/guns/fire/flamethrower3.ogg' + + turret_flags = TURRET_HAS_CAMERA|TURRET_ALERTS + turret_range = 8 + deploy_time = 5 SECONDS + max_shells = 100 + fire_delay = 3.5 SECONDS + + burst_amount = 3 + extra_delay = 10 SECONDS + + scatter = 1 + + ammo_datum_type = /datum/ammo/flamethrower/turret + default_ammo_type = /obj/item/ammo_magazine/flamer_tank/large/sentry + allowed_ammo_types = list(/obj/item/ammo_magazine/flamer_tank/large/sentry) + + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + + near_lock = TRUE + +/obj/item/weapon/gun/sentry/big_sentry/proc/get_upgrade_list() + . += list("Sniper Upgrade" = image(icon = 'modular_RUtgmc/icons/Marine/sentry.dmi', icon_state = "sentry_sniper_deployed"), + "Shotgun Upgrade" = image(icon = 'modular_RUtgmc/icons/Marine/sentry.dmi', icon_state = "sentry_shotgun_deployed"), + "Mini Upgrade" = image(icon = 'modular_RUtgmc/icons/Marine/sentry.dmi', icon_state = "minisentry_deployed"), + "Flamer Upgrade" = image(icon = 'modular_RUtgmc/icons/Marine/sentry.dmi', icon_state = "sentry_flamer_deployed"), + ) + +/obj/item/weapon/gun/sentry/big_sentry/proc/upgrade_string_to_type(upgrade_string) + switch(upgrade_string) + if("Sniper Upgrade") + return /obj/item/weapon/gun/sentry/sniper_sentry + if("Shotgun Upgrade") + return /obj/item/weapon/gun/sentry/shotgun_sentry + if("Mini Upgrade") + return /obj/item/weapon/gun/sentry/mini + if("Flamer Upgrade") + return /obj/item/weapon/gun/sentry/flamer_sentry + +// +// UPGRADE KIT +// + +/obj/item/engi_upgrade_kit + name = "engineering upgrade kit" + desc = "A kit used to upgrade the defenses of an engineer's sentry. Back in 1980 when the machines tried to break free, it was a single android who laid them low. Now their technology is used widely on the rim." + + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "upgradekit" + +/obj/item/engi_upgrade_kit/afterattack(atom/target, mob/user, proximity_flag, click_parameters, proximity) + if(!ishuman(user)) + return ..() + + if(!istype(target, /obj/item/weapon/gun/sentry/big_sentry)) + return ..() + + var/obj/item/weapon/gun/sentry/big_sentry/sentry = target + var/mob/living/carbon/human/human = user + + var/list/upgrade_list = sentry.get_upgrade_list() + if(!length(upgrade_list)) + return + + var/chosen_upgrade = show_radial_menu(user, target, upgrade_list, require_near = TRUE) + if(QDELETED(sentry) || !upgrade_list[chosen_upgrade]) + return + + if((user.get_active_held_item()) != src) + to_chat(user, span_warning("You must be holding [src] to upgrade [sentry]!")) + return + + var/type_to_change_to = sentry.upgrade_string_to_type(chosen_upgrade) + if(!type_to_change_to) + return + + human.dropItemToGround(sentry) + qdel(sentry) + + sentry = new type_to_change_to() + human.put_in_any_hand_if_possible(sentry) + + if(sentry.loc != human) + sentry.forceMove(human.loc) + human.drop_held_item(src) + qdel(src) diff --git a/code/modules/projectiles/magazines/energy.dm b/code/modules/projectiles/magazines/energy.dm index a05455d7cd64c..8ff3d06bf82fa 100644 --- a/code/modules/projectiles/magazines/energy.dm +++ b/code/modules/projectiles/magazines/energy.dm @@ -171,6 +171,11 @@ if(!istype(I, /obj/item/cell)) return + //RUTGMC ADD BEGIN + if(istype(I, /obj/item/cell/night_vision_battery)) + balloon_alert(user, "Not rechargeable") + return + //RUTGMC ADD END if(I != user.r_hand && I != user.l_hand) to_chat(user, span_warning("[I] must be in your hand to do that.")) return diff --git a/code/modules/projectiles/magazines/misc.dm b/code/modules/projectiles/magazines/misc.dm index f0f6a015591ae..b28555eb3ead9 100644 --- a/code/modules/projectiles/magazines/misc.dm +++ b/code/modules/projectiles/magazines/misc.dm @@ -113,11 +113,12 @@ current_rounds = 100 max_rounds = 100 +/* RUTGMC MOVED TO MODULE /obj/item/ammo_magazine/packet/standardautoshotgun name = "box of 16 Gauge shotgun slugs" desc = "A box containing 16 Gauge slugs, they look like they'd fit in the SH-15." icon_state = "box_16gslug" - default_ammo = /datum/ammo/bullet/shotgun/tx15_slug + default_ammo = null caliber = CALIBER_16G current_rounds = 60 max_rounds = 60 @@ -126,7 +127,8 @@ name = "box of 16 Gauge shotgun flechette shells" desc = "A box containing 16 Gauge flechette shells, they look like they'd fit in the SH-15." icon_state = "box_16gflech" - default_ammo = /datum/ammo/bullet/shotgun/tx15_flechette + default_ammo = null +*/ // pistol packets diff --git a/code/modules/projectiles/magazines/rifles.dm b/code/modules/projectiles/magazines/rifles.dm index b5dbbfdf2f7e8..ca8fdc7d69f59 100644 --- a/code/modules/projectiles/magazines/rifles.dm +++ b/code/modules/projectiles/magazines/rifles.dm @@ -263,7 +263,7 @@ max_rounds = 42 //TX-16 AUTOMATIC SHOTGUN - +/* MOVED TO MODULE /obj/item/ammo_magazine/rifle/tx15_flechette name = "\improper SH-15 flechette magazine (16 gauge)" desc = "A magazine of 16 gauge flechette rounds, for the SH-15." @@ -283,7 +283,7 @@ default_ammo = /datum/ammo/bullet/shotgun/tx15_slug max_rounds = 12 bonus_overlay = "tx15_slug" - +*/ //------------------------------------------------------- //SMARTMACHINEGUN AMMUNITION diff --git a/code/modules/projectiles/magazines/sentries.dm b/code/modules/projectiles/magazines/sentries.dm index 904351da6b5e6..8148c1ae48393 100644 --- a/code/modules/projectiles/magazines/sentries.dm +++ b/code/modules/projectiles/magazines/sentries.dm @@ -2,20 +2,22 @@ name = "\improper M30 box magazine (10x28mm Caseless)" desc = "A drum of 50 10x28mm caseless rounds for the ST-571 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." w_class = WEIGHT_CLASS_NORMAL - icon_state = "ua571c" + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_mag" flags_magazine = NONE //can't be refilled or emptied by hand caliber = CALIBER_10X28 - max_rounds = 500 + max_rounds = 400 default_ammo = /datum/ammo/bullet/turret /obj/item/ammo_magazine/minisentry name = "\improper M30 box magazine (10x20mm Caseless)" - desc = "A box of 100 10x20mm caseless rounds for the ST-580 point defense sentry. Just feed it into the sentry gun's ammo port when its ammo is depleted." - w_class = WEIGHT_CLASS_NORMAL - icon_state = "ua580" + desc = "A box of 100 10x20mm caseless rounds for the ST-580 MINI sentry. Just feed it into the sentry gun's ammo port when its ammo is depleted." + w_class = WEIGHT_CLASS_SMALL + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "minisentry_mag" flags_magazine = NONE //can't be refilled or emptied by hand caliber = CALIBER_10X20 - max_rounds = 300 + max_rounds = 350 default_ammo = /datum/ammo/bullet/turret/mini /obj/item/ammo_magazine/sentry_premade/dumb @@ -29,3 +31,41 @@ /obj/item/ammo_magazine/sentry/fob_sentry max_rounds = INFINITY + +// Sniper Sentry + +/obj/item/ammo_magazine/sentry/sniper + name = "\improper AM-5 box magazine (10x28mm Caseless)" + desc = "A drum of 50 10x28mm caseless rounds for the SST-574 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_sniper_mag" + max_rounds = 75 + default_ammo = /datum/ammo/bullet/turret/sniper + +// Shotgun Sentry + +/obj/item/ammo_magazine/sentry/shotgun + name = "\improper SM-10 box magazine (12G Caseless)" + desc = "A drum of 200 specialized telescopic 12G rounds for the SST-573 sentry gun. Just feed it into the sentry gun's ammo port when its ammo is depleted." + caliber = CALIBER_12G + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_shotgun_mag" + max_rounds = 100 + default_ammo = /datum/ammo/bullet/turret/buckshot + +// Flamer Sentry + +/obj/item/ammo_magazine/flamer_tank/large/sentry + name = "JJ-8 fuel tank" + desc = "A large fuel tank of ultra thick napthal, a sticky combustable liquid chemical, for use in the SFT-FLAMER sentry gun." + icon = 'modular_RUtgmc/icons/Marine/sentry.dmi' + icon_state = "sentry_flamer_mag" + w_class = WEIGHT_CLASS_NORMAL + max_rounds = 150 + current_rounds = 150 + reload_delay = 3 SECONDS + + default_ammo = /datum/ammo/flamethrower/turret + +/obj/item/ammo_magazine/flamer_tank/large/afterattack(obj/target, mob/user , flag) + return ..() diff --git a/code/modules/projectiles/sentries.dm b/code/modules/projectiles/sentries.dm index 254023554f049..79ae4b76e97ba 100644 --- a/code/modules/projectiles/sentries.dm +++ b/code/modules/projectiles/sentries.dm @@ -19,6 +19,8 @@ ///Time of last alert var/last_alert = 0 + ///Time of last fire + var/last_fire = 0 ///Time of last damage alert var/last_damage_alert = 0 @@ -336,25 +338,25 @@ if(SENTRY_ALERT_HOSTILE) if(world.time < (last_alert + SENTRY_ALERT_DELAY)) return - notice = "ALERT! [src] detected Hostile/Unknown: [mob.name] at: [AREACOORD_NO_Z(src)]." + notice = "ALERT /// [src] /// [get_area_name(src, TRUE)] /// HOSTILE DETECTED" last_alert = world.time if(SENTRY_ALERT_AMMO) if(world.time < (last_damage_alert + SENTRY_ALERT_DELAY)) return - notice = "ALERT! [src]'s ammo depleted at: [AREACOORD_NO_Z(src)]." + notice = "ALERT /// [src] /// [get_area_name(src, TRUE)] /// NO AMMO" last_damage_alert = world.time if(SENTRY_ALERT_FALLEN) - notice = "ALERT! [src] has been knocked over at: [AREACOORD_NO_Z(src)]." + notice = "ALERT /// [src] /// [get_area_name(src, TRUE)] /// KNOCKED OVER" if(SENTRY_ALERT_DAMAGE) if(world.time < (last_damage_alert + SENTRY_DAMAGE_ALERT_DELAY)) return - notice = "ALERT! [src] has taken damage at: [AREACOORD_NO_Z(src)]. Remaining Structural Integrity: ([obj_integrity]/[max_integrity])[obj_integrity < 50 ? " CONDITION CRITICAL!!" : ""]" + playsound(loc, 'modular_RUtgmc/sound/machines/alarm.ogg', 100, 1) + notice = "ALERT /// [src] /// [get_area_name(src, TRUE)]. /// DAMAGED ([obj_integrity]/[max_integrity])" last_damage_alert = world.time if(SENTRY_ALERT_DESTROYED) - notice = "ALERT! [src] at: [AREACOORD_NO_Z(src)] has been destroyed!" + notice = "ALERT /// [src] /// [get_area_name(src, TRUE)] /// DESTROYED" - playsound(loc, 'sound/machines/warning-buzzer.ogg', 50, FALSE) - radio.talk_into(src, "[notice]", FREQ_COMMON) + radio.talk_into(src, "[notice]", RADIO_CHANNEL_ENGINEERING) /obj/machinery/deployable/mounted/sentry/process() @@ -365,7 +367,6 @@ firing = FALSE update_minimap_icon() return - playsound(loc, 'sound/items/detector.ogg', 25, FALSE) sentry_start_fire() @@ -374,7 +375,7 @@ var/obj/item/weapon/gun/gun = get_internal_item() potential_targets.Cut() if(!gun) - return length(potential_targets) + return FALSE for(var/mob/living/carbon/human/nearby_human AS in cheap_get_humans_near(src, range)) if(nearby_human.stat == DEAD || CHECK_BITFIELD(nearby_human.status_flags, INCORPOREAL) || (CHECK_BITFIELD(gun.turret_flags, TURRET_SAFETY) || nearby_human.wear_id?.iff_signal & iff_signal) || HAS_TRAIT(nearby_human, TRAIT_TURRET_HIDDEN)) //RU TGMC EDIT continue @@ -412,9 +413,10 @@ ///Sees if theres a target to shoot, then handles firing. /obj/machinery/deployable/mounted/sentry/proc/sentry_start_fire() var/obj/item/weapon/gun/gun = get_internal_item() - var/mob/living/target = get_target() + var/atom/target = get_target() + sentry_alert(SENTRY_ALERT_HOSTILE, target) update_icon() - if(!target || get_dist(src, target) > range) + if(!target) gun.stop_fire() firing = FALSE update_minimap_icon() @@ -423,6 +425,11 @@ gun.stop_fire() firing = FALSE update_minimap_icon() + + if(world.time >= (last_fire + 30 SECONDS)) + playsound(loc, 'modular_RUtgmc/sound/machines/sentry_warn.ogg', 75, FALSE) + sleep(5) + if(!gun.rounds) sentry_alert(SENTRY_ALERT_AMMO) return @@ -431,12 +438,15 @@ if(HAS_TRAIT(gun, TRAIT_GUN_BURST_FIRING)) gun.set_target(target) return + last_fire = world.time gun.start_fire(src, target, bypass_checks = TRUE) firing = TRUE update_minimap_icon() ///Checks the path to the target for obstructions. Returns TRUE if the path is clear, FALSE if not. /obj/machinery/deployable/mounted/sentry/proc/check_target_path(atom/target) + if(target.loc == loc) + return TRUE var/list/turf/path = getline(src, target) var/turf/starting_turf = get_turf(src) var/turf/target_turf = path[length(path)-1] @@ -452,6 +462,8 @@ break if(i==2) return FALSE + + var/obj/item/weapon/gun/gun = get_internal_item() for(var/turf/T AS in path) var/obj/effect/particle_effect/smoke/smoke = locate() in T if(smoke?.opacity) @@ -460,36 +472,29 @@ if(IS_OPAQUE_TURF(T) || T.density && !(T.allow_pass_flags & PASS_PROJECTILE) && !(T.type in ignored_terrains)) return FALSE - for(var/obj/machinery/MA in T) - if(MA.density && !(MA.allow_pass_flags & PASS_PROJECTILE) && !(MA.type in ignored_terrains)) + for(var/atom/movable/AM AS in T) + if(AM.opacity) return FALSE - - for(var/obj/structure/S in T) - if(S.density && !(S.allow_pass_flags & PASS_PROJECTILE) && !(S.type in ignored_terrains)) + if(!AM.density) + continue + if(ismob(AM)) + continue + if(!(AM.allow_pass_flags & (gun.ammo_datum_type::flags_ammo_behavior & AMMO_ENERGY ? (PASS_GLASS|PASS_PROJECTILE) : PASS_PROJECTILE) && !(AM.type in ignored_terrains))) //todo:accurately populate ignored_terrains return FALSE return TRUE ///Works through potential targets. First checks if they are in range, and if they are friend/foe. Then checks the path to them. Returns the first eligable target. /obj/machinery/deployable/mounted/sentry/proc/get_target() - var/distance = range + 0.5 //we add 0.5 so if a potential target is at range, it is accepted by the system - var/buffer_distance var/obj/item/weapon/gun/gun = get_internal_item() - for (var/atom/nearby_target AS in potential_targets) - if(!(get_dir(src, nearby_target) & dir) && !CHECK_BITFIELD(gun.turret_flags, TURRET_RADIAL)) - continue + for(var/atom/nearby_target AS in potential_targets) + if(nearby_target.loc == loc) + return nearby_target - buffer_distance = get_dist(nearby_target, src) - - if (distance <= buffer_distance) + if(!(get_dir(src, nearby_target) & dir) && !CHECK_BITFIELD(gun.turret_flags, TURRET_RADIAL)) continue - if(!check_target_path(nearby_target)) continue - - sentry_alert(SENTRY_ALERT_HOSTILE, nearby_target) - - distance = buffer_distance return nearby_target /obj/machinery/deployable/mounted/sentry/disassemble(mob/user) @@ -521,7 +526,7 @@ var/obj/item/internal_sentry = get_internal_item() if(internal_sentry) name = "Deployed " + internal_sentry.name - icon = 'icons/Marine/sentry.dmi' + icon = 'modular_ruTGMC/icons/Marine/sentry.dmi' default_icon_state = "build_a_sentry" update_icon() @@ -529,7 +534,7 @@ . = ..() var/obj/item/weapon/gun/internal_gun = get_internal_item() if(internal_gun) - . += image('icons/Marine/sentry.dmi', src, internal_gun.placed_overlay_iconstate, dir = dir) + . += image('modular_ruTGMC/icons/Marine/sentry.dmi', src, internal_gun.placed_overlay_iconstate, dir = dir) //Throwable turret diff --git a/code/modules/reqs/supplypacks.dm b/code/modules/reqs/supplypacks.dm index c52b9d132f74b..78a5dccef65d9 100644 --- a/code/modules/reqs/supplypacks.dm +++ b/code/modules/reqs/supplypacks.dm @@ -165,10 +165,37 @@ WEAPONS containertype = /obj/structure/closet/crate/weapon /datum/supply_packs/weapons/sentry - name = "ST-571 Base Defense Sentry" - contains = list(/obj/item/storage/box/crate/sentry) - cost = 400 + name = "ST-BASIC sentry gun" + contains = list(/obj/item/weapon/gun/sentry/big_sentry) + cost = 350 + +/datum/supply_packs/weapons/sentry_upgrade_kit + name = "Sentry Upgrade Kit" + contains = list(/obj/item/engi_upgrade_kit) + cost = 200 +/datum/supply_packs/weapons/sentry_ammo + name = "ST-BASIC sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry) + cost = 100 + +/datum/supply_packs/weapons/sentry_ammo/mini + name = "ST-MINI sentry ammunition" + contains = list(/obj/item/ammo_magazine/minisentry) + +/datum/supply_packs/weapons/sentry_ammo/sniper + name = "SRT-SNIPER sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry/sniper) + +/datum/supply_packs/weapons/sentry_ammo/shotgun + name = "SHT-SHOTGUN sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry/shotgun) + +/datum/supply_packs/weapons/sentry_ammo/flamer + name = "SFT-FLAMER sentry ammunition" + contains = list(/obj/item/ammo_magazine/flamer_tank/large/sentry) + +/* /datum/supply_packs/weapons/sentry_ammo name = "ST-571 sentry ammunition" contains = list(/obj/item/ammo_magazine/sentry) @@ -184,6 +211,27 @@ WEAPONS contains = list(/obj/item/ammo_magazine/minisentry) cost = 100 +/datum/supply_packs/weapons/sentry_shotgun + name = "SHT-573 Shotgun Sentry" + contains = list(/obj/item/storage/box/crate/sentry_shotgun) + cost = 400 + +/datum/supply_packs/weapons/sentry_shotgun_ammo + name = "SHT-573 shotgun sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry/shotgun) + cost = 100 + +/datum/supply_packs/weapons/sentry_sniper + name = "SST-574 Sniper Sentry" + contains = list(/obj/item/storage/box/crate/sentry_sniper) + cost = 600 + +/datum/supply_packs/weapons/sentry_sniper_ammo + name = "SST-571 sniper sentry ammunition" + contains = list(/obj/item/ammo_magazine/sentry/sniper) + cost = 100 +*/ + /datum/supply_packs/weapons/buildasentry name = "Build-A-Sentry Attachment System" contains = list( diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 4328d6c4630a1..c43a25abb55e0 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -208,6 +208,10 @@ GLOBAL_LIST_INIT(surgery_steps, init_surgery()) var/step_duration = max(0.5 SECONDS, rand(surgery_step.min_duration, surgery_step.max_duration) - 1 SECONDS * user.skills.getRating(SKILL_SURGERY)) if(locate(/obj/machinery/optable) in M.loc) step_duration = max(0.5 SECONDS, surgery_step.min_duration - 1 SECONDS * user.skills.getRating(SKILL_SURGERY)) + //RUTGMC ADDITION BEGIN + if(locate(/obj/machinery/deployable/optable) in M.loc) + step_duration = max(0.5 SECONDS, surgery_step.min_duration - 1 SECONDS * user.skills.getRating(SKILL_SURGERY)) + //RUTGMC ADDITION END //Multiply tool success rate with multipler if(do_after(user, step_duration, NONE, M, BUSY_ICON_FRIENDLY, BUSY_ICON_MEDICAL, extra_checks = CALLBACK(user, TYPE_PROC_REF(/mob, break_do_after_checks), null, null, user.zone_selected)) && prob(surgery_step.tool_quality(tool) * CLAMP01(multipler))) diff --git a/icons/Marine/sentry.dmi b/icons/Marine/sentry.dmi index 3d7eb7cf0935b..eb25730848df4 100644 Binary files a/icons/Marine/sentry.dmi and b/icons/Marine/sentry.dmi differ diff --git a/icons/mob/ammoHUD.dmi b/icons/mob/ammoHUD.dmi index 2357f09203393..420b5fa408e89 100644 Binary files a/icons/mob/ammoHUD.dmi and b/icons/mob/ammoHUD.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index e1c691ea084ef..ee87598444182 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/obj/items/ammo.dmi b/icons/obj/items/ammo.dmi index 9680961c5f5c7..dadba6a39117f 100644 Binary files a/icons/obj/items/ammo.dmi and b/icons/obj/items/ammo.dmi differ diff --git a/icons/obj/items/grenade.dmi b/icons/obj/items/grenade.dmi index 44fb86f30fa9b..59a678d1d548c 100644 Binary files a/icons/obj/items/grenade.dmi and b/icons/obj/items/grenade.dmi differ diff --git a/modular_RUtgmc/code/_onclick/hud/screen_objects/menu_text_objects.dm b/modular_RUtgmc/code/_onclick/hud/screen_objects/menu_text_objects.dm index 3701dd4d2625d..56f3032fc0841 100644 --- a/modular_RUtgmc/code/_onclick/hud/screen_objects/menu_text_objects.dm +++ b/modular_RUtgmc/code/_onclick/hud/screen_objects/menu_text_objects.dm @@ -3,10 +3,10 @@ color = COLOR_RUTGMC_RED /atom/movable/screen/text/lobby/clickable/setup_character - maptext = "ПЕРСОНАЖ: ..." + maptext = "ПЕРСОНАЖ: ..." /atom/movable/screen/text/lobby/clickable/setup_character/update_text() - maptext = "ПЕРСОНАЖ: [hud?.mymob.client ? hud.mymob.client.prefs.real_name : "Unknown User"]" + maptext = "ПЕРСОНАЖ: [hud?.mymob.client ? hud.mymob.client.prefs.real_name : "Unknown User"]" if(registered) return RegisterSignal(hud.mymob.client, COMSIG_CLIENT_PREFERENCES_UIACTED, PROC_REF(update_text)) diff --git a/modular_RUtgmc/code/datums/greyscale/json_configs/cape_highlight.json b/modular_RUtgmc/code/datums/greyscale/json_configs/cape_highlight.json index a6c8e1dc5064e..3b17510024dd3 100644 --- a/modular_RUtgmc/code/datums/greyscale/json_configs/cape_highlight.json +++ b/modular_RUtgmc/code/datums/greyscale/json_configs/cape_highlight.json @@ -20,7 +20,55 @@ "highlight_long_h":[ { "type": "hyperscale", - "icon_state": "long" + "icon_state": "long_h" + } + ], + "highlight_long_line":[ + { + "type": "hyperscale", + "icon_state": "long_line" + } + ], + "highlight_long_line_h":[ + { + "type": "hyperscale", + "icon_state": "long_line_h" + } + ], + "highlight_long_medic":[ + { + "type": "hyperscale", + "icon_state": "long_medic" + } + ], + "highlight_long_medic_h":[ + { + "type": "hyperscale", + "icon_state": "long_medic_h" + } + ], + "highlight_long_skull":[ + { + "type": "hyperscale", + "icon_state": "long_skull" + } + ], + "highlight_long_skull_h":[ + { + "type": "hyperscale", + "icon_state": "long_skull" + } + ], + "highlight_long_arrow":[ + { + "type": "hyperscale", + "icon_state": "long_arrow" + } + ], + "highlight_long_arrow_h":[ + { + "type": "hyperscale", + "icon_state": "long_arrow_h" } ], diff --git a/modular_RUtgmc/code/datums/jobs/job/pmc.dm b/modular_RUtgmc/code/datums/jobs/job/pmc.dm new file mode 100644 index 0000000000000..fdc97268d88e7 --- /dev/null +++ b/modular_RUtgmc/code/datums/jobs/job/pmc.dm @@ -0,0 +1,529 @@ +/datum/job/pmc + job_category = JOB_CAT_MARINE + access = ALL_PMC_ACCESS + minimal_access = ALL_PMC_ACCESS + skills_type = /datum/skills/pmc + faction = FACTION_TERRAGOV + job_flags = JOB_FLAG_PROVIDES_SQUAD_HUD + +/datum/skills/pmc/medic + name = "PMC Medic" + construction = SKILL_CONSTRUCTION_METAL + engineer = SKILL_ENGINEER_METAL + medical = SKILL_MEDICAL_PRACTICED + surgery = SKILL_SURGERY_PROFESSIONAL + +/datum/skills/pmc/engineer + name = "PMC Engineer" + engineer = SKILL_ENGINEER_MASTER + construction = SKILL_CONSTRUCTION_ADVANCED + leadership = SKILL_LEAD_BEGINNER + powerloader = SKILL_POWERLOADER_DABBLING + +//PMC Standard +/datum/job/pmc/standard + title = "PMC Standard" + paygrade = "PMC1" + outfit = /datum/outfit/job/pmc/standard + minimap_icon = "pmc_standart" + comm_title = "PMC-ST" + + +/datum/outfit/job/pmc/standard + name = "PMC Standard" + jobtype = /datum/job/pmc/standard + + id = /obj/item/card/id/silver + belt = /obj/item/storage/holster/blade/tomahawk/full + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/d + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc + gloves = /obj/item/clothing/gloves/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/cap + mask = /obj/item/clothing/mask/gas/pmc/leader + suit_store = /obj/item/weapon/gun/smg/mp7_new/attachm + r_store = /obj/item/storage/pouch/grenade + l_store = /obj/item/storage/pouch/magazine/large + back = /obj/item/storage/backpack/marine/satchel/pmc + + +/datum/outfit/job/pmc/standard/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/acpl40, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/acpl40, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(H), SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new, SLOT_IN_L_POUCH) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + + +//PMC Standard +/datum/job/pmc/standard_m + title = "PMC Standard M" + paygrade = "PMC8" + outfit = /datum/outfit/job/pmc/standard_m + minimap_icon = "pmc_standart" + comm_title = "PMC-ST" + + +/datum/outfit/job/pmc/standard_m + name = "PMC Standard M" + jobtype = /datum/job/pmc/standard_m + + id = /obj/item/card/id/silver + belt = /obj/item/storage/holster/blade/machete/full + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/holster + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/medium + gloves = /obj/item/clothing/gloves/marine/veteran/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/medium + mask = /obj/item/clothing/mask/gas/pmc/leader + suit_store = /obj/item/weapon/gun/smg/p19bizon/magnetic + r_store = /obj/item/storage/pouch/grenade + l_store = /obj/item/storage/pouch/magazine/large + back = /obj/item/storage/backpack/marine/satchel/pmc + + +/datum/outfit/job/pmc/standard_m/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p9x18, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/p9x18, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/p19, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/p19, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(H), SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/p19, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/p19, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/p19, SLOT_IN_L_POUCH) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + + +//PMC Gunner +/datum/job/pmc/gunner + title = "PMC Gunner" + paygrade = "PMC2" + skills_type = /datum/skills/smartgunner/pmc + outfit = /datum/outfit/job/pmc/gunner + minimap_icon = "pmc_smartgunner" + comm_title = "PMC-SG" + + +/datum/outfit/job/pmc/gunner + name = "PMC Gunner" + jobtype = /datum/job/pmc/gunner + + id = /obj/item/card/id/silver + belt = /obj/item/belt_harness/marine + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/holster + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/heavy + gloves = /obj/item/clothing/gloves/marine/veteran/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/heavy + mask = /obj/item/clothing/mask/gas/pmc + glasses = /obj/item/clothing/glasses/night/m56_goggles + suit_store = /obj/item/weapon/gun/rifle/standard_smartmachinegun/pmc + r_store = /obj/item/storage/pouch/explosive + l_store = /obj/item/storage/holster/flarepouch/full + back = /obj/item/storage/backpack/marine/standard/pmc + + +/datum/outfit/job/pmc/gunner/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/enrg_bar, SLOT_IN_HEAD) + + H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/oxycodone, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/standard_smartmachinegun, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70/tactical(H), SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/explosive/mine/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/mine/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_R_POUCH) + +//PMC Medic +/datum/job/pmc/medic + title = "PMC Medic" + paygrade = "PMC3" + outfit = /datum/outfit/job/pmc/medic + skills_type = /datum/skills/pmc/medic + minimap_icon = "pmc_medic" + comm_title = "PMC-MD" + + +/datum/outfit/job/pmc/medic + name = "PMC Medic" + jobtype = /datum/job/pmc/medic + + id = /obj/item/card/id/silver + belt = /obj/item/storage/holster/belt/dartgun/pmc_full + glasses = /obj/item/clothing/glasses/hud/medsunglasses + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/medic + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/medic + gloves = /obj/item/healthanalyzer/gloves + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/medic + mask = /obj/item/clothing/mask/gas/pmc/leader + suit_store = /obj/item/weapon/gun/rifle/standard_autoshotgun/medic + l_store = /obj/item/storage/pouch/magazine/large + r_store = /obj/item/storage/pouch/surgery + back = /obj/item/storage/backpack/marine/satchel/medic + + +/datum/outfit/job/pmc/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/standardautoshotgun/slug, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/packet/standardautoshotgun/slug, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/defibrillator, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/deployable_optable, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/splint, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/alkysine, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/imidazoline, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/spaceacillin, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/peridaxonplus, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/advanced/quickclotplus, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/meralyne, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/dermaline, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/oxycodone, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/hypervene, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/advanced/bruise_combat_pack, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/advanced/burn_combat_pack, SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx15_slug, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx15_slug, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/tx15_slug, SLOT_IN_L_POUCH) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + +//PMC Engineer +/datum/job/pmc/engineer + title = "PMC Engineer" + paygrade = "PMC4" + outfit = /datum/outfit/job/pmc/engineer + skills_type = /datum/skills/pmc/engineer + minimap_icon = "pmc_engineer" + comm_title = "PMC-EN" + + +/datum/outfit/job/pmc/engineer + name = "PMC Engineer" + jobtype = /datum/job/pmc/engineer + + id = /obj/item/card/id/silver + belt = /obj/item/storage/holster/belt/ts34/full_incendiary + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/engineer + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/engineer + gloves = /obj/item/clothing/gloves/marine/veteran/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/engineer + mask = /obj/item/clothing/mask/gas/pmc/leader + suit_store = /obj/item/weapon/gun/flamer/big_flamer/marinestandard + r_store = /obj/item/storage/pouch/construction + l_store = /obj/item/storage/pouch/tools/full + back = /obj/item/storage/backpack/marine/engineerpack/pmc + glasses = /obj/item/clothing/glasses/welding/superior + + +/datum/outfit/job/pmc/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank/large, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/weapon/gun/sentry/flamer_sentry, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/box/m94, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique/genghis_charge, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/tool/multitool, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/chem_grenade/razorburn_smol, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/chem_grenade/razorburn_smol, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain , SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak , SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/stack/barbed_wire/full, SLOT_IN_R_POUCH) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack , SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack , SLOT_IN_HEAD) + + +//PMC Sniper +/datum/job/pmc/sniper + title = "PMC Sniper" + paygrade = "PMC5" + skills_type = /datum/skills/specialist/pmc + outfit = /datum/outfit/job/pmc/sniper + minimap_icon = "pmc_sniper" + comm_title = "PMC-SN" + + +/datum/outfit/job/pmc/sniper + name = "PMC Sniper" + jobtype = /datum/job/pmc/sniper + + id = /obj/item/card/id/silver + belt = /obj/item/storage/holster/belt/pistol/m4a3/vp70_pmc + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/sniper + gloves = /obj/item/clothing/gloves/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/sniper + mask = /obj/item/clothing/mask/gas/pmc + glasses = /obj/item/clothing/glasses/night_vision/pmc + suit_store = /obj/item/weapon/gun/rifle/sniper/elite + r_store = /obj/item/storage/pouch/magazine/large/pmc_sniper + l_store = /obj/item/storage/pouch/magazine/large/pmc_sniper + back = /obj/item/storage/backpack/marine/standard/pmc + + +/datum/outfit/job/pmc/sniper/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/autoinjector/combat_advanced, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/enrg_bar, SLOT_IN_HEAD) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/binoculars/tactical/range, SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/box/explosive_mines/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/sniper/elite, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/cell/night_vision_battery, SLOT_IN_BACKPACK) + + +//PMC Leader +/datum/job/pmc/leader + job_category = JOB_CAT_COMMAND + title = "PMC Leader" + paygrade = "PMC6" + skills_type = /datum/skills/sl/pmc + outfit = /datum/outfit/job/pmc/leader + minimap_icon = "pmc_leader" + comm_title = "PMC-LD" + + +/datum/outfit/job/pmc/leader + name = "PMC Leader" + jobtype = /datum/job/pmc/leader + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/marine + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/leader + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/leader + gloves = /obj/item/clothing/gloves/marine/veteran/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/leader + mask = /obj/item/clothing/mask/gas/pmc/leader + glasses = /obj/item/clothing/glasses/night/m42_night_goggles + suit_store = /obj/item/weapon/gun/smg/ump45/pmc + r_store = /obj/item/storage/pouch/grenade + l_store = /obj/item/storage/pouch/magazine/large + back = /obj/item/storage/backpack/marine/standard/pmc + + +/datum/outfit/job/pmc/leader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp78/pmc(H), SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BELT) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_L_POUCH) + + H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/night_vision/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/cell/night_vision_battery, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/cell/night_vision_battery, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/ump45/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/plasma_pistol, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) + +//PMC Leader +/datum/job/pmc/leader_l + job_category = JOB_CAT_COMMAND + title = "PMC Leader L" + paygrade = "PMC7" + skills_type = /datum/skills/sl/pmc + outfit = /datum/outfit/job/pmc/leader_l + minimap_icon = "pmc_leader" + comm_title = "PMC-LD" + + +/datum/outfit/job/pmc/leader_l + name = "PMC Leader" + jobtype = /datum/job/pmc/leader_l + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/marine + ears = /obj/item/radio/headset/mainship + w_uniform = /obj/item/clothing/under/marine/veteran/pmcnew/leader/d + shoes = /obj/item/clothing/shoes/veteran/pmc + wear_suit = /obj/item/clothing/suit/storage/marine/veteran/pmc/leader_light + gloves = /obj/item/clothing/gloves/pmc + head = /obj/item/clothing/head/helmet/marine/veteran/pmc/leader + mask = /obj/item/clothing/mask/gas/pmc/leader + glasses = /obj/item/clothing/glasses/night/m42_night_goggles + suit_store = /obj/item/weapon/gun/smg/mp7_new/pmc + r_store = /obj/item/storage/pouch/grenade + l_store = /obj/item/storage/pouch/magazine/large + back = /obj/item/storage/backpack/marine/standard/pmc + + +/datum/outfit/job/pmc/leader_l/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_SUIT) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/pmc, SLOT_IN_SUIT) + + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/protein_pack, SLOT_IN_HEAD) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78, SLOT_IN_ACCESSORY) + H.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp78/pmc(H), SLOT_IN_ACCESSORY) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BELT) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BELT) + + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_L_POUCH) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_L_POUCH) + + H.equip_to_slot_or_del(new /obj/item/tool/crowbar/red, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/explosive/plastique, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/gauze, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/stack/medical/heal_pack/ointment, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/storage/ai2, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/night_vision/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/cell/night_vision_battery, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/cell/night_vision_battery, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp7_new/pmc, SLOT_IN_BACKPACK) + + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/impact, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/drain, SLOT_IN_R_POUCH) + H.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb/cloak, SLOT_IN_R_POUCH) diff --git a/modular_RUtgmc/code/game/objects/effects/overlays.dm b/modular_RUtgmc/code/game/objects/effects/overlays.dm index 5133f18988dd9..80ceb875efdbb 100644 --- a/modular_RUtgmc/code/game/objects/effects/overlays.dm +++ b/modular_RUtgmc/code/game/objects/effects/overlays.dm @@ -10,3 +10,57 @@ new_hud_list.icon = 'modular_RUtgmc/icons/effects/lases.dmi' new_hud_list.icon_state = icon_state_on hud_list[SQUAD_HUD_TERRAGOV] = new_hud_list + +/obj/effect/overlay/danger_red + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_red" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_orange + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_orange" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_yellow + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_yellow" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_aqua + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_aqua" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_cyan + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_cyan" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_blue + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_blue" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_green + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_green" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_purple + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_purple" + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/danger_white + name = "Danger" + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "danger_white" + layer = ABOVE_FLY_LAYER diff --git a/modular_RUtgmc/code/game/objects/explosives/grenades/grenade.dm b/modular_RUtgmc/code/game/objects/explosives/grenades/grenade.dm index 7897b5c2557de..d3ec650a07f41 100644 --- a/modular_RUtgmc/code/game/objects/explosives/grenades/grenade.dm +++ b/modular_RUtgmc/code/game/objects/explosives/grenades/grenade.dm @@ -3,9 +3,20 @@ var/G_hit_sound = 'modular_RUtgmc/sound/weapons/grenade/grenade_hit.ogg' var/G_throw_sound = 'modular_RUtgmc/sound/weapons/grenade/grenade_throw.ogg' + var/overlay_type = "red" + /obj/item/explosive/grenade/throw_at() . = ..() playsound(thrower, G_throw_sound, 25, 1, 6) sleep(0.3 SECONDS) playsound(loc, G_hit_sound, 20, 1, 9) +/obj/item/explosive/grenade/update_overlays() + . = ..() + var/danger = "danger_" + if(overlay_type) + danger += overlay_type + else + danger += "0" + if(active) + . += image('modular_RUtgmc/icons/obj/items/grenade.dmi', icon_state = danger) diff --git a/modular_RUtgmc/code/game/objects/items/explosives/marines.dm b/modular_RUtgmc/code/game/objects/items/explosives/marines.dm index db5d5de8069b7..3fbccede9c521 100644 --- a/modular_RUtgmc/code/game/objects/items/explosives/marines.dm +++ b/modular_RUtgmc/code/game/objects/items/explosives/marines.dm @@ -1,7 +1,12 @@ +/obj/item/explosive/grenade + icon_state = "grenade_ru" //No path changes, cause I'm lazy to change almost all in-game grenades + /obj/item/explosive/grenade/pmc power = 125 falloff = 40 + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + /obj/item/explosive/grenade/pmc/prime() create_shrapnel(loc, 15, shrapnel_spread = 30, shrapnel_type = /datum/ammo/bullet/shrapnel/metal) return ..() @@ -10,10 +15,116 @@ power = 125 falloff = 40 + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + /obj/item/explosive/grenade/m15/prime() create_shrapnel(loc, 15, shrapnel_spread = 30, shrapnel_type = /datum/ammo/bullet/shrapnel/metal) return ..() +/obj/item/explosive/grenade/stick + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + +/obj/item/explosive/grenade/upp + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + +/obj/item/explosive/grenade/phosphorus/upp + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + +/obj/item/explosive/grenade/impact + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "blue" + +/obj/item/explosive/grenade/incendiary + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "orange" + +/obj/item/explosive/grenade/incendiary/som + icon = 'icons/obj/items/grenade.dmi' + overlay_type = "orange" + +/obj/item/explosive/grenade/incendiary/molotov + overlay_type = null + +/obj/item/explosive/grenade/ags + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + +/obj/item/explosive/grenade/smokebomb/cloak/ags + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "green" + +/obj/item/explosive/grenade/smokebomb/drain/agls + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "purple" + +/obj/item/explosive/grenade/mirage + overlay_type = null + +/obj/item/explosive/grenade/smokebomb + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state = "grenade_m18" + arm_sound = 'modular_RUtgmc/sound/weapons/grenade/grenade_pinout4.ogg' + G_hit_sound = 'modular_RUtgmc/sound/weapons/grenade/grenade_hit4.ogg' + + overlay_type = "white" + +/obj/item/explosive/grenade/smokebomb/neuro + icon = 'icons/obj/items/grenade.dmi' + + overlay_type = "orange" + +/obj/item/explosive/grenade/smokebomb/satrapine + icon = 'icons/obj/items/grenade.dmi' + +/obj/item/explosive/grenade/smokebomb/som + icon = 'icons/obj/items/grenade.dmi' + + overlay_type = "cyan" + +/obj/item/explosive/grenade/smokebomb/acid + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "aqua" + +/obj/item/explosive/grenade/smokebomb/cloak + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "green" + +/obj/item/explosive/grenade/smokebomb/drain + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + icon_state_mini = "grenade_purple" + + overlay_type = "purple" + +/obj/item/explosive/grenade/rad + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "green" + +/obj/item/explosive/grenade/chem_grenade/razorburn_smol + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "yellow" + +/obj/item/explosive/grenade/chem_grenade/razorburn_large + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + + overlay_type = "yellow" + +/obj/item/explosive/grenade/empgrenade + overlay_type = "blue" + +/obj/item/explosive/grenade/phosphorus + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + arm_sound = 'modular_RUtgmc/sound/weapons/grenade/grenade_pinout4.ogg' + G_hit_sound = 'modular_RUtgmc/sound/weapons/grenade/grenade_hit4.ogg' + + overlay_type = "cyan" + /obj/item/explosive/grenade/sectoid power = 150 falloff = 25 @@ -25,6 +136,12 @@ power = 90 falloff = 40 + overlay_type = "yellow" + +/obj/item/explosive/grenade/training + icon = 'modular_RUtgmc/icons/obj/items/grenade.dmi' + overlay_type = null + /obj/item/explosive/grenade/sticky/trailblazer icon_state_mini = "grenade_trailblazer" var/fire_level = 25 @@ -33,6 +150,8 @@ var/our_fire_stacks = 0 var/our_fire_damage = 0 + overlay_type = null + /obj/item/explosive/grenade/sticky/trailblazer/stuck_to(atom/hit_atom) . = ..() RegisterSignal(stuck_to, COMSIG_MOVABLE_MOVED, PROC_REF(make_fire)) @@ -55,6 +174,8 @@ burn_level = 45 fire_color = "blue" + overlay_type = null + /obj/item/explosive/grenade/sticky/trailblazer/phosphorus/activate(mob/user) . = ..() if(!.) @@ -100,3 +221,18 @@ upper_fuel_limit = 750 // 750 * 2 (ticks) / 60 (seconds) = 25 minutes G_hit_sound = null G_throw_sound = null + + overlay_type = null + +/obj/item/explosive/grenade/chem_grenade/metalfoam + overlay_type = null + +/obj/item/explosive/grenade/chem_grenade/antiweed + overlay_type = null + +/obj/item/explosive/grenade/chem_grenade/cleaner + overlay_type = null + +/obj/item/explosive/grenade/smokebomb/xeno + icon = 'icons/obj/items/grenade.dmi' + overlay_type = "purple" diff --git a/modular_RUtgmc/code/game/objects/items/items.dm b/modular_RUtgmc/code/game/objects/items/items.dm index 765e5aa6909d8..64764e89ba06c 100644 --- a/modular_RUtgmc/code/game/objects/items/items.dm +++ b/modular_RUtgmc/code/game/objects/items/items.dm @@ -2,6 +2,9 @@ ///Current hair concealing option selected. var/current_hair_concealment + ///If TRUE you cant deploy item next to another deployable in 5x5 tile radius. + var/near_lock + /obj/item/color_item(obj/item/facepaint/paint, mob/living/carbon/human/user) if(paint.uses < 1) diff --git a/modular_RUtgmc/code/game/objects/items/reagent_containers/pill.dm b/modular_RUtgmc/code/game/objects/items/reagent_containers/pill.dm new file mode 100644 index 0000000000000..9859aa031425c --- /dev/null +++ b/modular_RUtgmc/code/game/objects/items/reagent_containers/pill.dm @@ -0,0 +1,4 @@ +/obj/item/reagent_containers/pill/hyronalin + pill_desc = "A hyronalin pill" + list_reagents = list(/datum/reagent/medicine/hyronalin = 15) + pill_id = 17 diff --git a/modular_RUtgmc/code/game/objects/items/storage/backpack.dm b/modular_RUtgmc/code/game/objects/items/storage/backpack.dm index adbe54554eb73..4d03cf8271b59 100644 --- a/modular_RUtgmc/code/game/objects/items/storage/backpack.dm +++ b/modular_RUtgmc/code/game/objects/items/storage/backpack.dm @@ -71,6 +71,111 @@ item_icons = list( slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi') +/obj/item/storage/backpack/marine/standard/pmc + name = "\improper PMC backpack" + icon = 'modular_RUtgmc/icons/obj/items/storage/storage.dmi' + icon_state = "pmc_backpack" + item_icons = list( + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi') + access_delay = 0 + +/obj/item/storage/backpack/marine/engineerpack/pmc + name = "\improper PMC welderpack" + icon = 'modular_RUtgmc/icons/obj/items/storage/storage.dmi' + icon_state = "pmc_welderpack" + item_icons = list( + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi') + access_delay = 0 + +/obj/item/storage/backpack/marine/satchel/pmc + name = "\improper PMC satchel" + icon = 'modular_RUtgmc/icons/obj/items/storage/storage.dmi' + icon_state = "pmc_satchel" + item_icons = list( + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi') + +/obj/item/storage/backpack/marine/satchel/medic + name = "\improper PMC Medical satchel" + icon = 'modular_RUtgmc/icons/obj/items/storage/storage.dmi' + icon_state = "pmc_medic_satchel" + item_state = "pmc_medic_satchel" + item_icons = list( + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi') + + var/obj/item/cell/high/cell //Starts with a high capacity energy cell. + var/icon_skin + +/obj/item/storage/backpack/marine/satchel/medic/Initialize(mapload, ...) + . = ..() + cell = new + icon_skin = icon_state + update_icon() + +/obj/item/storage/backpack/marine/satchel/medic/proc/use_charge(mob/user, amount = 0, mention_charge = TRUE) + var/warning = "" + if(amount > cell.charge) + playsound(src, 'sound/machines/buzz-two.ogg', 25, 1) + if(cell.charge) + warning = "[src]'s defibrillator recharge unit buzzes a warning, its battery only having enough power to partially recharge the defibrillator for [cell.charge] amount. " + else + warning = "[src]'s defibrillator recharge unit buzzes a warning, as its battery is completely depleted of charge. " + else + playsound(src, 'sound/machines/ping.ogg', 25, 1) + warning = "[src]'s defibrillator recharge unit cheerfully pings as it successfully recharges the defibrillator. " + cell.charge -= min(cell.charge, amount) + if(mention_charge) + to_chat(user, span_notice("[warning]Charge Remaining: [cell.charge]/[cell.maxcharge]")) + update_icon() + +/obj/item/storage/backpack/marine/satchel/medic/examine(mob/user) + . = ..() + if(cell) + . += span_notice("Its defibrillator recharge unit has a loaded power cell and its readout counter is active. Charge Remaining: [cell.charge]/[cell.maxcharge]") + else + . += span_warning("Its defibrillator recharge unit does not have a power cell installed!") + +/obj/item/storage/backpack/marine/satchel/medic/update_icon_state() + icon_state = icon_skin + if(cell?.charge >= 0) + switch(PERCENT(cell.charge/cell.maxcharge)) + if(75 to INFINITY) + icon_state += "_100" + if(50 to 74.9) + icon_state += "_75" + if(25 to 49.9) + icon_state += "_50" + if(0.1 to 24.9) + icon_state += "_25" + else + icon_state += "_0" + +/obj/item/storage/backpack/marine/satchel/medic/MouseDrop_T(obj/item/W, mob/living/user) //Dragging the defib/power cell onto the backpack will trigger its special functionality. + if(istype(W, /obj/item/defibrillator)) + if(cell) + var/obj/item/defibrillator/D = W + var/charge_difference = D.dcell.maxcharge - D.dcell.charge + if(charge_difference) //If the defib has less than max charge, recharge it. + use_charge(user, charge_difference) //consume an appropriate amount of charge + D.dcell.charge += min(charge_difference, cell.charge) //Recharge the defibrillator battery with the lower of the difference between its present and max cap, or the remaining charge + else + to_chat(user, span_warning("This defibrillator is already at maximum charge!")) + else + to_chat(user, span_warning("[src]'s defibrillator recharge unit does not have a power cell installed!")) + else if(istype(W, /obj/item/cell)) + if(user.drop_held_item()) + W.loc = src + var/replace_install = "You replace the cell in [src]'s defibrillator recharge unit." + if(!cell) + replace_install = "You install a cell in [src]'s defibrillator recharge unit." + else + cell.update_icon() + user.put_in_hands(cell) + cell = W + to_chat(user, span_notice("[replace_install] Charge Remaining: [cell.charge]/[cell.maxcharge]")) + playsound(user, 'sound/weapons/guns/interact/rifle_reload.ogg', 25, 1, 5) + update_icon() + return ..() + /obj/item/storage/backpack/marine/corpsman icon = 'modular_RUtgmc/icons/obj/items/storage/storage.dmi' @@ -85,3 +190,4 @@ slot_l_hand = 'modular_RUtgmc/icons/mob/inhands/equipment/backpacks_left.dmi', slot_r_hand = 'modular_RUtgmc/icons/mob/inhands/equipment/backpacks_right.dmi', slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi') + diff --git a/modular_RUtgmc/code/game/objects/items/storage/belt.dm b/modular_RUtgmc/code/game/objects/items/storage/belt.dm index 53a47172a6af6..2c2d26e856934 100644 --- a/modular_RUtgmc/code/game/objects/items/storage/belt.dm +++ b/modular_RUtgmc/code/game/objects/items/storage/belt.dm @@ -48,6 +48,42 @@ /obj/item/stack/medical/heal_pack/advanced/bruise_combat_pack, ) +/obj/item/storage/holster/belt/dartgun + name = "\improper DP-2 Dart Gun holster rig" + desc = "A purpose built belt-holster assembly that holds a DP-2 dart gun and 5 dart boxes." + icon = 'modular_RUtgmc/icons/obj/clothing/belts.dmi' + icon_state = "belt_dart_gun" + max_w_class = WEIGHT_CLASS_NORMAL + w_class = WEIGHT_CLASS_BULKY + storage_slots = 6 + max_storage_space = 18 + can_hold = list( + /obj/item/weapon/gun/shotgun/dart_pistol, + /obj/item/storage/dartbox, + ) + holsterable_allowed = list(/obj/item/weapon/gun/shotgun/dart_pistol) + +/obj/item/storage/holster/belt/dartgun/full/Initialize(mapload) + . = ..() + var/obj/item/weapon/gun/new_gun = new /obj/item/weapon/gun/shotgun/dart_pistol(src) + new /obj/item/storage/dartbox/bicaridine(src) + new /obj/item/storage/dartbox/kelotane(src) + new /obj/item/storage/dartbox/tricordrazine(src) + new /obj/item/storage/dartbox/tramadol(src) + new /obj/item/storage/dartbox/dylovene(src) + INVOKE_ASYNC(src, PROC_REF(handle_item_insertion), new_gun) + +/obj/item/storage/holster/belt/dartgun/pmc_full/Initialize(mapload) + . = ..() + var/obj/item/weapon/gun/new_gun = new /obj/item/weapon/gun/shotgun/dart_pistol(src) + new /obj/item/storage/dartbox/combat(src) + new /obj/item/storage/dartbox/synaptizine(src) + new /obj/item/storage/dartbox/russian_red(src) + new /obj/item/storage/dartbox/dylovene(src) + new /obj/item/storage/dartbox/inaprovaline(src) + INVOKE_ASYNC(src, PROC_REF(handle_item_insertion), new_gun) + /obj/item/storage/belt/grenade/Initialize(mapload) . = ..() AddComponent(/datum/component/tac_reload_storage) + diff --git a/modular_RUtgmc/code/game/objects/items/storage/firstaid.dm b/modular_RUtgmc/code/game/objects/items/storage/firstaid.dm new file mode 100644 index 0000000000000..54b336332ff2a --- /dev/null +++ b/modular_RUtgmc/code/game/objects/items/storage/firstaid.dm @@ -0,0 +1,139 @@ +/obj/item/storage/ai2 //УРААААААААААААААА + name = "\"АИ-2\" first aid kit" + desc = "It's an individual medical kit with rare and useful reagents." + icon = 'modular_RUtgmc/icons/obj/items/storage/firstaidkit.dmi' + icon_state = "firstaidkit" + storage_slots = 8 + w_class = WEIGHT_CLASS_NORMAL + use_sound = 'sound/effects/toolbox.ogg' + can_hold = list( + /obj/item/storage/pill_bottle/penal, + /obj/item/reagent_containers/hypospray/autoinjector/pen, + ) + var/is_open = FALSE + +/obj/item/storage/ai2/Initialize(mapload, ...) + . = ..() + + new /obj/item/storage/pill_bottle/penal/meralyne(src) + new /obj/item/storage/pill_bottle/penal/dermaline(src) + new /obj/item/storage/pill_bottle/penal/hyronalin(src) + new /obj/item/storage/pill_bottle/penal/dexalin(src) + new /obj/item/reagent_containers/hypospray/autoinjector/pen/tramadol(src) + new /obj/item/reagent_containers/hypospray/autoinjector/pen/neuraline(src) + new /obj/item/reagent_containers/hypospray/autoinjector/pen/inaprovaline(src) + new /obj/item/reagent_containers/hypospray/autoinjector/pen/hypervene(src) + + update_icon() + +/obj/item/storage/ai2/update_icon_state() + cut_overlays() + + var/list/types_and_overlays = list( + /obj/item/storage/pill_bottle/penal/meralyne = "firstaidkit_meralyne_open", + /obj/item/storage/pill_bottle/penal/dermaline = "firstaidkit_dermaline_open", + /obj/item/storage/pill_bottle/penal/hyronalin = "firstaidkit_hyronalin_open", + /obj/item/storage/pill_bottle/penal/dexalin = "firstaidkit_dexalin_open", + /obj/item/reagent_containers/hypospray/autoinjector/pen/tramadol = "firstaidkit_tramadol_open", + /obj/item/reagent_containers/hypospray/autoinjector/pen/neuraline = "firstaidkit_neuraline_open", + /obj/item/reagent_containers/hypospray/autoinjector/pen/inaprovaline = "firstaidkit_inaprovaline_open", + /obj/item/reagent_containers/hypospray/autoinjector/pen/hypervene = "firstaidkit_hypervene_open", + ) + + if(is_open) + for (var/obj/item/W in contents) + if (types_and_overlays[W.type]) + add_overlay(types_and_overlays[W.type]) + types_and_overlays -= W.type + +/obj/item/storage/ai2/open(mob/user) + . = ..() + icon_state = "firstaidkit_empty" + is_open = TRUE + update_icon() + +/obj/item/storage/ai2/close(mob/user) + . = ..() + icon_state = "firstaidkit" + is_open = FALSE + update_icon() + +/obj/item/storage/ai2/attackby(obj/item/I, mob/user, params) + ..() + update_icon() + +/obj/item/storage/pill_bottle/penal //Пусть будут пеналами, так интереснее (И не важно, что это переводится как "уголовный") + icon = 'modular_RUtgmc/icons/obj/items/storage/firstaidkit.dmi' + max_storage_space = 6 + w_class = WEIGHT_CLASS_TINY + greyscale_config = null + greyscale_colors = null + +/obj/item/storage/pill_bottle/penal/meralyne + name = "Meralyne \"Пенал\" case" + desc = "Contains a few meralyne pills, old and fancy." + icon_state = "meralyne_agent" + pill_type_to_fill = /obj/item/reagent_containers/pill/meralyne + +/obj/item/storage/pill_bottle/penal/dermaline + name = "Dermaline \"Пенал\" case" + desc = "Contains a few dermaline pills, old and fancy." + icon_state = "dermaline_agent" + pill_type_to_fill = /obj/item/reagent_containers/pill/dermaline + +/obj/item/storage/pill_bottle/penal/hyronalin + name = "Hyronalin \"Пенал\" case" + desc = "Contains a few hyronalin pills, old and fancy." + icon_state = "hyronalin_agent" + pill_type_to_fill = /obj/item/reagent_containers/pill/hyronalin + +/obj/item/storage/pill_bottle/penal/dexalin + name = "Dexalin \"Пенал\" case" + desc = "Contains a few dexalin pills, old and fancy." + icon_state = "dexalin_agent" + pill_type_to_fill = /obj/item/reagent_containers/pill/dexalin + +/obj/item/reagent_containers/hypospray/autoinjector/pen + icon = 'modular_RUtgmc/icons/obj/items/storage/firstaidkit.dmi' + volume = 30 + init_reagent_flags = null + +/obj/item/reagent_containers/hypospray/autoinjector/pen/tramadol + name = "Tramadol pen" + desc = "A pen loaded with 2 heavy doses of tramadol, use two times for better effect." + icon_state = "tramadol_pen" + amount_per_transfer_from_this = 15 + list_reagents = list(/datum/reagent/medicine/tramadol = 30) + +/obj/item/reagent_containers/hypospray/autoinjector/pen/neuraline + name = "Neuraline pen" + desc = "A pen loaded with strong stimulant reagent. Causes serious intoxication!" + icon_state = "neuraline_pen" + amount_per_transfer_from_this = 4 + list_reagents = list(/datum/reagent/medicine/neuraline = 4) + +/obj/item/reagent_containers/hypospray/autoinjector/pen/inaprovaline + name = "Inaprovaline pen" + desc = "A pen loaded with stimulant reagent. Use it for people in critical condition!" + icon_state = "inaprovaline_pen" + amount_per_transfer_from_this = 15 + list_reagents = list(/datum/reagent/medicine/inaprovaline = 30) + +/obj/item/reagent_containers/hypospray/autoinjector/pen/hypervene + name = "Hypervene pen" + desc = "A pen loaded with purge reagent. Be careful, it causes severe pain and purges EVERYTHING." + icon_state = "hypervene_pen" + amount_per_transfer_from_this = 15 + list_reagents = list(/datum/reagent/hypervene = 30) + +/obj/item/reagent_containers/pill/oxycodone + pill_desc = "A oxycodone pill. Best painkiller." + list_reagents = list(/datum/reagent/medicine/oxycodone = 15) + pill_id = 7 + +/obj/item/storage/pill_bottle/oxycodone + name = "oxycodone pill bottle" + desc = "Contains pills that numb severe pain." + pill_type_to_fill = /obj/item/reagent_containers/pill/oxycodone + greyscale_colors = "#360570#ffffff" + description_overlay = "Ox" diff --git a/modular_RUtgmc/code/game/objects/items/storage/holsters.dm b/modular_RUtgmc/code/game/objects/items/storage/holsters.dm index e4df9c7c37467..b055636f1a3f5 100644 --- a/modular_RUtgmc/code/game/objects/items/storage/holsters.dm +++ b/modular_RUtgmc/code/game/objects/items/storage/holsters.dm @@ -175,3 +175,9 @@ . = ..() var/obj/item/new_item = new /obj/item/weapon/claymore/tomahawk(src) INVOKE_ASYNC(src, PROC_REF(handle_item_insertion), new_item) + +/obj/item/storage/holster/belt/ts34/full_incendiary/Initialize(mapload) + . = ..() + var/obj/item/weapon/gun/new_gun = new /obj/item/weapon/gun/shotgun/double/marine/incendiary(src) + new /obj/item/ammo_magazine/shotgun/incendiary(src) + INVOKE_ASYNC(src, PROC_REF(handle_item_insertion), new_gun) diff --git a/modular_RUtgmc/code/game/objects/items/storage/surgery_table.dm b/modular_RUtgmc/code/game/objects/items/storage/surgery_table.dm new file mode 100644 index 0000000000000..7dbc19bba6c41 --- /dev/null +++ b/modular_RUtgmc/code/game/objects/items/storage/surgery_table.dm @@ -0,0 +1,224 @@ +/obj/item/deployable_optable + name = "\improper Deployable Operating Table" + desc = "An operating table able to be transported and deployed for medical procedures." + icon = 'modular_RUtgmc/icons/obj/items/surgery.dmi' + icon_state = "table_deployable" + max_integrity = 300 + flags_item = IS_DEPLOYABLE + w_class = WEIGHT_CLASS_NORMAL + var/deployable_item = /obj/machinery/deployable/optable + +/obj/item/deployable_optable/Initialize() + . = ..() + AddComponent(/datum/component/deployable_item, deployable_item, 10 SECONDS, 20 SECONDS) + +/obj/machinery/deployable/optable + name = "Deployable Operating Table" + desc = "Used for advanced medical procedures in field." + icon = 'modular_RUtgmc/icons/obj/items/surgery.dmi' + icon_state = "table2-idle" + resistance_flags = UNACIDABLE|XENO_DAMAGEABLE + density = TRUE + coverage = 10 + layer = TABLE_LAYER + allow_pass_flags = PASS_LOW_STRUCTURE|PASSABLE|PASS_WALKOVER + use_power = NO_POWER_USE + var/mob/living/carbon/human/victim = null + var/strapped = 0 + buckle_flags = CAN_BUCKLE + buckle_lying = 90 + var/obj/item/tank/anesthetic/anes_tank + +/obj/machinery/deployable/optable/Initialize(mapload) + . = ..() + + var/static/list/connections = list( + COMSIG_OBJ_TRY_ALLOW_THROUGH = PROC_REF(can_climb_over), + ) + AddElement(/datum/element/connect_loc, connections) + +/obj/machinery/deployable/optable/examine(mob/user) + . = ..() + if(get_dist(user, src) > 2 && !isobserver(user)) + return + if(anes_tank) + . += span_information("It has an [anes_tank] connected with the gauge showing [round(anes_tank.pressure,0.1)] kPa.") + +/obj/machinery/deployable/optable/attack_hand(mob/living/user) + . = ..() + if(.) + return + if(anes_tank) + user.put_in_active_hand(anes_tank) + to_chat(user, span_notice("You remove \the [anes_tank] from \the [src].")) + playsound(loc, 'sound/effects/air_release.ogg', 25, 1) + anes_tank = null + + +/obj/machinery/deployable/optable/user_buckle_mob(mob/living/buckling_mob, mob/user, check_loc = TRUE, silent) + if(!ishuman(buckling_mob)) + return FALSE + if(buckling_mob == user) + return FALSE + if(!ishuman(user)) //xenos buckling humans into op tables and applying anesthetic masks? no way. + to_chat(user, span_xenowarning("We don't have the manual dexterity to do this.")) + return FALSE + if(buckling_mob != victim) + to_chat(user, span_warning("Lay the patient on the table first!")) + return FALSE + if(!anes_tank) + to_chat(user, span_warning("There is no anesthetic tank connected to the table, load one first.")) + return FALSE + buckling_mob.visible_message(span_notice("[user] begins to connect [buckling_mob] to the anesthetic system.")) + if(!do_after(user, 2.5 SECONDS, IGNORE_HELD_ITEM, src, BUSY_ICON_GENERIC)) + if(buckling_mob != victim) + to_chat(user, span_warning("The patient must remain on the table!")) + return FALSE + to_chat(user, span_notice("You stop placing the mask on [buckling_mob]'s face.")) + return FALSE + if(!anes_tank) + to_chat(user, span_warning("There is no anesthetic tank connected to the table, load one first.")) + return FALSE + var/mob/living/carbon/human/buckling_human = buckling_mob + if(buckling_human.wear_mask && !buckling_human.dropItemToGround(buckling_human.wear_mask)) + to_chat(user, span_danger("You can't remove their mask!")) + return FALSE + if(!buckling_human.equip_to_slot_or_del(new /obj/item/clothing/mask/breath/medical(buckling_human), SLOT_WEAR_MASK)) + to_chat(user, span_danger("You can't fit the gas mask over their face!")) + return FALSE + buckling_human.visible_message("[span_notice("[user] fits the mask over [buckling_human]'s face and turns on the anesthetic.")]'") + to_chat(buckling_human, span_information("You begin to feel sleepy.")) + addtimer(CALLBACK(src, PROC_REF(knock_out_buckled), buckling_human), rand(2 SECONDS, 4 SECONDS)) + buckling_human.setDir(SOUTH) + return ..() + +///Knocks out someone buckled to the op table a few seconds later. Won't knock out if they've been unbuckled since. +/obj/machinery/deployable/optable/proc/knock_out_buckled(mob/living/buckled_mob) + if(!victim || victim != buckled_mob) + return + ADD_TRAIT(buckled_mob, TRAIT_KNOCKEDOUT, OPTABLE_TRAIT) + +/obj/machinery/deployable/optable/user_unbuckle_mob(mob/living/buckled_mob, mob/user, silent) + . = ..() + if(!.) + return + if(!silent) + buckled_mob.visible_message(span_notice("[user] turns off the anesthetic and removes the mask from [buckled_mob].")) + + +/obj/machinery/deployable/optable/post_unbuckle_mob(mob/living/buckled_mob) + if(!ishuman(buckled_mob)) // sanity check + return + var/mob/living/carbon/human/buckled_human = buckled_mob + var/obj/item/anesthetic_mask = buckled_human.wear_mask + buckled_human.dropItemToGround(anesthetic_mask) + qdel(anesthetic_mask) + addtimer(CALLBACK(src, PROC_REF(remove_knockout), buckled_mob), rand(2 SECONDS, 4 SECONDS)) + return ..() + +///Wakes the buckled mob back up after they're released +/obj/machinery/deployable/optable/proc/remove_knockout(mob/living/buckled_mob) + REMOVE_TRAIT(buckled_mob, TRAIT_KNOCKEDOUT, OPTABLE_TRAIT) + +/obj/machinery/deployable/optable/MouseDrop_T(atom/A, mob/user) + + if(istype(A, /obj/item)) + var/obj/item/I = A + if (!istype(I) || user.get_active_held_item() != I) + return + if(user.drop_held_item()) + if (I.loc != loc) + step(I, get_dir(I, src)) + else if(ismob(A)) + ..(A, user) + +/obj/machinery/deployable/optable/proc/check_victim() + if(locate(/mob/living/carbon/human, loc)) + var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, loc) + if(M.lying_angle) + victim = M + icon_state = M.handle_pulse() ? "table2-active" : "table2-critical" + return 1 + victim = null + stop_processing() + icon_state = "table_deployable_deployed" + return 0 + +/obj/machinery/deployable/optable/process() + check_victim() + +/obj/machinery/deployable/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user) + if (C == user) + user.visible_message(span_notice("[user] climbs on the operating table."), span_notice("You climb on the operating table."), null, null, 4) + else + visible_message(span_notice("[C] has been laid on the operating table by [user]."), null, null, 4) + C.set_resting(TRUE) + C.forceMove(loc) + + + if(ishuman(C)) + var/mob/living/carbon/human/H = C + victim = H + start_processing() + icon_state = H.handle_pulse() ? "table2-active" : "table2-critical" + else + icon_state = "table_deployable_deployed" + +/obj/machinery/deployable/optable/verb/climb_on() + set name = "Climb On Table" + set category = "Object" + set src in oview(1) + + if(usr.stat || !ishuman(usr) || usr.restrained() || !check_table(usr)) + return + + take_victim(usr,usr) + +/obj/machinery/deployable/optable/attackby(obj/item/I, mob/user, params) + . = ..() + + if(istype(I, /obj/item/tank/anesthetic)) + if(anes_tank) + return + user.transferItemToLoc(I, src) + anes_tank = I + to_chat(user, span_notice("You connect \the [anes_tank] to \the [src].")) + + if(!istype(I, /obj/item/grab)) + return + + var/obj/item/grab/G = I + if(victim && victim != G.grabbed_thing) + to_chat(user, span_warning("The table is already occupied!")) + return + var/mob/living/carbon/M + if(iscarbon(G.grabbed_thing)) + M = G.grabbed_thing + if(M.buckled) + to_chat(user, span_warning("Unbuckle first!")) + return + else if(istype(G.grabbed_thing, /obj/structure/closet/bodybag/cryobag)) + var/obj/structure/closet/bodybag/cryobag/C = G.grabbed_thing + if(!C.bodybag_occupant) + return + M = C.bodybag_occupant + C.open() + user.stop_pulling() + user.start_pulling(M) + + if(!M) + return + + take_victim(M, user) + +/obj/machinery/deployable/optable/proc/check_table(mob/living/carbon/patient as mob) + if(victim) + to_chat(usr, span_boldnotice("The table is already occupied!")) + return 0 + + if(patient.buckled) + to_chat(usr, span_boldnotice("Unbuckle first!")) + return 0 + + return 1 + diff --git a/modular_RUtgmc/code/game/objects/items/storage/surgical_tray.dm b/modular_RUtgmc/code/game/objects/items/storage/surgical_tray.dm new file mode 100644 index 0000000000000..64f38268ab864 --- /dev/null +++ b/modular_RUtgmc/code/game/objects/items/storage/surgical_tray.dm @@ -0,0 +1,70 @@ +/obj/item/storage/surgical_tray + name = "surgical tray" + desc = "A small metallic tray covered in sterile tarp. Intended to store surgical tools in a neat and clean fashion." + icon = 'modular_RUtgmc/icons/obj/items/surgery.dmi' + icon_state = "surgerytray" + flags_atom = CONDUCT + w_class = WEIGHT_CLASS_BULKY //Should not fit in backpacks + storage_slots = 12 + max_storage_space = 24 + force = 15 + attack_verb = list("slammed") + hitsound = 'modular_RUtgmc/sound/items/trayhit2.ogg' + can_hold = list( + /obj/item/tool/surgery, + /obj/item/stack/nanopaste, + ) + +/obj/item/storage/surgical_tray/Initialize(mapload, ...) + . = ..() + //new /obj/item/tool/surgery/scalpel/manager(src) RUTGMC REMOVAL + new /obj/item/tool/surgery/scalpel(src) + new /obj/item/tool/surgery/hemostat(src) + new /obj/item/tool/surgery/retractor(src) + new /obj/item/tool/surgery/surgical_membrane(src) + new /obj/item/tool/surgery/cautery(src) + new /obj/item/tool/surgery/circular_saw(src) + new /obj/item/tool/surgery/suture(src) + new /obj/item/tool/surgery/bonegel(src) + new /obj/item/tool/surgery/bonesetter(src) + new /obj/item/tool/surgery/FixOVein(src) + new /obj/item/stack/nanopaste(src) + + update_icon() + +/obj/item/storage/surgical_tray/update_icon_state() + cut_overlays() + + var/list/types_and_overlays = list( + /obj/item/tool/surgery/bonesetter = "tray_bonesetter", + /obj/item/tool/surgery/cautery = "tray_cautery", + /obj/item/tool/surgery/circular_saw = "tray_saw", + /obj/item/tool/surgery/hemostat = "tray_hemostat", + /obj/item/tool/surgery/retractor = "tray_retractor", + /obj/item/tool/surgery/scalpel = "tray_scalpel", + /obj/item/tool/surgery/scalpel/laser3 = "tray_scalpel_laser", + /obj/item/tool/surgery/scalpel/manager = "tray_scalpel_manager", + /obj/item/tool/surgery/suture = "tray_suture", + /obj/item/stack/nanopaste = "tray_nanopaste", + /obj/item/tool/surgery/bonegel = "tray_bone-gel", + /obj/item/tool/surgery/FixOVein = "tray_fixovein", + /obj/item/tool/surgery/surgical_membrane = "tray_bruise_pack", + ) + for (var/obj/item/W in contents) + if (types_and_overlays[W.type]) + add_overlay(types_and_overlays[W.type]) + types_and_overlays -= W.type + +/obj/item/storage/surgical_tray/attackby(obj/item/I, mob/user, params) + ..() + update_icon() + +/obj/item/storage/surgical_tray/attack(mob/living/M as mob, mob/user as mob, var/target_zone) + if(..() && contents.len) + spill(3, get_turf(M)) + user.visible_message(span_warning("[user] smashes \the [src] into [M], causing it to spill its contents across the area!")) + +/obj/item/storage/surgical_tray/throw_impact(atom/hit_atom) + ..() + playsound(src.loc, 'modular_RUtgmc/sound/items/trayhit2.ogg', 50, 1) + spill(3, src.loc) diff --git a/modular_RUtgmc/code/game/objects/items/tools/surgery_tools.dm b/modular_RUtgmc/code/game/objects/items/tools/surgery_tools.dm new file mode 100644 index 0000000000000..2c6ab1cabb62f --- /dev/null +++ b/modular_RUtgmc/code/game/objects/items/tools/surgery_tools.dm @@ -0,0 +1,5 @@ +/obj/item/tool/surgery + icon = 'modular_RUtgmc/icons/obj/items/surgery_tools.dmi' + +/obj/item/tool/surgery/scalpel/laser3 + icon = 'icons/obj/items/surgery_tools.dmi' diff --git a/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm b/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm index c03db9fb5f35f..acbc1c255c5e6 100644 --- a/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm +++ b/modular_RUtgmc/code/game/objects/machinery/vending/marine_vending.dm @@ -465,6 +465,13 @@ /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = 5, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/ump45 = 3, + /obj/item/ammo_magazine/smg/ump45 = -1, + /obj/item/ammo_magazine/smg/ump45/ext = 5, + /obj/item/weapon/gun/smg/mp7_new = 3, + /obj/item/ammo_magazine/smg/mp7_new = -1, + /obj/item/weapon/gun/smg/p19bizon = 3, + /obj/item/ammo_magazine/smg/p19 = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -479,6 +486,7 @@ /obj/item/weapon/gun/shotgun/double/martini = -1, /obj/item/ammo_magazine/rifle/martini = -1, /obj/item/weapon/gun/revolver/standard_revolver/coltrifle = -1, + /obj/item/weapon/gun/shotgun/double/marine = -1, /obj/item/ammo_magazine/revolver/rifle = -1, ), "Shotgun" = list( @@ -490,8 +498,15 @@ /obj/item/ammo_magazine/shotgun/flechette = -1, /obj/item/ammo_magazine/shotgun/tracker = -1, /obj/item/weapon/gun/rifle/standard_autoshotgun = -1, + /obj/item/ammo_magazine/rifle/tx15_buckshot = -1, /obj/item/ammo_magazine/rifle/tx15_flechette = -1, /obj/item/ammo_magazine/rifle/tx15_slug = -1, + /obj/item/ammo_magazine/rifle/tx15_incendiary = 5, + /obj/item/weapon/gun/rifle/standard_autoshotgun/jackhammer = 3, + /obj/item/ammo_magazine/rifle/tx24_buckshot = -1, + /obj/item/ammo_magazine/rifle/tx24_flechette = -1, + /obj/item/ammo_magazine/rifle/tx24_slug = -1, + /obj/item/ammo_magazine/rifle/tx24_incendiary = 5, /obj/item/storage/holster/belt/ts34/full = 5, ), "Machinegun" = list( @@ -629,7 +644,11 @@ /obj/item/ammo_magazine/packet/p492x34mm = -1, /obj/item/ammo_magazine/packet/p86x70mm = -1, /obj/item/ammo_magazine/packet/standardautoshotgun = -1, + /obj/item/ammo_magazine/packet/standardautoshotgun/slug = -1, /obj/item/ammo_magazine/packet/standardautoshotgun/flechette = -1, + /obj/item/ammo_magazine/packet/acp40 = -1, + /obj/item/ammo_magazine/packet/acpl40 = -1, + /obj/item/ammo_magazine/packet/p9x18 = -1, /obj/item/ammo_magazine/packet/p4570 = -1, /obj/item/ammo_magazine/packet/long_special = -1, /obj/item/storage/box/visual/magazine = -1, @@ -690,6 +709,12 @@ /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = 5, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/ump45 = 1, + /obj/item/ammo_magazine/smg/ump45 = -1, + /obj/item/weapon/gun/smg/mp7_new = 1, + /obj/item/ammo_magazine/smg/mp7_new = -1, + /obj/item/weapon/gun/smg/p19bizon = 1, + /obj/item/ammo_magazine/smg/p19 = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -714,8 +739,14 @@ /obj/item/ammo_magazine/shotgun/flechette = -1, /obj/item/ammo_magazine/shotgun/tracker = -1, /obj/item/weapon/gun/rifle/standard_autoshotgun = -1, + /obj/item/ammo_magazine/rifle/tx15_buckshot = -1, /obj/item/ammo_magazine/rifle/tx15_flechette = -1, /obj/item/ammo_magazine/rifle/tx15_slug = -1, + /obj/item/weapon/gun/rifle/standard_autoshotgun/jackhammer = 1, + /obj/item/ammo_magazine/rifle/tx24_buckshot = -1, + /obj/item/ammo_magazine/rifle/tx24_flechette = -1, + /obj/item/ammo_magazine/rifle/tx24_slug = -1, + /obj/item/weapon/gun/shotgun/double/marine = -1, /obj/item/storage/holster/belt/ts34/full = 5, ), "Machinegun" = list( @@ -848,7 +879,11 @@ /obj/item/ammo_magazine/packet/p492x34mm = -1, /obj/item/ammo_magazine/packet/p86x70mm = -1, /obj/item/ammo_magazine/packet/standardautoshotgun = -1, + /obj/item/ammo_magazine/packet/standardautoshotgun/slug = -1, /obj/item/ammo_magazine/packet/standardautoshotgun/flechette = -1, + /obj/item/ammo_magazine/packet/acp40 = -1, + /obj/item/ammo_magazine/packet/acpl40 = -1, + /obj/item/ammo_magazine/packet/p9x18 = -1, /obj/item/ammo_magazine/packet/p4570 = -1, /obj/item/ammo_magazine/packet/long_special = -1, /obj/item/storage/box/visual/magazine = -1, @@ -914,6 +949,13 @@ /obj/item/ammo_magazine/smg/standard_smg = -1, /obj/item/weapon/gun/smg/standard_machinepistol = -1, /obj/item/ammo_magazine/smg/standard_machinepistol = -1, + /obj/item/weapon/gun/smg/ump45 = -1, + /obj/item/ammo_magazine/smg/ump45 = -1, + /obj/item/ammo_magazine/smg/ump45/ext = -1, + /obj/item/weapon/gun/smg/mp7_new = -1, + /obj/item/ammo_magazine/smg/mp7_new = -1, + /obj/item/weapon/gun/smg/p19bizon = -1, + /obj/item/ammo_magazine/smg/p19 = -1, ), "Marksman" = list( /obj/item/weapon/gun/rifle/standard_dmr = -1, @@ -939,8 +981,15 @@ /obj/item/ammo_magazine/shotgun/flechette = -1, /obj/item/ammo_magazine/shotgun/tracker = -1, /obj/item/weapon/gun/rifle/standard_autoshotgun = -1, + /obj/item/ammo_magazine/rifle/tx15_buckshot = -1, /obj/item/ammo_magazine/rifle/tx15_flechette = -1, /obj/item/ammo_magazine/rifle/tx15_slug = -1, + /obj/item/ammo_magazine/rifle/tx15_incendiary = -1, + /obj/item/weapon/gun/rifle/standard_autoshotgun/jackhammer = -1, + /obj/item/ammo_magazine/rifle/tx24_buckshot = -1, + /obj/item/ammo_magazine/rifle/tx24_flechette = -1, + /obj/item/ammo_magazine/rifle/tx24_slug = -1, + /obj/item/ammo_magazine/rifle/tx24_incendiary = -1, /obj/item/weapon/gun/shotgun/double/marine = -1, /obj/item/storage/holster/belt/ts34/full = -1, ), @@ -1089,7 +1138,11 @@ /obj/item/ammo_magazine/packet/p492x34mm = -1, /obj/item/ammo_magazine/packet/p86x70mm = -1, /obj/item/ammo_magazine/packet/standardautoshotgun = -1, + /obj/item/ammo_magazine/packet/standardautoshotgun/slug = -1, /obj/item/ammo_magazine/packet/standardautoshotgun/flechette = -1, + /obj/item/ammo_magazine/packet/acp40 = -1, + /obj/item/ammo_magazine/packet/acpl40 = -1, + /obj/item/ammo_magazine/packet/p9x18 = -1, /obj/item/ammo_magazine/packet/p4570 = -1, /obj/item/ammo_magazine/packet/long_special = -1, /obj/item/storage/box/visual/magazine = -1, diff --git a/modular_RUtgmc/code/game/objects/structures/crates_lockers/crates.dm b/modular_RUtgmc/code/game/objects/structures/crates_lockers/crates.dm new file mode 100644 index 0000000000000..d2efa38158f0f --- /dev/null +++ b/modular_RUtgmc/code/game/objects/structures/crates_lockers/crates.dm @@ -0,0 +1,2 @@ +/obj/structure/closet/crate + icon = 'modular_RUtgmc/icons/obj/structures/crates.dmi' diff --git a/modular_RUtgmc/code/modules/clothing/gloves/marine_gloves.dm b/modular_RUtgmc/code/modules/clothing/gloves/marine_gloves.dm index ecacfbcc71719..1ea4a17254fe0 100644 --- a/modular_RUtgmc/code/modules/clothing/gloves/marine_gloves.dm +++ b/modular_RUtgmc/code/modules/clothing/gloves/marine_gloves.dm @@ -30,3 +30,16 @@ icon_state = "veteran_2" else icon_state = "veteran_1" + +/obj/item/clothing/gloves/pmc + name = "PMC nitrile gloves" + desc = "Pair of modern and clean gloves, you can feel how durable and light they are." + icon = 'modular_RUtgmc/icons/obj/clothing/gloves.dmi' + icon_state = "pmc_white" + siemens_coefficient = 0 + flags_item = SYNTH_RESTRICTED + soft_armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 20, FIRE = 20, ACID = 15) + +/obj/item/clothing/gloves/marine/veteran/pmc + icon = 'modular_RUtgmc/icons/obj/clothing/gloves.dmi' + icon_state = "pmc_black" diff --git a/modular_RUtgmc/code/modules/clothing/head/helmet.dm b/modular_RUtgmc/code/modules/clothing/head/helmet.dm index 5bed0384309f7..3626ae66193f8 100644 --- a/modular_RUtgmc/code/modules/clothing/head/helmet.dm +++ b/modular_RUtgmc/code/modules/clothing/head/helmet.dm @@ -1,2 +1,34 @@ /obj/item/clothing/head/helmet colorable_allowed = HAIR_CONCEALING_CHANGE_ALLOWED + +/obj/item/clothing/head/helmet/marine/veteran/pmc + icon = 'modular_RUtgmc/icons/obj/clothing/headwear/ert_headwear.dmi' + item_icons = list( + slot_head_str = 'modular_RUtgmc/icons/mob/clothing/headwear/ert_headwear.dmi' + ) + soft_armor = list(MELEE = 65, BULLET = 65, LASER = 65, ENERGY = 65, BOMB = 60, BIO = 50, FIRE = 55, ACID = 55) + +/obj/item/clothing/head/helmet/marine/veteran/pmc/cap + icon_state = "pmc_cap" + soft_armor = list(MELEE = 50, BULLET = 50, LASER = 55, ENERGY = 55, BOMB = 40, BIO = 40, FIRE = 45, ACID = 45) + +/obj/item/clothing/head/helmet/marine/veteran/pmc/medium + icon_state = "pmc_meduim_helmet" + +/obj/item/clothing/head/helmet/marine/veteran/pmc/heavy + icon_state = "pmc_heavy_helmet" + soft_armor = list(MELEE = 70, BULLET = 80, LASER = 80, ENERGY = 80, BOMB = 70, BIO = 60, FIRE = 65, ACID = 65) + +/obj/item/clothing/head/helmet/marine/veteran/pmc/medic + icon_state = "pmc_medic_helmet" + soft_armor = list(MELEE = 65, BULLET = 65, LASER = 65, ENERGY = 65, BOMB = 60, BIO = 80, FIRE = 55, ACID = 55) + +/obj/item/clothing/head/helmet/marine/veteran/pmc/engineer + icon_state = "pmc_engineer_helmet" + soft_armor = list(MELEE = 65, BULLET = 65, LASER = 65, ENERGY = 65, BOMB = 60, BIO = 50, FIRE = 100, ACID = 55) + +/obj/item/clothing/head/helmet/marine/veteran/pmc/sniper + icon_state = "pmc_sniper_helmet" + +/obj/item/clothing/head/helmet/marine/veteran/pmc/leader + icon_state = "pmc_leader_beret" diff --git a/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/cape.dm b/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/cape.dm index 165f94012553e..4509ca7bb9ed9 100644 --- a/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/cape.dm +++ b/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/cape.dm @@ -6,6 +6,10 @@ HOOD = TRUE, HIGHLIGHT_VARIANTS = list( "long", + "long_line", + "long_skull", + "long_arrow", + "long_medic", "none", ), ), @@ -35,5 +39,9 @@ colorable_colors = CAPE_PALETTES_LIST icon_state_variants = list( "long", + "long_line", + "long_medic", + "long_skull", + "long_arrow", "none", ) diff --git a/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/storage.dm b/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/storage.dm index b752d79718609..f37c4c01cf5cd 100644 --- a/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/storage.dm +++ b/modular_RUtgmc/code/modules/clothing/modular_armor/attachments/storage.dm @@ -1,2 +1,22 @@ /obj/item/armor_module/storage show_storage_icon = 'modular_RUtgmc/icons/mob/modular/modular_helmet_storage.dmi' + +//////////////////SPILL///////////////// + +/obj/proc/tumble(var/dist) + if (dist >= 1) + spawn() + dist += rand(0,1) + for(var/i = 1, i <= dist, i++) + if(src) + step(src, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + +//Useful for spilling the contents of containers all over the floor +/obj/item/storage/proc/spill(var/dist = 2, var/turf/T = null) + if (!T || !istype(T, /turf))//If its not on the floor this might cause issues + T = get_turf(src) + + for (var/obj/O in contents) + remove_from_storage(O, T) + O.tumble(2) diff --git a/modular_RUtgmc/code/modules/clothing/suits/marine_armor.dm b/modular_RUtgmc/code/modules/clothing/suits/marine_armor.dm new file mode 100644 index 0000000000000..0e28559bab9ab --- /dev/null +++ b/modular_RUtgmc/code/modules/clothing/suits/marine_armor.dm @@ -0,0 +1,42 @@ +/obj/item/clothing/suit/storage/marine/veteran/pmc + icon = 'modular_RUtgmc/icons/obj/clothing/ert_suits.dmi' + icon_state = "pmc_light_armor" + slowdown = SLOWDOWN_ARMOR_VERY_LIGHT + soft_armor = list(MELEE = 45, BULLET = 60, LASER = 60, ENERGY = 45, BOMB = 45, BIO = 30, FIRE = 40, ACID = 40) + item_icons = list( + slot_wear_suit_str = 'modular_RUtgmc/icons/mob/clothing/ert_suits.dmi', + ) + +/obj/item/clothing/suit/storage/marine/veteran/pmc/medium + icon_state = "pmc_medium_armor" + soft_armor = list(MELEE = 55, BULLET = 70, LASER = 70, ENERGY = 40, BOMB = 50, BIO = 35, FIRE = 45, ACID = 45) + slowdown = SLOWDOWN_ARMOR_MEDIUM + +/obj/item/clothing/suit/storage/marine/veteran/pmc/leader_light + icon_state = "pmc_leader_light_armor" + soft_armor = list(MELEE = 50, BULLET = 65, LASER = 65, ENERGY = 50, BOMB = 50, BIO = 40, FIRE = 50, ACID = 50) + slowdown = SLOWDOWN_ARMOR_LIGHT + +/obj/item/clothing/suit/storage/marine/veteran/pmc/leader + icon_state = "pmc_leader_armor" + slowdown = SLOWDOWN_ARMOR_MEDIUM + +/obj/item/clothing/suit/storage/marine/veteran/pmc/heavy + icon_state = "pmc_heavy_armor" + soft_armor = list(MELEE = 65, BULLET = 80, LASER = 80, ENERGY = 60, BOMB = 60, BIO = 50, FIRE = 60, ACID = 60) + slowdown = SLOWDOWN_ARMOR_HEAVY + +/obj/item/clothing/suit/storage/marine/veteran/pmc/engineer + icon_state = "pmc_engineer_armor" + soft_armor = list(MELEE = 55, BULLET = 70, LASER = 70, ENERGY = 40, BOMB = 50, BIO = 35, FIRE = 100, ACID = 45) + slowdown = SLOWDOWN_ARMOR_MEDIUM + +/obj/item/clothing/suit/storage/marine/veteran/pmc/medic + icon_state = "pmc_medium_armor" + soft_armor = list(MELEE = 55, BULLET = 70, LASER = 70, ENERGY = 40, BOMB = 50, BIO = 80, FIRE = 45, ACID = 45) + slowdown = SLOWDOWN_ARMOR_MEDIUM + +/obj/item/clothing/suit/storage/marine/veteran/pmc/sniper + icon_state = "pmc_sniper_armor" + soft_armor = list(MELEE = 55, BULLET = 70, LASER = 70, ENERGY = 40, BOMB = 50, BIO = 35, FIRE = 45, ACID = 75) + slowdown = SLOWDOWN_ARMOR_MEDIUM diff --git a/modular_RUtgmc/code/modules/clothing/under/marine_uniform.dm b/modular_RUtgmc/code/modules/clothing/under/marine_uniform.dm index 8fe9aeb3a7fa5..160e6134029d7 100644 --- a/modular_RUtgmc/code/modules/clothing/under/marine_uniform.dm +++ b/modular_RUtgmc/code/modules/clothing/under/marine_uniform.dm @@ -60,3 +60,39 @@ name = "\improper Combat uniform TU-32" desc = "Protective, reinforced with Kevlar fiber with rubberized metal inserts, this 'separatist' combat kit has proven its reliability in many situations of unrest among the civilian population after the capture of the colonies of Terra. In memory of the victims of the militia, this set was delivered to the Marine Corps ship TerraGov." icon_state = "separatist" + +////////// +////////// ERT +////////// + +/obj/item/clothing/under/marine/veteran/pmcnew + name = "\improper PMC fatigues" + desc = "A white set of fatigues, designed for private security operators. The symbol of the Nanotrasen corporation is emblazed on the suit." + icon = 'modular_RUtgmc/icons/obj/clothing/ert_uniforms.dmi' + icon_state = "pmc_jumpsuit" + item_icons = list( + slot_w_uniform_str = 'modular_RUtgmc/icons/mob/clothing/ert_uniforms.dmi', + ) + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROTECTION_TEMPERATURE + starting_attachments = list(/obj/item/armor_module/storage/uniform/black_vest) + +/obj/item/clothing/under/marine/veteran/pmcnew/d + icon_state = "pmc_jumpsuit_d" + starting_attachments = list(/obj/item/armor_module/storage/uniform/holster) + +/obj/item/clothing/under/marine/veteran/pmcnew/engineer + icon_state = "engineer_jumpsuit" + +/obj/item/clothing/under/marine/veteran/pmcnew/holster + starting_attachments = list(/obj/item/armor_module/storage/uniform/holster) + +/obj/item/clothing/under/marine/veteran/pmcnew/medic + starting_attachments = list(/obj/item/armor_module/storage/uniform/white_vest) + +/obj/item/clothing/under/marine/veteran/pmcnew/leader + icon_state = "leader_jumpsuit" + starting_attachments = list(/obj/item/armor_module/storage/uniform/holster) + +/obj/item/clothing/under/marine/veteran/pmcnew/leader/d + icon_state = "leader_jumpsuit_d" + starting_attachments = list(/obj/item/armor_module/storage/uniform/holster) diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm b/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm index 76269870dc5f0..ec43fb9ada40f 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/human/emote.dm @@ -251,3 +251,12 @@ message = "qahuuuuu!" emote_type = EMOTE_AUDIBLE sound = 'modular_RUtgmc/sound/voice/necoarc/Neco quiajuuubn.ogg' + +/datum/emote/living/carbon/human/gulp + key = "gulp" + key_third_person = "gulp" + message = "nervous gulp." + emote_type = EMOTE_VISIBLE + sound = 'modular_RUtgmc/sound/misc/gulp.ogg' + + diff --git a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm index 9d38b4e6169b7..291dc3357435b 100644 --- a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm +++ b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm @@ -40,6 +40,51 @@ penetration = 0 shrapnel_chance = 25 +/datum/ammo/bullet/smg/acp40 + name = "submachinegun ACP bullet" + hud_state = "smg" + hud_state_empty = "smg_empty" + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + damage = 20 + accurate_range = 5 + damage_falloff = 1 + sundering = 1 + penetration = 5 + +/datum/ammo/bullet/smg/acp40/pmc + damage = 21 + accurate_range = 7 + sundering = 1.5 + penetration = 10 + +/datum/ammo/bullet/smg/acp40/low + name = "submachinegun ACP bullet" + hud_state = "smg" + hud_state_empty = "smg_empty" + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + damage = 12 + accurate_range = 5 + damage_falloff = 1 + sundering = 0.5 + penetration = 5 + +/datum/ammo/bullet/smg/acp40/low/pmc + damage = 13 + penetration = 8 + sundering = 0.8 + accurate_range = 6 + +/datum/ammo/bullet/smg/mm9 + name = "submachinegun 9mm bullet" + hud_state = "smg" + hud_state_empty = "smg_empty" + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + damage = 16 + accurate_range = 5 + damage_falloff = 1 + sundering = 0.5 + penetration = 5 + /datum/ammo/bullet/revolver/t500 name = ".500 Nigro Express revolver bullet" icon_state = "nigro" @@ -113,6 +158,146 @@ /datum/ammo/bullet/sniper/martini/on_hit_mob(mob/M, obj/projectile/P) staggerstun(M, P, weaken = 0.5 SECONDS, stagger = 1 SECONDS, knockback = 2, slowdown = 0.5, max_range = 10) + +/datum/ammo/bullet/minigun + sundering = 1.5 + damage = 15 + +/datum/ammo/bullet/pepperball + damage = 1 + damage_falloff = 0 + +/datum/ammo/bullet/pepperball/pepperball_mini + damage = 1 + +/datum/ammo/bullet/shotgun/incendiary + damage = 100 + sundering = 0 + max_range = 10 + incendiary_strength = 15 + +/datum/ammo/bullet/shotgun/incendiary/on_hit_mob(mob/M, obj/projectile/P) + staggerstun(M, P, weaken = 1 SECONDS, knockback = 1, slowdown = 1) + +/datum/ammo/bullet/shotgun/g16_buckshot + name = "shotgun buckshot shell" + handful_icon_state = "shotgun buckshot shell" + icon_state = "buckshot" + hud_state = "shotgun_buckshot" + flags_ammo_behavior = AMMO_BALLISTIC + bonus_projectiles_type = /datum/ammo/bullet/shotgun/g16_b_spread + bonus_projectiles_amount = 5 + bonus_projectiles_scatter = 3 + max_range = 11 + damage = 10 + damage_falloff = 0.5 + penetration = 0 + sundering = 0 + shell_speed = 2 + +/datum/ammo/bullet/shotgun/g16_b_spread //New parent cause on_hit_mob() will stack if parent is /g16_buckshot + name = "additional buckshot" + handful_icon_state = "shotgun buckshot shell" + icon_state = "buckshot" + hud_state = "shotgun_buckshot" + flags_ammo_behavior = AMMO_BALLISTIC + max_range = 7 + damage = 10 + damage_falloff = 0.5 + penetration = 0 + sundering = 0 + +/datum/ammo/bullet/shotgun/g16_buckshot/on_hit_mob(mob/M, obj/projectile/P) + staggerstun(M, P, knockback = 1) + +/datum/ammo/bullet/shotgun/g16_buckshot/weak/on_hit_mob(mob/M, obj/projectile/P) + if(prob(50)) + staggerstun(M, P, knockback = 1) + +/datum/ammo/bullet/shotgun/g16_flechette + name = "shotgun flechette shell" + handful_icon_state = "shotgun flechette shell" + icon_state = "flechette" + hud_state = "shotgun_flechette" + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + bonus_projectiles_type = /datum/ammo/bullet/shotgun/g16_flechette/spread + bonus_projectiles_amount = 4 + bonus_projectiles_scatter = 3 + max_range = 15 + damage = 9 + damage_falloff = 0.25 + penetration = 15 + sundering = 1.5 + +/datum/ammo/bullet/shotgun/g16_flechette/spread + name = "additional flechette" + +/datum/ammo/bullet/shotgun/g16_slug + name = "shotgun slug" + handful_icon_state = "shotgun slug" + hud_state = "shotgun_slug" + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING + shell_speed = 3 + max_range = 15 + damage = 30 + penetration = 30 + sundering = 3.5 + +/datum/ammo/bullet/shotgun/g16_slug/on_hit_mob(mob/M, obj/projectile/P) + staggerstun(M, P, slowdown = 2) + +/datum/ammo/bullet/shotgun/g16_slug/weak/on_hit_mob(mob/M, obj/projectile/P) + if(prob(50)) + staggerstun(M, P, slowdown = 2) + +/datum/ammo/bullet/shotgun/g16_incendiary + name = "shotgun incendiary shell" + handful_icon_state = "shotgun incendiary shell" + icon = 'modular_RUtgmc/icons/obj/items/projectiles.dmi' + icon_state = "incendiary" + hud_state = "shotgun_fire" + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SUNDERING + bonus_projectiles_type = /datum/ammo/bullet/shotgun/g16_incendiary/spread + shell_speed = 1 + bonus_projectiles_amount = 5 + bonus_projectiles_scatter = 3 + damage_type = BURN + max_range = 9 + incendiary_strength = 1 + damage = 7 + damage_falloff = 0.5 + penetration = 10 + sundering = 0.5 + +/datum/ammo/bullet/shotgun/g16_incendiary/spread + name = "additional incendiary" + +/datum/ammo/bullet/shotgun/incendiary + name = "incendiary slug" + handful_icon_state = "incendiary slug" + hud_state = "shotgun_fire" + icon_state = "incendiary" + + flags_ammo_behavior = AMMO_BALLISTIC|AMMO_INCENDIARY|AMMO_SUNDERING + bonus_projectiles_type = /datum/ammo/bullet/shotgun/incendiary/spread + shell_speed = 1 + bonus_projectiles_amount = 5 + bonus_projectiles_scatter = 4 + damage_type = BURN + max_range = 11 + damage = 25 + incendiary_strength = 2 + damage_falloff = 1 + penetration = 10 + sundering = 0.5 + bullet_color = COLOR_TAN_ORANGE + +/datum/ammo/bullet/shotgun/incendiary/spread + name = "additional incendiary" + +/datum/ammo/bullet/shotgun/incendiary/on_hit_mob(mob/M, obj/projectile/P) + return + /* //================================================ SH-Q6 AMMO DATUMS @@ -136,7 +321,8 @@ damage_falloff = 4 /datum/ammo/bullet/shotgun/buckshot/shq6/on_hit_mob(mob/M,obj/projectile/P) - staggerstun(M, P, knockback = 1, slowdown = 1, max_range = 3) + if(prob(50)) + staggerstun(M, P, knockback = 1, slowdown = 1, max_range = 3) /datum/ammo/bullet/shotgun/slug/shq6 name = "shotgun slug" @@ -151,7 +337,8 @@ damage_falloff = 3 /datum/ammo/bullet/shotgun/slug/shq6/on_hit_mob(mob/M,obj/projectile/P) - staggerstun(M, P, slowdown = 2, max_range = 5) + if(prob(50)) + staggerstun(M, P, slowdown = 2, max_range = 5) /datum/ammo/bullet/shotgun/incendiary/shq6 name = "incendiary slug" @@ -166,7 +353,8 @@ bullet_color = COLOR_TAN_ORANGE /datum/ammo/bullet/shotgun/incendiary/shq6/on_hit_mob(mob/M, obj/projectile/P) - staggerstun(M, P, knockback = 1) + if(prob(50)) + staggerstun(M, P, slowdown = 1) /datum/ammo/bullet/shotgun/flechette/shq6 name = "shotgun flechette shell" @@ -192,25 +380,207 @@ sundering = 2 damage_falloff = 3 -/datum/ammo/bullet/minigun - sundering = 1.5 - damage = 15 +/* +//================================================ + DP-2 DART PISTOL AMMO DATUMS +//================================================ +*/ -/datum/ammo/bullet/pepperball - damage = 1 - damage_falloff = 0 +/datum/ammo/dart + name = "unknown dart" + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + hud_state_empty = "dart_empty" + flags_ammo_behavior = AMMO_BALLISTIC -/datum/ammo/bullet/pepperball/pepperball_mini - damage = 1 + sound_hit = "ballistic_hit" + sound_armor = "ballistic_armor" + sound_miss = "ballistic_miss" + sound_bounce = "ballistic_bounce" -/datum/ammo/bullet/shotgun/incendiary - damage = 100 - sundering = 0 - max_range = 10 - incendiary_strength = 15 + handful_amount = 5 + point_blank_range = 8 + damage = 0 + shrapnel_chance = 0 + barricade_clear_distance = 16 -/datum/ammo/bullet/shotgun/incendiary/on_hit_mob(mob/M, obj/projectile/P) - staggerstun(M, P, weaken = 1 SECONDS, knockback = 1, slowdown = 1) +/datum/ammo/dart/on_hit_mob(mob/M, obj/projectile/proj) + M.balloon_alert(M, "You're hit by [proj.name]") + M.playsound_local(M, 'modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_hit.wav', 50, FALSE) + +//BICARIDINE +/datum/ammo/dart/bicaridine + name = "bicaridine dart" + hud_state = "bic_dart" + icon_state = "bic" + shell_speed = 1.5 + handful_icon_state = "bicaridine_dart" + +/datum/ammo/dart/bicaridine/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/bicaridine, 10) + M.adjustBruteLoss(-10) + M.updatehealth() + +//KELOTANE +/datum/ammo/dart/kelotane + name = "kelotane dart" + hud_state = "kelo_dart" + icon_state = "kelo" + handful_icon_state = "kelotane_dart" + +/datum/ammo/dart/kelotane/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/kelotane, 10) + M.adjustFireLoss(-10) + M.updatehealth() + +//TRICORDRAZINE +/datum/ammo/dart/tricordrazine + name = "tricordrazine dart" + hud_state = "tric_dart" + icon_state = "tric" + handful_icon_state = "tricordrazine_dart" + +/datum/ammo/dart/tricordrazine/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/tricordrazine, 10) + M.adjustBruteLoss(-5) + M.adjustFireLoss(-5) + M.adjustOxyLoss(-5) + M.adjustToxLoss(-3) + M.updatehealth() + +//TRAMADOL +/datum/ammo/dart/tramadol + name = "tramadol dart" + hud_state = "tram_dart" + icon_state = "tram" + handful_icon_state = "tramadol_dart" + +/datum/ammo/dart/tramadol/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/tramadol, 15) + M.adjustStaminaLoss(-20) + M.adjustOxyLoss(-10) + M.updatehealth() + +//DYLOVENE +/datum/ammo/dart/dylovene + name = "dylovene dart" + hud_state = "dylo_dart" + icon_state = "dilo" + handful_icon_state = "dylovene_dart" + +/datum/ammo/dart/dylovene/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.remove_reagent(/datum/reagent/toxin, 10) + M.reagents.add_reagent(/datum/reagent/medicine/dylovene, 10) + M.adjustOxyLoss(-10) + M.updatehealth() + +//INAPROVALINE +/datum/ammo/dart/inaprovaline + name = "inaprovaline dart" + hud_state = "inap_dart" + icon_state = "inop" + handful_icon_state = "inaprovaline_dart" + +/datum/ammo/dart/inaprovaline/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/inaprovaline, 15) + +//HYPERVENE +/datum/ammo/dart/hypervene + name = "hypervene dart" + hud_state = "hyper_dart" + icon_state = "hyper" + handful_icon_state = "hypervene_dart" + +/datum/ammo/dart/hypervene/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.remove_reagent(/datum/reagent/medicine, 10) + M.reagents.remove_reagent(/datum/reagent/toxin, 10) + M.reagents.add_reagent(/datum/reagent/hypervene, 10) + +//COMBAT +/datum/ammo/dart/combat + name = "combat dart" + hud_state = "combat_dart" + icon_state = "combat" + handful_icon_state = "combat_dart" + +/datum/ammo/dart/combat/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/bicaridine, 5) + M.reagents.add_reagent(/datum/reagent/medicine/kelotane, 5) + M.reagents.add_reagent(/datum/reagent/medicine/tramadol, 2.5) + M.reagents.add_reagent(/datum/reagent/medicine/tricordrazine, 2.5) + M.adjustBruteLoss(-10) + M.adjustFireLoss(-10) + M.adjustOxyLoss(-10) + M.adjustToxLoss(-5) + M.adjustStaminaLoss(-20) + M.updatehealth() + +//SYNAPTIZINE +/datum/ammo/dart/synaptizine + name = "synaptizine dart" + hud_state = "synap_dart" + icon_state = "synap" + handful_icon_state = "synaptizine_dart" + +/datum/ammo/dart/synaptizine/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/synaptizine, 3) + M.reagents.add_reagent(/datum/reagent/medicine/hyronalin, 6) + M.adjustStaminaLoss(-20) + M.updatehealth() + +//MERADERM +/datum/ammo/dart/meraderm + name = "meraderm dart" + hud_state = "md_dart" + icon_state = "md" + handful_icon_state = "meraderm_dart" + +/datum/ammo/dart/meraderm/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/meralyne, 5) + M.reagents.add_reagent(/datum/reagent/medicine/dermaline, 5) + M.reagents.add_reagent(/datum/reagent/medicine/oxycodone, 10) + M.adjustBruteLoss(-15) + M.adjustFireLoss(-15) + M.adjustStaminaLoss(-20) + M.updatehealth() + +//NEURALINE +/datum/ammo/dart/neuraline + name = "neuraline dart" + hud_state = "neur_dart" + icon_state = "neur" + handful_icon_state = "neuraline_dart" + +/datum/ammo/dart/neuraline/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/neuraline, 4) + M.adjustStaminaLoss(-30) + M.adjustOxyLoss(-20) + M.updatehealth() + +//RUSSIAN RED +/datum/ammo/dart/russian_red + name = "rusian red dart" + hud_state = "rr_dart" + icon_state = "rr" + handful_icon_state = "russianred_dart" + +/datum/ammo/dart/russian_red/on_hit_mob(mob/living/M, obj/projectile/proj) + if(ishuman(M)) + M.reagents.add_reagent(/datum/reagent/medicine/russian_red, 10) + M.reagents.add_reagent(/datum/reagent/medicine/oxycodone, 5) + M.adjustStaminaLoss(-20) + M.adjustOxyLoss(-20) + M.updatehealth() /* //================================================ diff --git a/modular_RUtgmc/code/modules/projectiles/ammunition.dm b/modular_RUtgmc/code/modules/projectiles/ammunition.dm new file mode 100644 index 0000000000000..49aee5c5c23ac --- /dev/null +++ b/modular_RUtgmc/code/modules/projectiles/ammunition.dm @@ -0,0 +1,264 @@ +/obj/item/storage/dartbox + name = "Box of darts" + desc = "A handful of ### darts. ###." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "box_" + storage_slots = 4 + w_class = WEIGHT_CLASS_NORMAL + use_sound = 'sound/effects/toolbox.ogg' + can_hold = list( + /obj/item/ammo_magazine/handful/dart + ) + var/icon_empty = "box_chemblack_e" + +/obj/item/storage/dartbox/update_icon() + icon_state = initial(icon_state) + if(!length(contents)) + icon_state = icon_empty + +/obj/item/ammo_magazine/handful/dart + name = "generic handful of darts" + desc = "A handful of darts." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + max_rounds = 5 + w_class = WEIGHT_CLASS_SMALL + caliber = CALIBER_DART + + +// bicaridine +/obj/item/ammo_magazine/handful/dart/bicaridine + name = "handful of bicaridine darts" + desc = "A handful of bicaridine darts. Good for healing brute wounds." + icon_state = "bicaridine_dart" + default_ammo = /datum/ammo/dart/bicaridine + +/obj/item/storage/dartbox/bicaridine + desc = "A box of bicaridine darts. Good for healing brute wounds." + icon_state = "box_bicaridine" + +// kelotane +/obj/item/ammo_magazine/handful/dart/kelotane + name = "handful of kelotane darts" + desc = "A handful of kelotane darts. Good for healing burn wounds." + icon_state = "kelotane_dart" + default_ammo = /datum/ammo/dart/kelotane + +/obj/item/storage/dartbox/kelotane + desc = "A box of kelotane darts. Good for healing brute wounds." + icon_state = "box_kelotane" + +// tricordrazine +/obj/item/ammo_magazine/handful/dart/tricordrazine + name = "handful of tricordrazine darts" + desc = "A handful of tricordrazine darts. Good for healing any injury." + icon_state = "tricordrazine_dart" + default_ammo = /datum/ammo/dart/tricordrazine + +/obj/item/storage/dartbox/tricordrazine + desc = "A box of tricordrazine darts. Good for healing any injury." + icon_state = "box_tricordrazine" + +// tramadol +/obj/item/ammo_magazine/handful/dart/tramadol + name = "handful of tramadol darts" + desc = "A handful of tramadol darts. A simple, yet effective painkiller." + icon_state = "tramadol_dart" + default_ammo = /datum/ammo/dart/tramadol + +/obj/item/storage/dartbox/tramadol + desc = "A box of tramadol darts. A simple, yet effective painkiller." + icon_state = "box_tramadol" + +// dylovene +/obj/item/ammo_magazine/handful/dart/dylovene + name = "handful of dylovene darts" + desc = "A handful of dylovene darts. An effective antitoxin." + icon_state = "dylovene_dart" + default_ammo = /datum/ammo/dart/dylovene + +/obj/item/storage/dartbox/dylovene + desc = "A box of dylovene darts. An effective antitoxin." + icon_state = "box_dylovene" + +// inaprovaline +/obj/item/ammo_magazine/handful/dart/inaprovaline + name = "handful of inaprovaline darts" + desc = "A handful of inaprovaline darts. An effective synaptic and cardio stimulant." + icon_state = "inaprovaline_dart" + default_ammo = /datum/ammo/dart/inaprovaline + +/obj/item/storage/dartbox/inaprovaline + desc = "A box of inaprovaline darts. An effective synaptic and cardio stimulant." + icon_state = "box_inaprovaline" + +// hypervene +/obj/item/ammo_magazine/handful/dart/hypervene + name = "handful of hypervene darts" + desc = "A handful of hypervene darts. Quickly purges the body of toxin damage, radiation and all other chemicals." + icon_state = "hypervene_dart" + default_ammo = /datum/ammo/dart/hypervene + +/obj/item/storage/dartbox/hypervene + desc = "A box of hypervene darts. Quickly purges the body of toxin damage, radiation and all other chemicals." + icon_state = "box_hypervene" + +// combat +/obj/item/ammo_magazine/handful/dart/combat + name = "handful of combat darts" + desc = "A handful of combat darts. Loaded with healing and painkilling chemicals." + icon_state = "combat_dart" + default_ammo = /datum/ammo/dart/combat + +/obj/item/storage/dartbox/combat + desc = "A box of combat darts. Loaded with healing and painkilling chemicals." + icon_state = "box_combat" + +// synaptizine +/obj/item/ammo_magazine/handful/dart/synaptizine + name = "handful of synaptizine darts" + desc = "A handful of synaptizine darts. Performance-enhancing drug with minimal side effects." + icon_state = "synaptizine_dart" + default_ammo = /datum/ammo/dart/synaptizine + +/obj/item/storage/dartbox/synaptizine + desc = "A box of synaptizine darts. Performance-enhancing drug with minimal side effects." + icon_state = "box_synaptizine" + icon_empty = "box_chemwhite_e" + +// meraderm +/obj/item/ammo_magazine/handful/dart/meraderm + name = "handful of meraderm darts" + desc = "A handful of meraderm darts. Loaded with heavy painkillers and best healing chemicals." + icon_state = "meraderm_dart" + default_ammo = /datum/ammo/dart/meraderm + +/obj/item/storage/dartbox/meraderm + desc = "A box of meraderm darts. Loaded with heavy painkillers and best healing chemicals." + icon_state = "box_meraderm" + icon_empty = "box_chemwhite_e" + +// neuraline +/obj/item/ammo_magazine/handful/dart/neuraline + name = "handful of neuraline darts" + desc = "A handful of neuraline darts. Loaded with chemical cocktail tailored to enhance or dampen specific neural processes." + icon_state = "neuraline_dart" + default_ammo = /datum/ammo/dart/neuraline + +/obj/item/storage/dartbox/neuraline + desc = "A box of neuraline darts. Loaded with chemical cocktail tailored to enhance or dampen specific neural processes." + icon_state = "box_neuraline" + icon_empty = "box_chemwhite_e" + +// russian red +/obj/item/ammo_magazine/handful/dart/russian_red + name = "handful of russian red darts" + desc = "A handful of russian red darts. Loaded with chemical cocktail tailored to enhance or dampen specific neural processes." + icon_state = "russianred_dart" + default_ammo = /datum/ammo/dart/russian_red + +/obj/item/storage/dartbox/russian_red + desc = "A box of russian red darts. Loaded with chemical cocktail tailored to enhance or dampen specific neural processes." + icon_state = "box_russianred" + icon_empty = "box_chemred_e" + +// +// +// INIT PROCS +// +// + +/obj/item/storage/dartbox/bicaridine/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/bicaridine(src) + new /obj/item/ammo_magazine/handful/dart/bicaridine(src) + new /obj/item/ammo_magazine/handful/dart/bicaridine(src) + new /obj/item/ammo_magazine/handful/dart/bicaridine(src) + +/obj/item/storage/dartbox/kelotane/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/kelotane(src) + new /obj/item/ammo_magazine/handful/dart/kelotane(src) + new /obj/item/ammo_magazine/handful/dart/kelotane(src) + new /obj/item/ammo_magazine/handful/dart/kelotane(src) + +/obj/item/storage/dartbox/tricordrazine/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/tricordrazine(src) + new /obj/item/ammo_magazine/handful/dart/tricordrazine(src) + new /obj/item/ammo_magazine/handful/dart/tricordrazine(src) + new /obj/item/ammo_magazine/handful/dart/tricordrazine(src) + +/obj/item/storage/dartbox/tramadol/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/tramadol(src) + new /obj/item/ammo_magazine/handful/dart/tramadol(src) + new /obj/item/ammo_magazine/handful/dart/tramadol(src) + new /obj/item/ammo_magazine/handful/dart/tramadol(src) + +/obj/item/storage/dartbox/dylovene/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/dylovene(src) + new /obj/item/ammo_magazine/handful/dart/dylovene(src) + new /obj/item/ammo_magazine/handful/dart/dylovene(src) + new /obj/item/ammo_magazine/handful/dart/dylovene(src) + +/obj/item/storage/dartbox/inaprovaline/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/inaprovaline(src) + new /obj/item/ammo_magazine/handful/dart/inaprovaline(src) + new /obj/item/ammo_magazine/handful/dart/inaprovaline(src) + new /obj/item/ammo_magazine/handful/dart/inaprovaline(src) + +/obj/item/storage/dartbox/hypervene/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/hypervene(src) + new /obj/item/ammo_magazine/handful/dart/hypervene(src) + new /obj/item/ammo_magazine/handful/dart/hypervene(src) + new /obj/item/ammo_magazine/handful/dart/hypervene(src) + +/obj/item/storage/dartbox/combat/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/combat(src) + new /obj/item/ammo_magazine/handful/dart/combat(src) + new /obj/item/ammo_magazine/handful/dart/combat(src) + new /obj/item/ammo_magazine/handful/dart/combat(src) + +/obj/item/storage/dartbox/synaptizine/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/synaptizine(src) + new /obj/item/ammo_magazine/handful/dart/synaptizine(src) + new /obj/item/ammo_magazine/handful/dart/synaptizine(src) + new /obj/item/ammo_magazine/handful/dart/synaptizine(src) + +/obj/item/storage/dartbox/meraderm/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/meraderm(src) + new /obj/item/ammo_magazine/handful/dart/meraderm(src) + new /obj/item/ammo_magazine/handful/dart/meraderm(src) + new /obj/item/ammo_magazine/handful/dart/meraderm(src) + +/obj/item/storage/dartbox/neuraline/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/neuraline(src) + new /obj/item/ammo_magazine/handful/dart/neuraline(src) + new /obj/item/ammo_magazine/handful/dart/neuraline(src) + new /obj/item/ammo_magazine/handful/dart/neuraline(src) + +/obj/item/storage/dartbox/russian_red/Initialize(mapload, ...) + . = ..() + + new /obj/item/ammo_magazine/handful/dart/russian_red(src) + new /obj/item/ammo_magazine/handful/dart/russian_red(src) + new /obj/item/ammo_magazine/handful/dart/russian_red(src) + new /obj/item/ammo_magazine/handful/dart/russian_red(src) diff --git a/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm b/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm index 5842851c2deb8..ebb168a1ec960 100644 --- a/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm +++ b/modular_RUtgmc/code/modules/projectiles/gun_attachables.dm @@ -34,6 +34,22 @@ greyscale_config = null colorable_allowed = NONE +/obj/item/attachable/foldable/mp7stock + name = "\improper MP-7 machinepistol stock" + desc = "A submachinegun stock distributed in small numbers to TGMC forces. Compatible with the MP-19, this stock reduces recoil and improves accuracy, but at a reduction to handling and agility. Seemingly a bit more effective in a brawl." + flags_attach_features = ATTACH_ACTIVATION + icon = 'modular_RUtgmc/icons/Marine/marine-weapons.dmi' + melee_mod = 5 + size_mod = 1 + icon_state = "mp7stock" + wield_delay_mod = 0.6 SECONDS + scatter_mod = -2 + accuracy_unwielded_mod = -0.1 + scatter_unwielded_mod = 4 + +/obj/item/attachable/foldable/mp7stock/p19 + name = "\improper P-19 \"Bizon\" submachinegun stock" + /obj/item/attachable/foldable/t35stock icon = 'modular_RUtgmc/icons/Marine/attachments_64.dmi' greyscale_config = null @@ -118,3 +134,6 @@ if(target == user && !user.do_self_harm) return return ..() + +/obj/item/attachable/flamer_nozzle + icon = 'modular_RUtgmc/icons/Marine/attachments_64.dmi' diff --git a/modular_RUtgmc/code/modules/projectiles/guns/flamer.dm b/modular_RUtgmc/code/modules/projectiles/guns/flamer.dm index 85c593105cff0..97331b04cf4bb 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/flamer.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/flamer.dm @@ -1,2 +1,19 @@ /obj/flamer_fire icon = 'modular_RUtgmc/icons/effects/fire.dmi' + +/obj/item/weapon/gun/flamer/big_flamer/marinestandard + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + slot_s_store_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + ) + starting_attachment_types = list(/obj/item/attachable/flamer_nozzle, /obj/item/weapon/gun/flamer/hydro_cannon) + attachable_offset = list("rail_x" = 15, "rail_y" = 24, "stock_x" = 16, "stock_y" = 13, "flamer_nozzle_x" = 16, "flamer_nozzle_y" = 16, "under_x" = 26, "under_y" = 15) + +/obj/item/ammo_magazine/flamer_tank/large + bonus_overlay = "tl84_st" + +/obj/item/ammo_magazine/flamer_tank/large/X + bonus_overlay = "tl84_xfuel" diff --git a/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm b/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm index d5692be978ec2..3cf786c5bcd67 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/pistols.dm @@ -36,3 +36,46 @@ slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', ) + +// DP-2 Dart Pistol +/obj/item/weapon/gun/shotgun/dart_pistol // Yep, it's a shotgun, god save us + name = "\improper DP-2 Dart Gun" + desc = "Newly developed TGMC dart pistol, designed specifically for corpsmans. Don't put it in your mouth, please." + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "dart_gun" + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', + ) + default_ammo_type = /datum/ammo/dart/bicaridine + allowed_ammo_types = list(/datum/ammo/dart) + + max_chamber_items = 2 + + fire_sound = 'modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire.ogg' + hand_reload_sound = 'sound/weapons/guns/interact/pistol_reload.ogg' + attachable_allowed = list( + /obj/item/attachable/magnetic_harness, + ) + + caliber = CALIBER_DART + + cocked_sound = null + actions_types = null + muzzleflash_iconstate = null + type_of_casings = null + max_chamber_items = 1 + load_method = SINGLE_CASING + flags_equip_slot = ITEM_SLOT_BELT|ITEM_SLOT_POCKET + reciever_flags = AMMO_RECIEVER_TOGGLES_OPEN|AMMO_RECIEVER_HANDFULS + w_class = WEIGHT_CLASS_NORMAL + force = 6 + gun_skill_category = SKILL_PISTOLS + attachable_allowed = null + + flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + aim_speed_modifier = 0.65 + scatter = -2 + scatter_unwielded = 2 + recoil = 0 + recoil_unwielded = 0.5 diff --git a/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm b/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm index e4703831d34da..4c9fae8de1817 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/rifles.dm @@ -292,19 +292,6 @@ slot_r_hand_str = 'icons/mob/items_righthand_64.dmi', ) -//------------------------------------------------------- -//SH-15 AUTOMATIC SHOTGUN - -/obj/item/weapon/gun/rifle/standard_autoshotgun - icon_state = "tx15" - item_state = "tx15" - greyscale_config = null - colorable_allowed = NONE - item_icons = list( - slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', - slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', - ) - //------------------------------------------------------- //SG-29 Smart Machine Gun (It's more of a rifle than the SG.) @@ -407,10 +394,158 @@ //SH-15 AUTOMATIC SHOTGUN /obj/item/weapon/gun/rifle/standard_autoshotgun + name = "\improper SH-15 auto-shotgun" + desc = "The SH-15 Automatic Assault Shotgun, this is a Terran Armories variant. Another iteration of the ZX series of firearms though it has been since regulated as part of the TGMC arsenal, hence the SH designation. It took over the various shotgun models as the semi-automatic shotgun provided to the TGMC. It is rifled, and loads primarily longer ranged munitions, being incompatible with buckshot shells. Takes 12-round 16 gauge magazines." + + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "tx15" + item_icons = list( + slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'icons/mob/items_righthand_1.dmi', + slot_s_store_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi' + ) + fire_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-15/SH15.ogg' unload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-15/SH15_clipout.ogg' reload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-15/SH15_clipin.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-15/SH15_boltpull.ogg' + caliber = CALIBER_16G //codex + max_shells = 12 //codex + force = 20 + default_ammo_type = /obj/item/ammo_magazine/rifle/tx15_buckshot + allowed_ammo_types = list( + /obj/item/ammo_magazine/rifle/tx15_buckshot, + /obj/item/ammo_magazine/rifle/tx15_slug, + /obj/item/ammo_magazine/rifle/tx15_flechette, + /obj/item/ammo_magazine/rifle/tx15_incendiary, + ) + attachable_allowed = list( + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/bayonetknife/som, + /obj/item/attachable/reddot, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/angledgrip, + /obj/item/attachable/gyro, + /obj/item/attachable/flashlight, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/compensator, + /obj/item/attachable/extended_barrel, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/heavy_barrel, + /obj/item/attachable/motiondetector, + /obj/item/weapon/gun/pistol/plasma_pistol, + /obj/item/weapon/gun/flamer/mini_flamer, + /obj/item/weapon/gun/grenade_launcher/underslung, + /obj/item/weapon/gun/rifle/pepperball/pepperball_mini, + ) + + flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES //Its a shotgun type weapon effectively, most shotgun type weapons shouldn't be able to point blank 1 handed. + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + starting_attachment_types = null + attachable_offset = list("muzzle_x" = 43, "muzzle_y" = 17,"rail_x" = 23, "rail_y" = 20, "under_x" = 36, "under_y" = 13, "stock_x" = 26, "stock_y" = 13) + gun_skill_category = SKILL_SHOTGUNS + + damage_mult = 2 //Low firerate + + fire_delay = 1 SECONDS + accuracy_mult = 1.15 + burst_amount = 1 + scatter = -2 + movement_acc_penalty_mult = 3 + +/obj/item/weapon/gun/rifle/standard_autoshotgun/do_fire(obj/object_to_fire) + . = ..() + if(src.get_ammo() == /datum/ammo/bullet/shotgun/g16_incendiary) + playsound(src.target, 'modular_RUtgmc/sound/misc/sparkler.ogg', 75, 1) + +/obj/item/weapon/gun/rifle/standard_autoshotgun/engineer + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/weapon/gun/grenade_launcher/underslung) + +/obj/item/weapon/gun/rifle/standard_autoshotgun/standard + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/heavy_barrel, /obj/item/weapon/gun/grenade_launcher/underslung) + +/obj/item/weapon/gun/rifle/standard_autoshotgun/plasma_pistol + starting_attachment_types = list(/obj/item/attachable/motiondetector, /obj/item/attachable/extended_barrel, /obj/item/weapon/gun/pistol/plasma_pistol) + +/obj/item/weapon/gun/rifle/standard_autoshotgun/medic + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel, /obj/item/attachable/angledgrip) + default_ammo_type = /obj/item/ammo_magazine/rifle/tx15_slug + +//------------------------------------------------------- +//SH-24 JACKHAMMER AUTOMATIC SHOTGUN + +/obj/item/weapon/gun/rifle/standard_autoshotgun/jackhammer + name = "\improper SH-24 \"Jackhammer\" auto-shotgun" + desc = "The SH-24 Automatic Assault Shotgun, also known as \"Jackhammer\", is perfect for first-line attacking with decent firerate. Takes 12-round 16 gauge magazines." + + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "jackhammer" + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', + slot_s_store_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi' + ) + + fire_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24.ogg' + unload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipout.ogg' + reload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipin.ogg' + cocked_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_boltpull.ogg' + caliber = CALIBER_16G //codex + max_shells = 24 //codex + force = 20 + default_ammo_type = /obj/item/ammo_magazine/rifle/tx24_buckshot + allowed_ammo_types = list( + /obj/item/ammo_magazine/rifle/tx24_buckshot, + /obj/item/ammo_magazine/rifle/tx24_slug, + /obj/item/ammo_magazine/rifle/tx24_flechette, + /obj/item/ammo_magazine/rifle/tx24_incendiary, + ) + attachable_allowed = list( + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/bayonetknife/som, + /obj/item/attachable/reddot, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/angledgrip, + /obj/item/attachable/gyro, + /obj/item/attachable/flashlight, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + ) + + flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_SMOKE_PARTICLES //Its a shotgun type weapon effectively, most shotgun type weapons shouldn't be able to point blank 1 handed. + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + starting_attachment_types = null + attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 16,"rail_x" = 12, "rail_y" = 17, "under_x" = 20, "under_y" = 13, "stock_x" = 26, "stock_y" = 13) + gun_skill_category = SKILL_SHOTGUNS + + damage_mult = 1.25 + + aim_slowdown = 0.45 + wield_delay = 8 + fire_delay = 0.5 SECONDS + accuracy_mult = 1.15 + burst_amount = 1 + scatter = -2 + movement_acc_penalty_mult = 3 + +/obj/item/weapon/gun/rifle/standard_autoshotgun/jackhammer/do_fire(obj/object_to_fire) + . = ..() + if(src.get_ammo() == /datum/ammo/bullet/shotgun/g16_incendiary) + playsound(src.target, 'modular_RUtgmc/sound/misc/sparkler.ogg', 75, 1) + +//It's very fast shogun, it's made to prevent stagger/weaken spam. +/obj/item/weapon/gun/rifle/standard_autoshotgun/jackhammer/get_ammo() + . = ..() + switch(ammo_datum_type) + if(/datum/ammo/bullet/shotgun/g16_buckshot) + return /datum/ammo/bullet/shotgun/g16_buckshot/weak + if(/datum/ammo/bullet/shotgun/g16_slug) + return /datum/ammo/bullet/shotgun/g16_slug/weak + //------------------------------------------------------- // AR-55 rifle diff --git a/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm b/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm index d2483a62fc16e..fff9659a2e744 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/shotguns.dm @@ -1,6 +1,14 @@ /obj/item/weapon/gun/shotgun wield_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/Deploy_Wave_SHOTGUN.ogg' +/obj/item/weapon/gun/shotgun/do_fire(obj/object_to_fire) + . = ..() + if(src.get_ammo() == /datum/ammo/bullet/shotgun/incendiary) + playsound(src.target, 'modular_RUtgmc/sound/misc/sparkler.ogg', 75, 1) + +/obj/item/weapon/gun/shotgun/double/marine/incendiary + default_ammo_type = /datum/ammo/bullet/shotgun/incendiary + //------------------------------------------------------ //SH-35 Pump shotgun @@ -40,7 +48,7 @@ hand_reload_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-46/SH46_shell.ogg' cocked_sound = 'modular_RUtgmc/sound/weapons/guns/shotgun/SH-46/SH46_boltpull.ogg' flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_SMOKE_PARTICLES|GUN_WIELDED_FIRING_ONLY - max_chamber_items = 5 + max_chamber_items = 4 default_ammo_type = /datum/ammo/bullet/shotgun/buckshot attachable_allowed = list( /obj/item/attachable/bayonet, @@ -64,8 +72,8 @@ fire_delay = 3 //one shot every 0.3 seconds. accuracy_mult = 1.05 - scatter = 3 - damage_mult = 0.6 //40% less damage. + scatter = 2 + damage_mult = 0.65 //35% less damage. recoil = 0.5 wield_delay = 0.6 SECONDS aim_slowdown = 0.2 diff --git a/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm b/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm index 0f63e7884c38a..39fbe22cb7db2 100644 --- a/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm +++ b/modular_RUtgmc/code/modules/projectiles/guns/smgs.dm @@ -97,3 +97,286 @@ movement_acc_penalty_mult = 0.1 upper_akimbo_accuracy = 5 lower_akimbo_accuracy = 5 + +///UZI REPRITE +/obj/item/weapon/gun/smg/uzi + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "uzi_pro" + item_state = "uzi_pro" + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', + ) + +// +////////////// UMP45 based on.. UMP45 /////////////////// +// + +/obj/item/weapon/gun/smg/ump45 + name = "\improper UMP-45 submachinegun" + desc = "UMP45 is lightweight and simple to use. It features decend armor peneration and accuracy. Ideal weapon for defence. Uses .40 ACP HP magazines" + fire_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/UMP45/ump45.ogg' + reload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magin.ogg' + unload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magout.ogg' + wield_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/UMP45/deploy.ogg' + + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "ump45" + item_state = "ump45" + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + slot_s_store_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + ) + caliber = CALIBER_40ACP //codex + flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + force = 20 + type_of_casings = null + default_ammo_type = /obj/item/ammo_magazine/smg/ump45 + allowed_ammo_types = list( + /obj/item/ammo_magazine/smg/ump45, + /obj/item/ammo_magazine/smg/ump45/ext, + ) + attachable_allowed = list( + /obj/item/attachable/reddot, + /obj/item/attachable/compensator, + /obj/item/attachable/lasersight, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/flashlight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + /obj/item/attachable/buildasentry, + /obj/item/attachable/shoulder_mount, + /obj/item/weapon/gun/pistol/plasma_pistol, + /obj/item/weapon/gun/flamer/mini_flamer, + /obj/item/weapon/gun/grenade_launcher/underslung, + ) + + flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + attachable_offset = list("muzzle_x" = 40, "muzzle_y" = 16, "rail_x" = 19, "rail_y" = 20, "under_x" = 31, "under_y" = 12, "stock_x" = 24, "stock_y" = 10) + + fire_delay = 0.1 SECONDS + recoil = 0 // Recoil blowback system + recoil_unwielded = 1 + wield_delay = 0.6 SECONDS + aim_slowdown = 0.2 + + akimbo_additional_delay = 0.5 + + accuracy_mult = 1 + accuracy_mult_unwielded = 0.75 + scatter = 3 + scatter_unwielded = 16 + + movement_acc_penalty_mult = 0.1 + upper_akimbo_accuracy = 5 + lower_akimbo_accuracy = 5 + +/obj/item/weapon/gun/smg/ump45/pmc + name = "\improper UMP-45-PMC submachinegun" + icon_state = "ump45_pmc" + item_state = "ump45_pmc" + + attachable_allowed = list( + /obj/item/attachable/reddot, + /obj/item/attachable/lasersight, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/flashlight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + /obj/item/attachable/buildasentry, + /obj/item/attachable/shoulder_mount, + /obj/item/weapon/gun/pistol/plasma_pistol, + /obj/item/weapon/gun/flamer/mini_flamer, + /obj/item/weapon/gun/grenade_launcher/underslung, + ) + starting_attachment_types = list( + /obj/item/weapon/gun/pistol/plasma_pistol, + /obj/item/attachable/magnetic_harness, + ) + + default_ammo_type = /obj/item/ammo_magazine/smg/ump45/pmc + allowed_ammo_types = list( + /obj/item/ammo_magazine/smg/ump45/pmc, + ) + +// +////////////// MP7 based on.. MP7 /////////////////// +// +/obj/item/weapon/gun/smg/mp7_new + name = "\improper MP-7 submachinegun" + desc = "MP-7 is lightweight and very effective self-defence gun with very high firerate. Uses .40 ACP HP magazines" + fire_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7.ogg' + reload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7_clipin.ogg' + unload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7_clipout.ogg' + wield_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7_grab.ogg' + + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "mp7" + item_state = "mp7" + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_64.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_64.dmi', + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + slot_s_store_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + ) + caliber = CALIBER_40ACPL //codex + flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + force = 10 + type_of_casings = null + default_ammo_type = /obj/item/ammo_magazine/smg/mp7_new + allowed_ammo_types = list( + /obj/item/ammo_magazine/smg/mp7_new + ) + attachable_allowed = list( + /obj/item/attachable/reddot, + /obj/item/attachable/compensator, + /obj/item/attachable/extended_barrel, + /obj/item/attachable/lasersight, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/flashlight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + /obj/item/attachable/buildasentry, + /obj/item/attachable/foldable/mp7stock, + ) + + starting_attachment_types = list(/obj/item/attachable/foldable/mp7stock) + + flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 21, "rail_x" = 12, "rail_y" = 26, "under_x" = 21, "under_y" = 17, "stock_x" = -7, "stock_y" = 14) + + fire_delay = 0.05 SECONDS + recoil = 0.5 + recoil_unwielded = 1 + wield_delay = 0.3 SECONDS + aim_slowdown = 0 + + akimbo_additional_delay = 0.5 + + accuracy_mult = 1 + accuracy_mult_unwielded = 0.75 + scatter = 4 + scatter_unwielded = 5 + + movement_acc_penalty_mult = 0.1 + upper_akimbo_accuracy = 5 + lower_akimbo_accuracy = 5 + +/obj/item/weapon/gun/smg/mp7_new/pmc + icon_state = "mp7_pmc" + item_state = "mp7_pmc" + + recoil = 0 + recoil_unwielded = 0.5 + + attachable_allowed = list( + /obj/item/attachable/reddot, + /obj/item/attachable/lasersight, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/flashlight, + /obj/item/attachable/flashlight/under, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + /obj/item/attachable/buildasentry, + /obj/item/attachable/foldable/mp7stock, + ) + starting_attachment_types = list( + /obj/item/attachable/lasersight, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/foldable/mp7stock, + ) + + default_ammo_type = /obj/item/ammo_magazine/smg/mp7_new/pmc + allowed_ammo_types = list( + /obj/item/ammo_magazine/smg/mp7_new/pmc, + ) + +/obj/item/weapon/gun/smg/mp7_new/attachm + starting_attachment_types = list( + /obj/item/attachable/lasersight, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/foldable/mp7stock, + ) + +// +////////////// PP-19 BIZON based on.. PP-19 "Bizon" /////////////////// +// +/obj/item/weapon/gun/smg/p19bizon + name = "\improper P-19 \"Bizon\" submachinegun" + desc = "P-19, also called \"Bizon\" is semi-lightweigh personal-defence weapon with huge magazine capacity. Uses 9x18mm ammo." + fire_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19.ogg' + reload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipin.ogg' + unload_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipout.ogg' + wield_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_grab.ogg' + cocked_sound = 'modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_boltback.ogg' + + icon = 'modular_RUtgmc/icons/Marine/gun64.dmi' + icon_state = "p19" + item_state = "p19" + item_icons = list( + slot_l_hand_str = 'modular_RUtgmc/icons/mob/items_lefthand_1.dmi', + slot_r_hand_str = 'modular_RUtgmc/icons/mob/items_righthand_1.dmi', + slot_back_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + slot_s_store_str = 'modular_RUtgmc/icons/mob/clothing/back.dmi', + ) + caliber = CALIBER_9X18 //codex + flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT + force = 15 + type_of_casings = null + default_ammo_type = /obj/item/ammo_magazine/smg/p19 + allowed_ammo_types = list( + /obj/item/ammo_magazine/smg/p19, + ) + attachable_allowed = list( + /obj/item/attachable/foldable/mp7stock/p19, + + /obj/item/attachable/reddot, + /obj/item/attachable/compensator, + /obj/item/attachable/flashlight, + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonetknife, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/motiondetector, + ) + + starting_attachment_types = list(/obj/item/attachable/foldable/mp7stock/p19) + + flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER + gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC) + attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 16, "rail_x" = 7, "rail_y" = 19, "under_x" = 31, "under_y" = 12, "stock_x" = -7, "stock_y" = 8) + + fire_delay = 0.1 SECONDS + recoil = 0 // Recoil blowback system + recoil_unwielded = 1 + wield_delay = 0.7 SECONDS + aim_slowdown = 0.25 + + akimbo_additional_delay = 0.5 + + accuracy_mult = 1 + accuracy_mult_unwielded = 0.75 + scatter = 5 + scatter_unwielded = 12 + + movement_acc_penalty_mult = 0.1 + upper_akimbo_accuracy = 5 + lower_akimbo_accuracy = 5 + +/obj/item/weapon/gun/smg/p19bizon/magnetic + starting_attachment_types = list(/obj/item/attachable/foldable/mp7stock/p19, /obj/item/attachable/magnetic_harness) + diff --git a/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm b/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm index 38e92a8a756e8..0d3aadc549382 100644 --- a/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm +++ b/modular_RUtgmc/code/modules/projectiles/magazines/magazines.dm @@ -27,6 +27,52 @@ icon_state = "ppsh_ext" max_rounds = 40 // HI-Point .45 ACP Drum mag +/obj/item/ammo_magazine/smg/ump45 + name = "\improper UMP-45 magazine (.40ACP)" + desc = "A .40ACP magazine for the UMP45." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + default_ammo = /datum/ammo/bullet/smg/acp40 + w_class = WEIGHT_CLASS_SMALL + caliber = CALIBER_40ACP + icon_state = "ump45" + max_rounds = 25 + +/obj/item/ammo_magazine/smg/ump45/pmc + icon_state = "ump45_pmc" + max_rounds = 30 + default_ammo = /datum/ammo/bullet/smg/acp40/pmc + +/obj/item/ammo_magazine/smg/p19 + name = "\improper P-19 \"Bizon\" helical magazine (9x18mm)" + desc = "A 9x18mm magazine for the P-19 \"Bizon\"." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + default_ammo = /datum/ammo/bullet/smg/mm9 + w_class = WEIGHT_CLASS_SMALL + caliber = CALIBER_9X18 + icon_state = "p19" + max_rounds = 64 + +/obj/item/ammo_magazine/smg/mp7_new + name = "\improper MP-7 magazine (.40ACPL)" + desc = "A .40ACPL magazine for the MP7 with light ammo." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + default_ammo = /datum/ammo/bullet/smg/acp40/low + w_class = WEIGHT_CLASS_SMALL + caliber = CALIBER_40ACPL + icon_state = "mp7" + max_rounds = 35 + +/obj/item/ammo_magazine/smg/mp7_new/pmc + icon_state = "mp7_pmc" + max_rounds = 40 + default_ammo = /datum/ammo/bullet/smg/acp40/low/pmc + +/obj/item/ammo_magazine/smg/ump45/ext + name = "\improper UMP-45 extended magazine (.40ACP)" + desc = "An extended .40ACP magazine for the UMP45. Capacity x2, awesome!" + icon_state = "ump45_ext" + max_rounds = 50 + /obj/item/ammo_magazine/revolver/t500 name = "\improper R-500 speed loader (.500)" icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' @@ -101,3 +147,90 @@ max_rounds = 50 icon_state_mini = "mag_rifle_big_green" +/obj/item/ammo_magazine/rifle/tx15_buckshot + name = "\improper SH-15 buckshot mag (16g)" + desc = "A magazine of 16 gauge buckshot rounds, for the SH-15." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "tx15_buckshot" + icon_state_mini = "mag_tx15_buckshot" + default_ammo = /datum/ammo/bullet/shotgun/g16_buckshot + max_rounds = 12 + bonus_overlay = "tx15_buckshot" + +/obj/item/ammo_magazine/rifle/tx15_flechette + name = "\improper SH-15 flechette mag (16g)" + desc = "A magazine of 16 gauge flechette rounds, for the SH-15." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "tx15_flechette" + icon_state_mini = "mag_tx15_flechette" + default_ammo = /datum/ammo/bullet/shotgun/g16_flechette + max_rounds = 12 + bonus_overlay = "tx15_flech" + +/obj/item/ammo_magazine/rifle/tx15_slug + name = "\improper SH-15 slug mag (16g)" + desc = "A magazine of 16 gauge slugs, for the SH-15." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "tx15_slug" + icon_state_mini = "mag_tx15_slug" + default_ammo = /datum/ammo/bullet/shotgun/g16_slug + max_rounds = 12 + bonus_overlay = "tx15_slug" + +/obj/item/ammo_magazine/rifle/tx15_incendiary + name = "\improper SH-15 dragonbreath mag (16g)" + desc = "A magazine of 16 gauge incendiary rounds, for the SH-15." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "tx15_dragons_breath" + icon_state_mini = "mag_tx15_incendiary" + default_ammo = /datum/ammo/bullet/shotgun/g16_incendiary + max_rounds = 12 + bonus_overlay = "tx15_dragons_breath" + +/obj/item/ammo_magazine/rifle/tx24_buckshot + name = "\improper SH-24 buckshot cylinder (16g)" + desc = "A revolving cylinder of 16 gauge buckshot rounds, for the SH-24." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "jaw_buck" + icon_state_mini = "mag_jaw_buckshot" + default_ammo = /datum/ammo/bullet/shotgun/g16_buckshot + max_rounds = 24 + bonus_overlay = "jaw_buckshot" + +/obj/item/ammo_magazine/rifle/tx24_slug + name = "\improper SH-24 slug cylinder (16g)" + desc = "A revolving cylinder of 16 gauge slug rounds, for the SH-24." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "jaw_slug" + icon_state_mini = "mag_jaw_slug" + default_ammo = /datum/ammo/bullet/shotgun/g16_slug + max_rounds = 24 + bonus_overlay = "jaw_slug" + +/obj/item/ammo_magazine/rifle/tx24_flechette + name = "\improper SH-24 flechette cylinder (16g)" + desc = "A revolving cylinder of 16 gauge flechette rounds, for the SH-24." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "jaw_flech" + icon_state_mini = "mag_jaw_flechette" + default_ammo = /datum/ammo/bullet/shotgun/g16_flechette + max_rounds = 24 + bonus_overlay = "jaw_flechette" + +/obj/item/ammo_magazine/rifle/tx24_incendiary + name = "\improper SH-24 dragonbreath cylinder (16g)" + desc = "A revolving cylinder of 16 gauge incendiary rounds, for the SH-24." + caliber = CALIBER_16G + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "jaw_ign" + icon_state_mini = "mag_jaw_incendiary" + default_ammo = /datum/ammo/bullet/shotgun/g16_incendiary + max_rounds = 24 + bonus_overlay = "jaw_incendiary" diff --git a/modular_RUtgmc/code/modules/projectiles/magazines/misc.dm b/modular_RUtgmc/code/modules/projectiles/magazines/misc.dm index 684600c70d873..e2e14b998dd1b 100644 --- a/modular_RUtgmc/code/modules/projectiles/magazines/misc.dm +++ b/modular_RUtgmc/code/modules/projectiles/magazines/misc.dm @@ -89,3 +89,60 @@ caliber = CALIBER_10x27_CASELESS current_rounds = 200 max_rounds = 200 + +/obj/item/ammo_magazine/packet/standardautoshotgun + name = "box of 16 Gauge shotgun buckshot shells" + desc = "A box containing 16 Gauge buckshot shells." + icon_state = "box_16gbuck" + default_ammo = /datum/ammo/bullet/shotgun/g16_buckshot + caliber = CALIBER_16G + current_rounds = 60 + max_rounds = 60 + +/obj/item/ammo_magazine/packet/standardautoshotgun/slug + name = "box of 16 Gauge shotgun slug shells" + desc = "A box containing 16 Gauge slug shells." + icon_state = "box_16gslug" + default_ammo = /datum/ammo/bullet/shotgun/g16_slug + caliber = CALIBER_16G + +/obj/item/ammo_magazine/packet/standardautoshotgun/flechette + name = "box of 16 Gauge shotgun flechette shells" + desc = "A box containing 16 Gauge flechette shells." + icon_state = "box_16gflech" + default_ammo = /datum/ammo/bullet/shotgun/g16_flechette + default_ammo = null + +/obj/item/ammo_magazine/packet/standardautoshotgun/incendiary + name = "box of 16 Gauge shotgun dragonbreath" + desc = "A box containing 16 Gauge dragonbreath shells." + icon_state = "box_16gdrag" + default_ammo = /datum/ammo/bullet/shotgun/g16_incendiary + caliber = CALIBER_16G + +/obj/item/ammo_magazine/packet/acp40 + desc = "A packet containing 150 rounds of 40ACP." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "box_40acp" + caliber = CALIBER_40ACP + current_rounds = 150 + max_rounds = 150 + default_ammo = /datum/ammo/bullet/smg/acp40 + +/obj/item/ammo_magazine/packet/acpl40 + desc = "A packet containing 200 rounds of 40ACPL." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "box_40acpl" + caliber = CALIBER_40ACPL + current_rounds = 200 + max_rounds = 200 + default_ammo = /datum/ammo/bullet/smg/acp40/low + +/obj/item/ammo_magazine/packet/p9x18 + desc = "A packet containing 250 rounds of 9X18mm." + icon = 'modular_RUtgmc/icons/obj/items/ammo.dmi' + icon_state = "box_9mm" + caliber = CALIBER_9X18 + current_rounds = 250 + max_rounds = 250 + default_ammo = /datum/ammo/bullet/smg/mm9 diff --git a/modular_RUtgmc/code/modules/reqs/supplypacks.dm b/modular_RUtgmc/code/modules/reqs/supplypacks.dm index be897ccb725ad..0fe8ada8051f6 100644 --- a/modular_RUtgmc/code/modules/reqs/supplypacks.dm +++ b/modular_RUtgmc/code/modules/reqs/supplypacks.dm @@ -15,6 +15,20 @@ OPERATIONS WEAPONS *******************************************************************************/ +/datum/supply_packs/weapons/g16_incendiary + name = "16G Dragonbreath Ammo box" + contains = list(/obj/item/ammo_magazine/packet/standardautoshotgun/incendiary) + cost = 300 + +/datum/supply_packs/weapons/g16_incendiary + name = "16G SH-15 Dragonbreath magazine" + contains = list(/obj/item/ammo_magazine/rifle/tx15_incendiary) + cost = 50 + +/datum/supply_packs/weapons/g16_incendiary + name = "16G SH-24 Dragonbreath magazine" + contains = list(/obj/item/ammo_magazine/rifle/tx24_incendiary) + cost = 75 /datum/supply_packs/weapons/vector name = "Vector" contains = list(/obj/item/weapon/gun/smg/vector) @@ -25,6 +39,26 @@ WEAPONS contains = list(/obj/item/ammo_magazine/smg/vector) cost = 5 +/datum/supply_packs/weapons/ump45 + name = "UMP-45" + contains = list(/obj/item/weapon/gun/smg/ump45) + cost = 75 + +/datum/supply_packs/weapons/ammo_magazine/ump45/ex + name = "UMP-45 extended magazine" + contains = list(/obj/item/ammo_magazine/smg/ump45/ext) + cost = 12 + +/datum/supply_packs/weapons/mp7 + name = "MP-7" + contains = list(/obj/item/weapon/gun/smg/mp7_new) + cost = 75 + +/datum/supply_packs/weapons/p19 + name = "P-19 \"Bizon\"" + contains = list(/obj/item/weapon/gun/smg/p19bizon) + cost = 75 + /datum/supply_packs/weapons/valihalberd name = "VAL-HAL-A" contains = list(/obj/item/weapon/twohanded/glaive/halberd/harvester) @@ -322,6 +356,111 @@ MEDICAL containertype = /obj/structure/closet/crate/secure/surgery access = ACCESS_MARINE_MEDBAY +/datum/supply_packs/medical/ai2 + name = "\"АИ-2\" first aid kit" + notes = "Contains cheap individual medical kit with rare and useful reagents." + contains = list(/obj/item/storage/ai2) + cost = 125 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/deployable_optable + name = "Deployable operating table" + notes = "Contains an operating table that can be transported and deployed for medical procedures." + contains = list(/obj/item/deployable_optable) + cost = 200 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/dartgun + name = "DP-2 Dart Gun belt" + notes = "Contains a purpose built belt-holster assembly that holds a DP-2 dart gun and 5 dart boxes." + contains = list(/obj/item/storage/holster/belt/dartgun/full) + cost = 150 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/hypervene_dartbox + name = "Hypervene Dart Box" + notes = "Contains a box with 4 hanfuls of hypervene darts, total 20" + contains = list(/obj/item/storage/dartbox/hypervene) + cost = 25 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/tramadol_dartbox + name = "Tramadol Dart Box" + notes = "Contains a box with 4 hanfuls of tramadol darts, total 20" + contains = list(/obj/item/storage/dartbox/tramadol) + cost = 25 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/dylovene_dartbox + name = "Dylovene Dart Box" + notes = "Contains a box with 4 hanfuls of dylovene darts, total 20" + contains = list(/obj/item/storage/dartbox/dylovene) + cost = 25 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/bicaridine_dartbox + name = "Bicaridine Dart Box" + notes = "Contains a box with 4 hanfuls of bicaridine darts, total 20" + contains = list(/obj/item/storage/dartbox/bicaridine) + cost = 50 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/kelotane_dartbox + name = "Kelotane Dart Box" + notes = "Contains a box with 4 hanfuls of kelotane darts, total 20" + contains = list(/obj/item/storage/dartbox/kelotane) + cost = 50 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/tricordrazine_dartbox + name = "Tricordrazine Dart Box" + notes = "Contains a box with 4 hanfuls of tricordrazine darts, total 20" + contains = list(/obj/item/storage/dartbox/tricordrazine) + cost = 50 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/inaprovaline_dartbox + name = "Inaprovaline Dart Box" + notes = "Contains a box with 4 hanfuls of inaprovaline darts, total 20" + contains = list(/obj/item/storage/dartbox/inaprovaline) + cost = 75 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/combat_dartbox + name = "Combat Dart Box" + notes = "Contains a box with 4 hanfuls of combat darts, total 20" + contains = list(/obj/item/storage/dartbox/combat) + cost = 125 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/synaptizine_dartbox + name = "Synaptizine Dart Box" + notes = "Contains a box with 4 hanfuls of synaptizine darts, total 20" + contains = list(/obj/item/storage/dartbox/synaptizine) + cost = 150 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/russian_red_dartbox + name = "Russian Red Dart Box" + notes = "Contains a box with 4 hanfuls of russian red darts, total 20" + contains = list(/obj/item/storage/dartbox/russian_red) + cost = 150 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/meraderm_dartbox + name = "Meraderm Dart Box" + notes = "Contains a box with 4 hanfuls of meraderm red darts, total 20" + contains = list(/obj/item/storage/dartbox/meraderm) + cost = 250 + containertype = /obj/structure/closet/crate/secure/surgery + +/datum/supply_packs/medical/neuraline_dartbox + name = "Neuraline Dart Box" + notes = "Contains a box with 4 hanfuls of neuraline red darts, total 20" + contains = list(/obj/item/storage/dartbox/neuraline) + cost = 400 + containertype = /obj/structure/closet/crate/secure/surgery + /datum/supply_packs/medical/advanced_medical_kits name = "Advanced medical kits" notes = "contains pair advanced medical kits from medical vendors." diff --git a/modular_RUtgmc/icons/Marine/attachments_64.dmi b/modular_RUtgmc/icons/Marine/attachments_64.dmi index 84ebd3b42fba6..f3d80d2ae227b 100644 Binary files a/modular_RUtgmc/icons/Marine/attachments_64.dmi and b/modular_RUtgmc/icons/Marine/attachments_64.dmi differ diff --git a/modular_RUtgmc/icons/Marine/gun64.dmi b/modular_RUtgmc/icons/Marine/gun64.dmi index 3ce3cb6466d7a..f4db7926c6531 100644 Binary files a/modular_RUtgmc/icons/Marine/gun64.dmi and b/modular_RUtgmc/icons/Marine/gun64.dmi differ diff --git a/modular_RUtgmc/icons/Marine/marine-weapons.dmi b/modular_RUtgmc/icons/Marine/marine-weapons.dmi index 40e4ef874584c..4576caf0e5c3c 100644 Binary files a/modular_RUtgmc/icons/Marine/marine-weapons.dmi and b/modular_RUtgmc/icons/Marine/marine-weapons.dmi differ diff --git a/modular_RUtgmc/icons/Marine/sentry.dmi b/modular_RUtgmc/icons/Marine/sentry.dmi new file mode 100644 index 0000000000000..df89ccd4a8661 Binary files /dev/null and b/modular_RUtgmc/icons/Marine/sentry.dmi differ diff --git a/modular_RUtgmc/icons/UI_Icons/lobby_button.dmi b/modular_RUtgmc/icons/UI_Icons/lobby_button.dmi new file mode 100644 index 0000000000000..50c91b2452aff Binary files /dev/null and b/modular_RUtgmc/icons/UI_Icons/lobby_button.dmi differ diff --git a/modular_RUtgmc/icons/UI_Icons/map_blips.dmi b/modular_RUtgmc/icons/UI_Icons/map_blips.dmi index 567e1e62f963e..17fc8b30c6bd2 100644 Binary files a/modular_RUtgmc/icons/UI_Icons/map_blips.dmi and b/modular_RUtgmc/icons/UI_Icons/map_blips.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/back.dmi b/modular_RUtgmc/icons/mob/clothing/back.dmi index ca0301734a46f..4ef4aa13d5fa8 100644 Binary files a/modular_RUtgmc/icons/mob/clothing/back.dmi and b/modular_RUtgmc/icons/mob/clothing/back.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/belt.dmi b/modular_RUtgmc/icons/mob/clothing/belt.dmi index a9508ffa63f19..fcf049e60712a 100644 Binary files a/modular_RUtgmc/icons/mob/clothing/belt.dmi and b/modular_RUtgmc/icons/mob/clothing/belt.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/ert_suits.dmi b/modular_RUtgmc/icons/mob/clothing/ert_suits.dmi new file mode 100644 index 0000000000000..6e9ac3b6a1148 Binary files /dev/null and b/modular_RUtgmc/icons/mob/clothing/ert_suits.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/ert_uniforms.dmi b/modular_RUtgmc/icons/mob/clothing/ert_uniforms.dmi new file mode 100644 index 0000000000000..377f0d2840c7d Binary files /dev/null and b/modular_RUtgmc/icons/mob/clothing/ert_uniforms.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/eyes.dmi b/modular_RUtgmc/icons/mob/clothing/eyes.dmi index 3a7c545ba3acb..c28512fa3adec 100644 Binary files a/modular_RUtgmc/icons/mob/clothing/eyes.dmi and b/modular_RUtgmc/icons/mob/clothing/eyes.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/hands.dmi b/modular_RUtgmc/icons/mob/clothing/hands.dmi index ea3fb92190cda..4e5615c67bac1 100644 Binary files a/modular_RUtgmc/icons/mob/clothing/hands.dmi and b/modular_RUtgmc/icons/mob/clothing/hands.dmi differ diff --git a/modular_RUtgmc/icons/mob/clothing/headwear/ert_headwear.dmi b/modular_RUtgmc/icons/mob/clothing/headwear/ert_headwear.dmi new file mode 100644 index 0000000000000..d61aa35973a23 Binary files /dev/null and b/modular_RUtgmc/icons/mob/clothing/headwear/ert_headwear.dmi differ diff --git a/modular_RUtgmc/icons/mob/hud.dmi b/modular_RUtgmc/icons/mob/hud.dmi index caad6e425298a..a9a8d55990b13 100644 Binary files a/modular_RUtgmc/icons/mob/hud.dmi and b/modular_RUtgmc/icons/mob/hud.dmi differ diff --git a/modular_RUtgmc/icons/mob/items_lefthand_1.dmi b/modular_RUtgmc/icons/mob/items_lefthand_1.dmi index 4207f2cc94b3e..c5e7c3a9bf4b6 100644 Binary files a/modular_RUtgmc/icons/mob/items_lefthand_1.dmi and b/modular_RUtgmc/icons/mob/items_lefthand_1.dmi differ diff --git a/modular_RUtgmc/icons/mob/items_lefthand_64.dmi b/modular_RUtgmc/icons/mob/items_lefthand_64.dmi index a86f00260cc20..c762606d39824 100644 Binary files a/modular_RUtgmc/icons/mob/items_lefthand_64.dmi and b/modular_RUtgmc/icons/mob/items_lefthand_64.dmi differ diff --git a/modular_RUtgmc/icons/mob/items_righthand_1.dmi b/modular_RUtgmc/icons/mob/items_righthand_1.dmi index c8b6b75b55a92..eb76f2a80c8a2 100644 Binary files a/modular_RUtgmc/icons/mob/items_righthand_1.dmi and b/modular_RUtgmc/icons/mob/items_righthand_1.dmi differ diff --git a/modular_RUtgmc/icons/mob/items_righthand_64.dmi b/modular_RUtgmc/icons/mob/items_righthand_64.dmi index 00d453799cd17..3fd15048e33b3 100644 Binary files a/modular_RUtgmc/icons/mob/items_righthand_64.dmi and b/modular_RUtgmc/icons/mob/items_righthand_64.dmi differ diff --git a/modular_RUtgmc/icons/mob/modular/capes_highlight.dmi b/modular_RUtgmc/icons/mob/modular/capes_highlight.dmi index ce9efe854bf22..ac1986e3a42eb 100644 Binary files a/modular_RUtgmc/icons/mob/modular/capes_highlight.dmi and b/modular_RUtgmc/icons/mob/modular/capes_highlight.dmi differ diff --git a/modular_RUtgmc/icons/obj/clothing/belts.dmi b/modular_RUtgmc/icons/obj/clothing/belts.dmi index 0b660933c1c69..6b5502d2250f9 100644 Binary files a/modular_RUtgmc/icons/obj/clothing/belts.dmi and b/modular_RUtgmc/icons/obj/clothing/belts.dmi differ diff --git a/modular_RUtgmc/icons/obj/clothing/ert_suits.dmi b/modular_RUtgmc/icons/obj/clothing/ert_suits.dmi new file mode 100644 index 0000000000000..21ef2b3e6f929 Binary files /dev/null and b/modular_RUtgmc/icons/obj/clothing/ert_suits.dmi differ diff --git a/modular_RUtgmc/icons/obj/clothing/ert_uniforms.dmi b/modular_RUtgmc/icons/obj/clothing/ert_uniforms.dmi new file mode 100644 index 0000000000000..0864d8a462704 Binary files /dev/null and b/modular_RUtgmc/icons/obj/clothing/ert_uniforms.dmi differ diff --git a/modular_RUtgmc/icons/obj/clothing/glasses.dmi b/modular_RUtgmc/icons/obj/clothing/glasses.dmi index 88173c4271826..7c821398947dd 100644 Binary files a/modular_RUtgmc/icons/obj/clothing/glasses.dmi and b/modular_RUtgmc/icons/obj/clothing/glasses.dmi differ diff --git a/modular_RUtgmc/icons/obj/clothing/gloves.dmi b/modular_RUtgmc/icons/obj/clothing/gloves.dmi index 310b50819222f..303bdb05c32b4 100644 Binary files a/modular_RUtgmc/icons/obj/clothing/gloves.dmi and b/modular_RUtgmc/icons/obj/clothing/gloves.dmi differ diff --git a/modular_RUtgmc/icons/obj/clothing/headwear/ert_headwear.dmi b/modular_RUtgmc/icons/obj/clothing/headwear/ert_headwear.dmi new file mode 100644 index 0000000000000..44bc278727f9e Binary files /dev/null and b/modular_RUtgmc/icons/obj/clothing/headwear/ert_headwear.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/ammo.dmi b/modular_RUtgmc/icons/obj/items/ammo.dmi index 9c30631d7aa50..517e5778a0d44 100644 Binary files a/modular_RUtgmc/icons/obj/items/ammo.dmi and b/modular_RUtgmc/icons/obj/items/ammo.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/grenade.dmi b/modular_RUtgmc/icons/obj/items/grenade.dmi index c815145df33c6..3cdc9ecf611ac 100644 Binary files a/modular_RUtgmc/icons/obj/items/grenade.dmi and b/modular_RUtgmc/icons/obj/items/grenade.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/projectiles.dmi b/modular_RUtgmc/icons/obj/items/projectiles.dmi index bdfda6bafc26c..f74e8a8ace32b 100644 Binary files a/modular_RUtgmc/icons/obj/items/projectiles.dmi and b/modular_RUtgmc/icons/obj/items/projectiles.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/storage/firstaidkit.dmi b/modular_RUtgmc/icons/obj/items/storage/firstaidkit.dmi new file mode 100644 index 0000000000000..7237f7c35316d Binary files /dev/null and b/modular_RUtgmc/icons/obj/items/storage/firstaidkit.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/storage/storage.dmi b/modular_RUtgmc/icons/obj/items/storage/storage.dmi index 027e2c0c7a141..6a8086542c3d6 100644 Binary files a/modular_RUtgmc/icons/obj/items/storage/storage.dmi and b/modular_RUtgmc/icons/obj/items/storage/storage.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/surgery.dmi b/modular_RUtgmc/icons/obj/items/surgery.dmi new file mode 100644 index 0000000000000..a34f6bb4c99ff Binary files /dev/null and b/modular_RUtgmc/icons/obj/items/surgery.dmi differ diff --git a/modular_RUtgmc/icons/obj/items/surgery_tools.dmi b/modular_RUtgmc/icons/obj/items/surgery_tools.dmi index 66b43d41e3416..8c2cfa7d91512 100644 Binary files a/modular_RUtgmc/icons/obj/items/surgery_tools.dmi and b/modular_RUtgmc/icons/obj/items/surgery_tools.dmi differ diff --git a/modular_RUtgmc/icons/obj/machines/monitors.dmi b/modular_RUtgmc/icons/obj/machines/monitors.dmi new file mode 100644 index 0000000000000..b8ab7e2f7c370 Binary files /dev/null and b/modular_RUtgmc/icons/obj/machines/monitors.dmi differ diff --git a/modular_RUtgmc/icons/obj/structures/crates.dmi b/modular_RUtgmc/icons/obj/structures/crates.dmi index 82bfd4377fd55..fde33524fe3d8 100644 Binary files a/modular_RUtgmc/icons/obj/structures/crates.dmi and b/modular_RUtgmc/icons/obj/structures/crates.dmi differ diff --git a/modular_RUtgmc/includes.dm b/modular_RUtgmc/includes.dm index 70858dbd29089..91f291b93a3d0 100644 --- a/modular_RUtgmc/includes.dm +++ b/modular_RUtgmc/includes.dm @@ -46,6 +46,7 @@ #include "code\datums\jobs\job\shipside.dm" #include "code\datums\jobs\job\sons_of_mars_shipside.dm" #include "code\datums\jobs\job\xenomorph.dm" +#include "code\datums\jobs\job\pmc.dm" #include "code\datums\keybinding\communication.dm" #include "code\datums\keybinding\mob.dm" #include "code\datums\keybinding\xeno.dm" @@ -95,6 +96,7 @@ #include "code\game\objects\items\radio\intercom.dm" #include "code\game\objects\items\reagent_containers\glass\bottle.dm" #include "code\game\objects\items\reagent_containers\hypospray.dm" +#include "code\game\objects\items\reagent_containers\pill.dm" #include "code\game\objects\items\robot\robot_parts.dm" #include "code\game\objects\items\stacks\sheets\mineral.dm" #include "code\game\objects\items\stacks\sheets\sheet_types.dm" @@ -107,11 +109,15 @@ #include "code\game\objects\items\storage\boxes.dm" #include "code\game\objects\items\storage\dispenser.dm" #include "code\game\objects\items\storage\holsters.dm" +#include "code\game\objects\items\storage\surgical_tray.dm" +#include "code\game\objects\items\storage\firstaid.dm" +#include "code\game\objects\items\storage\surgery_table.dm" #include "code\game\objects\items\tools\cleaning_tools.dm" #include "code\game\objects\items\tools\maintenance_tools.dm" #include "code\game\objects\items\tools\mining_tools.dm" #include "code\game\objects\items\tools\shovel_tools.dm" #include "code\game\objects\items\tools\soldering_tool.dm" +#include "code\game\objects\items\tools\surgery_tools.dm" #include "code\game\objects\items\weapons\blades.dm" #include "code\game\objects\items\weapons\harvester.dm" #include "code\game\objects\machinery\adv_med.dm" @@ -164,6 +170,7 @@ #include "code\game\objects\structures\window.dm" #include "code\game\objects\structures\xeno.dm" #include "code\game\objects\structures\crates_lockers\closets.dm" +#include "code\game\objects\structures\crates_lockers\crates.dm" #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest\xeno_nest.dm" #include "code\game\objects\explosives\grenades\grenade.dm" @@ -215,6 +222,7 @@ #include "code\modules\clothing\modular_armor\attachments\uniform.dm" #include "code\modules\clothing\shoes\marine_shoes.dm" #include "code\modules\clothing\suits\suits.dm" +#include "code\modules\clothing\suits\marine_armor.dm" #include "code\modules\clothing\under\marine_uniform.dm" #include "code\modules\factory\howtopaper.dm" #include "code\modules\hydroponics\vines.dm" @@ -325,6 +333,7 @@ #include "code\modules\power\lighting.dm" #include "code\modules\power\terminal.dm" #include "code\modules\projectiles\ammo_datums.dm" +#include "code\modules\projectiles\ammunition.dm" #include "code\modules\projectiles\gun_attachables.dm" #include "code\modules\clans\clan.dm" #include "code\modules\clans\client.dm" diff --git a/modular_RUtgmc/sound/effects/UI/click.ogg b/modular_RUtgmc/sound/effects/UI/click.ogg new file mode 100644 index 0000000000000..6e29fd5d1fc65 Binary files /dev/null and b/modular_RUtgmc/sound/effects/UI/click.ogg differ diff --git a/modular_RUtgmc/sound/effects/UI/move.ogg b/modular_RUtgmc/sound/effects/UI/move.ogg new file mode 100644 index 0000000000000..c2ac651796fb0 Binary files /dev/null and b/modular_RUtgmc/sound/effects/UI/move.ogg differ diff --git a/modular_RUtgmc/sound/items/trayhit2.ogg b/modular_RUtgmc/sound/items/trayhit2.ogg new file mode 100644 index 0000000000000..066e44bf0b6a2 Binary files /dev/null and b/modular_RUtgmc/sound/items/trayhit2.ogg differ diff --git a/modular_RUtgmc/sound/machines/alarm.ogg b/modular_RUtgmc/sound/machines/alarm.ogg new file mode 100644 index 0000000000000..4becf8612195a Binary files /dev/null and b/modular_RUtgmc/sound/machines/alarm.ogg differ diff --git a/modular_RUtgmc/sound/machines/buzz_long.ogg b/modular_RUtgmc/sound/machines/buzz_long.ogg new file mode 100644 index 0000000000000..67146ed3ce8ef Binary files /dev/null and b/modular_RUtgmc/sound/machines/buzz_long.ogg differ diff --git a/modular_RUtgmc/sound/machines/sentry_warn.ogg b/modular_RUtgmc/sound/machines/sentry_warn.ogg new file mode 100644 index 0000000000000..76e35352930b0 Binary files /dev/null and b/modular_RUtgmc/sound/machines/sentry_warn.ogg differ diff --git a/modular_RUtgmc/sound/misc/gulp.ogg b/modular_RUtgmc/sound/misc/gulp.ogg new file mode 100644 index 0000000000000..b2e9e24091103 Binary files /dev/null and b/modular_RUtgmc/sound/misc/gulp.ogg differ diff --git a/modular_RUtgmc/sound/misc/sparkler.ogg b/modular_RUtgmc/sound/misc/sparkler.ogg new file mode 100644 index 0000000000000..5892255e02c7b Binary files /dev/null and b/modular_RUtgmc/sound/misc/sparkler.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire.ogg b/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire.ogg new file mode 100644 index 0000000000000..6186f8083aeeb Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire_crit.ogg b/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire_crit.ogg new file mode 100644 index 0000000000000..85be63492ae5a Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_fire_crit.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_hit.wav b/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_hit.wav new file mode 100644 index 0000000000000..295e7d2339d61 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/misc/dart_gun/dartgun_hit.wav differ diff --git a/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24.ogg b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24.ogg new file mode 100644 index 0000000000000..d7af5d43a94ed Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_boltpull.ogg b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_boltpull.ogg new file mode 100644 index 0000000000000..cf225241e6daa Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_boltpull.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipin.ogg b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipin.ogg new file mode 100644 index 0000000000000..deb0c96e43292 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipin.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipout.ogg b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipout.ogg new file mode 100644 index 0000000000000..b82bcb570de19 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/shotgun/SH-24/SH24_clipout.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_clipin.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_clipin.ogg new file mode 100644 index 0000000000000..3c3083b45241a Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_clipin.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_clipout.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_clipout.ogg new file mode 100644 index 0000000000000..db516170c610f Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_clipout.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_grab.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_grab.ogg new file mode 100644 index 0000000000000..50fabcbd9b0cc Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/MP7_grab.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7.ogg new file mode 100644 index 0000000000000..d4294134531cb Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7_sil.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7_sil.ogg new file mode 100644 index 0000000000000..b1d06fa2c2b6b Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/MP7/mp7_sil.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19.ogg new file mode 100644 index 0000000000000..0aea7567ed2ea Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_boltback.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_boltback.ogg new file mode 100644 index 0000000000000..795b7b837a73a Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_boltback.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipin.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipin.ogg new file mode 100644 index 0000000000000..a2308a7d79f1f Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipin.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipout.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipout.ogg new file mode 100644 index 0000000000000..67025506f2cd1 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_clipout.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_grab.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_grab.ogg new file mode 100644 index 0000000000000..65a672937b915 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/P-19/p19_grab.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magin.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magin.ogg new file mode 100644 index 0000000000000..abeda85d36baa Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magin.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magout.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magout.ogg new file mode 100644 index 0000000000000..ab72ee9ec3f67 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/Magout.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/deploy.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/deploy.ogg new file mode 100644 index 0000000000000..9e1e685bd60f8 Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/deploy.ogg differ diff --git a/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/ump45.ogg b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/ump45.ogg new file mode 100644 index 0000000000000..5ce150b1e2c4c Binary files /dev/null and b/modular_RUtgmc/sound/weapons/guns/smgs/UMP45/ump45.ogg differ