diff --git a/code/datums/ammo/bullet/special_ammo.dm b/code/datums/ammo/bullet/special_ammo.dm index 97c1bf5735f9..323018a40d66 100644 --- a/code/datums/ammo/bullet/special_ammo.dm +++ b/code/datums/ammo/bullet/special_ammo.dm @@ -130,6 +130,9 @@ /datum/ammo/bullet/machinegun/auto/set_bullet_traits() return +/datum/ammo/bullet/machinegun/auto/medium // for T37, UPP MMG + name = "medium machinegun bullet" + /datum/ammo/bullet/minigun name = "minigun bullet" headshot_state = HEADSHOT_OVERLAY_MEDIUM diff --git a/code/datums/factions/upp.dm b/code/datums/factions/upp.dm index 90b04765cf85..5a6c6734c1f4 100644 --- a/code/datums/factions/upp.dm +++ b/code/datums/factions/upp.dm @@ -69,13 +69,9 @@ list("Type 71 Magazine (5.45x39mm)", 5, /obj/item/ammo_magazine/rifle/type71, null, VENDOR_ITEM_REGULAR), list("SIDEARMS", 0, null, null, null), - list("Type 73 Pistol", 25, /obj/item/weapon/gun/pistol/t73, null, VENDOR_ITEM_REGULAR), list("NP92 Pistol", 15, /obj/item/weapon/gun/pistol/np92, null, VENDOR_ITEM_REGULAR), - list("ZHNK-72 Revolver", 15, /obj/item/weapon/gun/revolver/upp, null, VENDOR_ITEM_REGULAR), list("SIDEARM AMMUNITION", 0, null, null, null), - list("Type 73 Magazine (7.62x25mm Tokarev)", 5, /obj/item/ammo_magazine/pistol/t73, null, VENDOR_ITEM_REGULAR), - list("ZHNK-72 Speed Loader (7.62x38mmR)", 5, /obj/item/ammo_magazine/revolver/upp, null, VENDOR_ITEM_REGULAR), list("NP92 Magazine (9x18mm Makarov)", 40, /obj/item/ammo_magazine/pistol/np92, null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index 4f825030d627..39e40fde04e7 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -561,8 +561,9 @@ GLOBAL_LIST_EMPTY(vending_products) var/specialist_assignment switch(p_name) if("Scout Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT) - specialist_assignment = "Scout" + to_chat(user, SPAN_WARNING("Nuh uh. No scout on HvH.")) + vend_fail() + return FALSE if("Sniper Set") user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER) specialist_assignment = "Sniper" diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm index 9ce8390095e8..e28fe263439f 100644 --- a/code/game/machinery/vending/vendor_types/requisitions.dm +++ b/code/game/machinery/vending/vendor_types/requisitions.dm @@ -47,6 +47,7 @@ list("M15 Fragmentation Grenade", round(scale * 2), /obj/item/explosive/grenade/high_explosive/m15, VENDOR_ITEM_REGULAR), list("M20 Claymore Anti-Personnel Mine", round(scale * 4), /obj/item/explosive/mine, VENDOR_ITEM_REGULAR), list("M40 HEDP Grenade", round(scale * 25), /obj/item/explosive/grenade/high_explosive, VENDOR_ITEM_REGULAR), + list("M40 HEFA Grenade", round(scale * 10), /obj/item/explosive/grenade/high_explosive/frag, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Grenade", round(scale * 4), /obj/item/explosive/grenade/incendiary, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Smoke Grenade", round(scale * 4), /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Grenade", round(scale * 5), /obj/item/explosive/grenade/smokebomb, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm index 998b17504a44..2230e55fb210 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm @@ -26,6 +26,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), + list("M40 HEFA Frag Packet (x3 grenades)", 18, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm index 17d3419ac2f8..20912b8dee97 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm @@ -52,6 +52,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), + list("M40 HEFA Frag Packet (x3 grenades)", 18, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index b1961ae9e75b..f11516b0c0b1 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -49,6 +49,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), + list("M40 HEFA Frag Packet (x3 grenades)", 18, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm index 65066731070d..5fd89a294517 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm @@ -58,6 +58,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list( list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 20, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), + list("M40 HEFA Frag Packet (x3 grenades)", 20, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Packet (x3 grenades)", 20, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Packet (x3 grenades)", 20, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Packet (x3 grenades)", 10, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm index 60afed8b984d..02a067692868 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm @@ -11,6 +11,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list( list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 30, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), + list("M40 HEFA Frag Packet (x3 grenades)", 30, /obj/item/storage/box/packet/frag, null, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Packet (x3 grenades)", 30, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Packet (x3 grenades)", 30, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Packet (x3 grenades)", 15, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm index c37dd98ed263..ced4ae701010 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), + list("M40 HEFA Frag Packet (x3 grenades)", 18, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR), list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm index 1cd3e1577c57..459a4e3d592f 100644 --- a/code/game/objects/items/explosives/grenades/marines.dm +++ b/code/game/objects/items/explosives/grenades/marines.dm @@ -414,7 +414,7 @@ /obj/item/explosive/grenade/smokebomb/prime() playsound(src.loc, 'sound/effects/smoke.ogg', 25, 1, 4) - smoke.set_up(smoke_radius, 0, get_turf(src), null, 6) + smoke.set_up(smoke_radius, 0, get_turf(src), null, 30) smoke.start() qdel(src) @@ -449,7 +449,7 @@ /obj/item/explosive/grenade/phosphorus/prime() playsound(src.loc, 'sound/effects/smoke.ogg', 25, 1, 4) - smoke.set_up(smoke_radius, 0, get_turf(src)) + smoke.set_up(smoke_radius, 0, get_turf(src), null, 18) smoke.start() qdel(src) diff --git a/code/game/objects/structures/desertdam.dm b/code/game/objects/structures/desertdam.dm index 969259be37ec..c45ea4e88b9c 100644 --- a/code/game/objects/structures/desertdam.dm +++ b/code/game/objects/structures/desertdam.dm @@ -24,3 +24,8 @@ name = "road" icon_state = "stop_decal1" layer = TURF_LAYER + +/obj/structure/desertdam/decals/road_stop_ru + name = "road" + icon_state = "stop_decal1_ru" + layer = TURF_LAYER diff --git a/code/game/objects/structures/landing_signs.dm b/code/game/objects/structures/landing_signs.dm index 9e9e83928c54..fc2a4f45a2ae 100644 --- a/code/game/objects/structures/landing_signs.dm +++ b/code/game/objects/structures/landing_signs.dm @@ -59,3 +59,8 @@ name = "Chigusa Shipyard Sign" desc = "A large sign that reads 'Chigusa Shipyard - Subsidary of Weyland-Yutani Corporation'. Acid burns checker the sign like buckshot." icon_state = "laz_sign" //TODO make unique icon. + +/obj/structure/lz_sign/rodansk_sign + name = "Rosansk Sign" + desc = "A large sign that reads 'Rosansk'. It's crumbling." + icon_state = "rosansk_sign" diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index 8c03a4dbd66c..d0748b73505c 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -67,6 +67,16 @@ desc = "An old cargo truck, seems to be broken down." icon_state = "truck_cargo" +/obj/structure/prop/dam/truck/upp + name = "UPP truck" + desc = "An old truck used by the UPP. You don't have the keys for it." + icon_state = "truck_upp" + +/obj/structure/prop/dam/truck/upp/mining + name = "UPP mining truck" + desc = "AN old truck used by the UPP. This one is carrying various mining equipment for fluid extraction. You don't have the keys for it." + icon_state = "truck_upp_mining" + /obj/structure/prop/dam/van name = "van" desc = "An old van, seems to be broken down." @@ -80,6 +90,11 @@ /obj/structure/prop/dam/van/damaged icon_state = "van_damaged" +/obj/structure/prop/dam/van/ambulance + name = "Ambulance truck" + desc = "An ambulance, probably used by some hospital nearby. You don't have the keys for it." + icon_state = "van_ambulance" + /obj/structure/prop/dam/crane name = "cargo crane" icon = 'icons/obj/structures/props/vehicles.dmi' diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index e19d190c7442..74220235faf8 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -107,6 +107,18 @@ desc = "This banner depicts Delta Squad's motto. The Marines of Delta Squad adopted it after picking an old bomber movie for movie night a while back." icon_state = "maximumeffort" +//============// +// Flags // +//==========// + +/obj/structure/sign/flag + icon = 'icons/obj/structures/props/flags.dmi' + +/obj/structure/sign/flag/upp + name = "\improper Union of Progressive Peoples Flag" + desc = "Unity through Strength, Freedom through Unity" + icon_state = "upp_flag" + //=====================// // SEMIOTIC STANDARD // //===================// diff --git a/code/modules/clothing/suits/marine_armor/_marine_armor.dm b/code/modules/clothing/suits/marine_armor/_marine_armor.dm index fd926c4ffd50..e5b12e7aed26 100644 --- a/code/modules/clothing/suits/marine_armor/_marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor/_marine_armor.dm @@ -48,13 +48,13 @@ max_heat_protection_temperature = HELMET_MAX_HEAT_PROT blood_overlay_type = "armor" armor_melee = CLOTHING_ARMOR_MEDIUM - armor_bullet = CLOTHING_ARMOR_MEDIUM + armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH armor_laser = CLOTHING_ARMOR_MEDIUMLOW armor_energy = CLOTHING_ARMOR_NONE - armor_bomb = CLOTHING_ARMOR_MEDIUMLOW + armor_bomb = CLOTHING_ARMOR_MEDIUM armor_bio = CLOTHING_ARMOR_MEDIUM armor_rad = CLOTHING_ARMOR_MEDIUMLOW - armor_internaldamage = CLOTHING_ARMOR_MEDIUM + armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH movement_compensation = SLOWDOWN_ARMOR_LIGHT storage_slots = 3 siemens_coefficient = 0.7 @@ -425,11 +425,11 @@ armor_variation = 6 slowdown = SLOWDOWN_ARMOR_LIGHT armor_melee = CLOTHING_ARMOR_MEDIUMLOW - armor_bullet = CLOTHING_ARMOR_MEDIUMLOW - armor_bomb = CLOTHING_ARMOR_MEDIUM + armor_bullet = CLOTHING_ARMOR_MEDIUM + armor_bomb = CLOTHING_ARMOR_MEDIUMLOW armor_bio = CLOTHING_ARMOR_MEDIUMLOW armor_rad = CLOTHING_ARMOR_MEDIUMHIGH - armor_internaldamage = CLOTHING_ARMOR_LOW + armor_internaldamage = CLOTHING_ARMOR_MEDIUM storage_slots = 2 /obj/item/clothing/suit/storage/marine/light/padded @@ -530,11 +530,11 @@ icon_state = "H1" armor_variation = 6 armor_melee = CLOTHING_ARMOR_MEDIUMHIGH - armor_bullet = CLOTHING_ARMOR_HIGHPLUS - armor_bomb = CLOTHING_ARMOR_HIGHPLUS + armor_bullet = CLOTHING_ARMOR_HIGH + armor_bomb = CLOTHING_ARMOR_HIGH armor_bio = CLOTHING_ARMOR_MEDIUMHIGH armor_rad = CLOTHING_ARMOR_MEDIUM - armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH + armor_internaldamage = CLOTHING_ARMOR_HIGH storage_slots = 2 slowdown = SLOWDOWN_ARMOR_LOWHEAVY movement_compensation = SLOWDOWN_ARMOR_MEDIUM diff --git a/code/modules/clothing/suits/marine_armor/ert.dm b/code/modules/clothing/suits/marine_armor/ert.dm index 19009606db35..0d0c7bbef940 100644 --- a/code/modules/clothing/suits/marine_armor/ert.dm +++ b/code/modules/clothing/suits/marine_armor/ert.dm @@ -268,11 +268,11 @@ name = "\improper UM5 personal armor" desc = "Standard body armor of the UPP military, the UM5 (Union Medium MK5) is a medium body armor, roughly on par with the M3 pattern body armor in service with the USCM, specialized towards ballistics protection. Unlike the M3, however, the plate has a heavier neckplate. This has earned many UA members to refer to UPP soldiers as 'tin men'." icon_state = "upp_armor" - armor_bullet = CLOTHING_ARMOR_HIGH + armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH armor_energy = CLOTHING_ARMOR_MEDIUM armor_bio = CLOTHING_ARMOR_MEDIUMLOW armor_rad = CLOTHING_ARMOR_MEDIUMLOW - armor_internaldamage = CLOTHING_ARMOR_HIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH storage_slots = 1 uniform_restricted = list(/obj/item/clothing/under/marine/veteran/UPP, /obj/item/clothing/under/marine/veteran/UPP/medic, /obj/item/clothing/under/marine/veteran/UPP/engi) @@ -284,9 +284,10 @@ slowdown = SLOWDOWN_ARMOR_LIGHT armor_melee = CLOTHING_ARMOR_HIGH armor_energy = CLOTHING_ARMOR_MEDIUM + armor_bomb = CLOTHING_ARMOR_MEDIUMLOW armor_bio = CLOTHING_ARMOR_MEDIUMLOW armor_rad = CLOTHING_ARMOR_MEDIUMLOW - armor_internaldamage = CLOTHING_ARMOR_HIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH /obj/item/clothing/suit/storage/marine/faction/UPP/commando name = "\improper UM5CU personal armor" @@ -310,7 +311,7 @@ armor_bomb = CLOTHING_ARMOR_HIGH armor_bio = CLOTHING_ARMOR_MEDIUM armor_rad = CLOTHING_ARMOR_MEDIUMLOW - armor_internaldamage = CLOTHING_ARMOR_HIGHPLUS + armor_internaldamage = CLOTHING_ARMOR_HIGH /obj/item/clothing/suit/storage/marine/faction/UPP/heavy/Initialize() . = ..() diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index d99da8f59f2c..ec79b3be478f 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -258,12 +258,8 @@ specialist_assignment = "Sniper" user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER) if("Scout") - spec_box = new /obj/item/storage/box/spec/scout(T) - specialist_assignment = "Scout" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT) - //this is to be able to use C4s that are coming with the kit - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) - user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) + to_chat(user, SPAN_WARNING("Nuh uh. No scout on HvH.")) + return if("Demo") spec_box = new /obj/item/storage/box/spec/demolitionist(T) specialist_assignment = "Demo" diff --git a/code/modules/cm_marines/m2c.dm b/code/modules/cm_marines/m2c.dm index dea7d80b50f9..8dd3481b2664 100644 --- a/code/modules/cm_marines/m2c.dm +++ b/code/modules/cm_marines/m2c.dm @@ -6,6 +6,7 @@ #define M2C_LOW_COOLDOWN_ROLL 0.3 #define M2C_HIGH_COOLDOWN_ROLL 0.45 #define M2C_PASSIVE_COOLDOWN_AMOUNT 4 +#define T37_PASSIVE_COOLDOWN_AMOUNT 3 #define M2C_OVERHEAT_OVERLAY 14 #define M2C_CRUSHER_STUN 3 //amount in ticks (roughly 3 seconds) @@ -23,6 +24,16 @@ default_ammo = /datum/ammo/bullet/machinegun/auto gun_type = null +/obj/item/ammo_magazine/m2c/t37 + name = "T37 Ammunition Box (7.62x54mmR rounds)" + desc = "A box of 125, 7.62x54mmR rounds for the UPP T37 Medium Machinegun System. Click the heavy machinegun while there's no ammo box loaded to reload the T37." + caliber = "7.62x54mmR" + icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi' + icon_state = "t37" + item_state = "t37" + max_rounds = 150 + default_ammo = /datum/ammo/bullet/machinegun/auto/medium + //STORAGE BOX FOR THE MACHINEGUN /obj/item/storage/box/m56d/m2c name = "\improper M2C Assembly-Supply Crate" @@ -199,6 +210,7 @@ display_ammo = FALSE var/list/cadeblockers = list() var/cadeblockers_range = 1 + var/stationary = FALSE var/static/image/barrel_overheat_image var/has_barrel_overlay = FALSE @@ -209,6 +221,7 @@ // OVERHEAT MECHANIC VARIABLES var/overheat_value = 0 var/overheat_threshold = 40 + var/passive_cooldown = M2C_PASSIVE_COOLDOWN_AMOUNT var/emergency_cooling = FALSE var/overheat_text_cooldown = 0 var/force_cooldown_timer = 10 @@ -245,7 +258,7 @@ /obj/structure/machinery/m56d_hmg/auto/process() var/mob/user = operator - overheat_value -= M2C_PASSIVE_COOLDOWN_AMOUNT + overheat_value -= passive_cooldown if(overheat_value <= 0) overheat_value = 0 STOP_PROCESSING(SSobj, src) @@ -464,6 +477,9 @@ return if(over_object == user && in_range(src, user)) + if(stationary) + to_chat(user, SPAN_WARNING("You cannot disassemble the [src], it is stationary!")) + return if((rounds > 0) && (user.a_intent & (INTENT_GRAB))) playsound(src.loc, 'sound/items/m56dauto_load.ogg', 75, 1) user.visible_message(SPAN_NOTICE(" [user] removes [src]'s ammo box."),SPAN_NOTICE(" You remove [src]'s ammo box, preparing the gun for disassembly.")) @@ -590,6 +606,95 @@ rotate_to(user, target) return TRUE +/obj/structure/machinery/m56d_hmg/auto/t37 + name = "\improper T37 Medium Machinegun" + desc = "A deployable, medium machine gun. The T37 is a UPP machinegun that fires 7.62x64mmR rounds. Unlike the USCM M2C counterpart, it has a much slower firerate in favor of sustained fire. Due to the quality of the design, it has a tendency to explode if it sustains too much damage. Click its sprite while behind it without holding anything to man it. Click-drag on NON-GRAB intent to disassemble the gun, GRAB INTENT to remove ammo magazines." + icon_state = "t37" + icon_full = "t37" + icon_empty = "t37_e" + rounds_max = 150 + ammo = /datum/ammo/bullet/machinegun/auto/medium + fire_delay = 0.35 SECONDS + grip_dir = null + stationary = TRUE + + // OVERHEAT MECHANIC VARIABLES + overheat_threshold = 20 + passive_cooldown = T37_PASSIVE_COOLDOWN_AMOUNT + + var/explosion_chance = 70 + var/explosion_power = 65 + var/explosion_falloff = 25 + var/falloff_mode = EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL + +/obj/structure/machinery/m56d_hmg/auto/t37/update_health(amount) + health -= amount + if(health <= 0) + if(prob(explosion_chance)) + var/cause_data = create_cause_data(src.name) + visible_message(SPAN_HIGHDANGER("[src] explodes into pieces!")) + cell_explosion(loc, explosion_power, explosion_falloff, falloff_mode, null, cause_data) + playsound(src.loc, 'sound/items/Welder2.ogg', 25, 1) + qdel(src) + return + else + ..() + +/obj/structure/machinery/m56d_hmg/auto/handle_ammo_out(mob/user) + visible_message(SPAN_NOTICE("[icon2html(src, viewers(src))] [src]'s ammo box drops onto the ground, now completely empty.")) + playsound(loc, empty_alarm, 70, 1) + update_icon() //final safeguard. + var/obj/item/ammo_magazine/m2c/t37/AM = new /obj/item/ammo_magazine/m2c/t37(src.loc) + AM.current_rounds = 0 + AM.update_icon() + +/obj/structure/machinery/m56d_hmg/auto/attackby(obj/item/O as obj, mob/user as mob) + if(!ishuman(user)) + return + // RELOADING + if(istype(O, /obj/item/ammo_magazine/m2c/t37)) + var/obj/item/ammo_magazine/m2c/t37/M = O + if(rounds) + to_chat(user, SPAN_WARNING("There's already an ammo box inside of [src], remove it first!")) + return + if(user.action_busy) return + user.visible_message(SPAN_NOTICE("[user] loads [src] with an ammo box! "), SPAN_NOTICE("You load [src] with an ammo box!")) + playsound(src.loc, 'sound/items/m56dauto_load.ogg', 75, 1) + rounds = min(rounds + M.current_rounds, rounds_max) + update_icon() + user.temp_drop_inv_item(O) + qdel(O) + return + + // WELDER REPAIR + if(iswelder(O)) + if(!HAS_TRAIT(O, TRAIT_TOOL_BLOWTORCH)) + to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) + return + if(user.action_busy) + return + + var/obj/item/tool/weldingtool/WT = O + + if(health == health_max) + to_chat(user, SPAN_WARNING("[src] doesn't need repairs, it's well-maintained.")) + return + + if(WT.remove_fuel(2, user)) + user.visible_message(SPAN_NOTICE("[user] begins repairing damage on \the [src]."), \ + SPAN_NOTICE("You begin repairing the damage on \the [src].")) + playsound(src.loc, 'sound/items/Welder2.ogg', 25, 1) + if(!do_after(user, repair_time * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_ALL, BUSY_ICON_FRIENDLY, src)) + return + user.visible_message(SPAN_NOTICE("[user] repairs some of the damage on [src]."), \ + SPAN_NOTICE("You repair [src].")) + update_health(-round(health_max*0.2)) + playsound(src.loc, 'sound/items/Welder2.ogg', 25, 1) + else + to_chat(user, SPAN_WARNING("You need more fuel in [WT] to repair damage to [src].")) + return + return + #undef M2C_OVERHEAT_CRITICAL #undef M2C_OVERHEAT_BAD #undef M2C_OVERHEAT_OK diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index e73db8431f32..64e24ea99efb 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -1236,9 +1236,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -1396,9 +1393,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -1557,9 +1551,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -1718,9 +1709,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -1879,9 +1867,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -2040,9 +2025,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -2201,9 +2183,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -2362,9 +2341,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -2523,9 +2499,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -3005,9 +2978,6 @@ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_RECOMMENDED), list("Sandbags x25", 5, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -3175,9 +3145,6 @@ list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR), list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), @@ -3328,9 +3295,6 @@ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY), - list("SPECIAL AMMUNITION", 0, null, null, null), - list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR), - list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), diff --git a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm index 170bb539bc73..e055d5985d4c 100644 --- a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm @@ -497,6 +497,18 @@ /obj/item/ammo_box/magazine/m2c/empty empty = TRUE +/obj/item/ammo_box/magazine/m2c/t37 + name = "\improper ammo box (T37 x 8)" + icon_state = "base_t37" + overlay_ammo_type = "" + overlay_gun_type = "_t37" + overlay_content = "_t37" + magazine_type = /obj/item/ammo_magazine/m2c/t37 + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m2c/t37/empty + empty = TRUE + //-----------------------M41AE2 Ammo Box----------------------- /obj/item/ammo_box/magazine/m41ae2 diff --git a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi index 8655a8bfcf2c..1da830acae49 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi b/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi index ff0c6d60d4ac..12c670f211e2 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi index 5632ca31481e..25e7e7527bbd 100644 Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi differ diff --git a/icons/obj/structures/props/flags.dmi b/icons/obj/structures/props/flags.dmi new file mode 100644 index 000000000000..a162da6585c2 Binary files /dev/null and b/icons/obj/structures/props/flags.dmi differ diff --git a/icons/obj/structures/props/landing_signs.dmi b/icons/obj/structures/props/landing_signs.dmi index 95d538c73a86..bc4b36c957bb 100644 Binary files a/icons/obj/structures/props/landing_signs.dmi and b/icons/obj/structures/props/landing_signs.dmi differ diff --git a/icons/obj/structures/props/vehicles.dmi b/icons/obj/structures/props/vehicles.dmi index e21dfb29d6b0..9ad663711bc3 100644 Binary files a/icons/obj/structures/props/vehicles.dmi and b/icons/obj/structures/props/vehicles.dmi differ diff --git a/icons/turf/floors/desertdam_map.dmi b/icons/turf/floors/desertdam_map.dmi index c7e1a98e6073..d37d3210418b 100644 Binary files a/icons/turf/floors/desertdam_map.dmi and b/icons/turf/floors/desertdam_map.dmi differ diff --git a/icons/turf/whiskeyoutpost.dmi b/icons/turf/whiskeyoutpost.dmi index 17368f0b2d8f..5a078d8aa683 100644 Binary files a/icons/turf/whiskeyoutpost.dmi and b/icons/turf/whiskeyoutpost.dmi differ