diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index e2c89df90e..4766b3dfe6 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,18 +1,19 @@ // tgstation-server DMAPI +// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "7.1.2" +#define TGS_DMAPI_VERSION "7.2.1" // All functions and datums outside this document are subject to change with any version and should not be relied on. // CONFIGURATION -/// Create this define if you want to do TGS configuration outside of this file. +/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file. #ifndef TGS_EXTERNAL_CONFIGURATION -// Comment this out once you've filled in the below. +// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION]. #error TGS API unconfigured -// Uncomment this if you wish to allow the game to interact with TGS 3.. +// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3. // This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()(). //#define TGS_V3_API @@ -52,7 +53,7 @@ #ifndef TGS_FILE2TEXT_NATIVE #ifdef file2text -#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You can fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses #endif #define TGS_FILE2TEXT_NATIVE file2text #endif @@ -152,16 +153,17 @@ //REQUIRED HOOKS /** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep! * * * event_handler - Optional user defined [/datum/tgs_event_handler]. * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + * * http_handler - Optional user defined [/datum/tgs_http_handler]. */ -/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler) return /** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen. * * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 @@ -170,12 +172,10 @@ /world/proc/TgsInitializationComplete() return -/// Put this at the start of [/world/proc/Topic]. +/// Consumers MUST run this macro at the start of [/world/proc/Topic]. #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return -/** - * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()). - */ +/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()). /world/proc/TgsReboot() return @@ -269,7 +269,7 @@ /// The [/datum/tgs_chat_channel] the user was from. var/datum/tgs_chat_channel/channel -/// User definable handler for TGS events. +/// User definable handler for TGS events This abstract version SHOULD be overridden to be used. /datum/tgs_event_handler /// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events. var/receive_health_checks = FALSE @@ -283,7 +283,41 @@ set waitfor = FALSE return -/// User definable chat command. +/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used. +/datum/tgs_http_handler + +/** + * User definable callback for executing HTTP GET requests. + * MUST perform BYOND sleeps while the request is in flight. + * MUST return a [/datum/tgs_http_result]. + * SHOULD log its own errors + * + * url - The full URL to execute the GET request for including query parameters. + */ +/datum/tgs_http_handler/proc/PerformGet(url) + CRASH("[type]/PerformGet not implemented!") + +/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden. +/datum/tgs_http_result + /// HTTP response as text + var/response_text + /// Boolean request success flag. Set for any 2XX response code. + var/success + +/** + * Create a [/datum/tgs_http_result]. + * + * * response_text - HTTP response as text. Must be provided in New(). + * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New(). + */ +/datum/tgs_http_result/New(response_text, success) + if(response_text && !istext(response_text)) + CRASH("response_text was not text!") + + src.response_text = response_text + src.success = success + +/// User definable chat command. This abstract version MUST be overridden to be used. /datum/tgs_chat_command /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`. var/name = "" @@ -296,21 +330,27 @@ /** * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. + * MUST be implemented * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + * * sender - The [/datum/tgs_chat_user] who issued the command. + * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. */ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") -/// User definable chat message. +/// User definable chat message. MUST NOT be overridden. /datum/tgs_message_content - /// The tring content of the message. Must be provided in New(). + /// The string content of the message. Must be provided in New(). var/text /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. var/datum/tgs_chat_embed/structure/embed +/** + * Create a [/datum/tgs_message_content]. + * + * * text - The string content of the message. + */ /datum/tgs_message_content/New(text) ..() if(!istext(text)) @@ -319,7 +359,7 @@ src.text = text -/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details. /datum/tgs_chat_embed/structure var/title var/description @@ -331,13 +371,13 @@ /// Colour must be #AARRGGBB or #RRGGBB hex string. var/colour - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details. var/datum/tgs_chat_embed/media/image - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details. var/datum/tgs_chat_embed/media/thumbnail - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details. var/datum/tgs_chat_embed/media/video var/datum/tgs_chat_embed/footer/footer @@ -346,7 +386,7 @@ var/list/datum/tgs_chat_embed/field/fields -/// Common datum for similar discord embed medias. +/// Common datum for similar Discord embed medias. /datum/tgs_chat_embed/media /// Must be set in New(). var/url @@ -354,6 +394,7 @@ var/height var/proxy_url +/// Create a [/datum/tgs_chat_embed]. /datum/tgs_chat_embed/media/New(url) ..() if(!istext(url)) @@ -361,13 +402,14 @@ src.url = url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details. /datum/tgs_chat_embed/footer /// Must be set in New(). var/text var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/footer/New(text) ..() if(!istext(text)) @@ -375,16 +417,17 @@ src.text = text -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details. /datum/tgs_chat_embed/provider var/name var/url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New(). /datum/tgs_chat_embed/provider/author var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/provider/author/New(name) ..() if(!istext(name)) @@ -392,12 +435,15 @@ src.name = name -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details. /datum/tgs_chat_embed/field + /// Must be set in New(). var/name + /// Must be set in New(). var/value var/is_inline +/// Create a [/datum/tgs_chat_embed/field]. /datum/tgs_chat_embed/field/New(name, value) ..() if(!istext(name)) diff --git a/code/__DEFINES/xeno_ai.dm b/code/__DEFINES/xeno_ai.dm index 9095f56ad9..d7cbe1bf22 100644 --- a/code/__DEFINES/xeno_ai.dm +++ b/code/__DEFINES/xeno_ai.dm @@ -13,6 +13,7 @@ #define FIRE_PENALTY 25 #define SENTRY_PENALTY 25 #define VEHICLE_PENALTY 25 +#define LOCKED_DOOR_PENALTY 25 #define WINDOW_FRAME_PENALTY 25 #define BARRICADE_PENALTY 50 #define WALL_PENALTY 100 diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index d3cb19c40e..886799be34 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -119,6 +119,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/request_start() if(current_state == GAME_STATE_PREGAME) time_left = 0 + delay_start = FALSE // Killswitch if hanging or interrupted if(SSnightmare.stat != NIGHTMARE_STATUS_DONE) diff --git a/code/datums/ammo/bullet/special_ammo.dm b/code/datums/ammo/bullet/special_ammo.dm index 0bf79ff4f0..3a592fc8b2 100644 --- a/code/datums/ammo/bullet/special_ammo.dm +++ b/code/datums/ammo/bullet/special_ammo.dm @@ -104,9 +104,9 @@ icon_state = "bullet" // Keeping it bog standard with the turret but allows it to be changed accurate_range = 12 - damage = 35 + damage = 40 penetration= ARMOR_PENETRATION_TIER_10 //Bumped the penetration to serve a different role from sentries, MGs are a bit more offensive - accuracy = HIT_ACCURACY_TIER_3 + accuracy = HIT_ACCURACY_TIER_5 /datum/ammo/bullet/machinegun/set_bullet_traits() . = ..() diff --git a/code/game/jobs/job/antag/xeno/queen.dm b/code/game/jobs/job/antag/xeno/queen.dm index 5702f9b1a6..62425e38b8 100644 --- a/code/game/jobs/job/antag/xeno/queen.dm +++ b/code/game/jobs/job/antag/xeno/queen.dm @@ -17,9 +17,3 @@ to_chat(new_queen, "Your job is to spread the hive.") to_chat(new_queen, "You should start by building a hive core.") to_chat(new_queen, "Talk in Hivemind using ; (e.g. ';Hello my children!')") - -AddTimelock(/datum/job/antag/xenos/queen, list( - JOB_XENO_ROLES = 10 HOURS, - JOB_DRONE_ROLES = 5 HOURS, - JOB_T3_ROLES = 3 HOURS, -)) diff --git a/code/game/jobs/job/civilians/other/liaison.dm b/code/game/jobs/job/civilians/other/liaison.dm index cbbb871249..d34c5fd6bc 100644 --- a/code/game/jobs/job/civilians/other/liaison.dm +++ b/code/game/jobs/job/civilians/other/liaison.dm @@ -22,7 +22,3 @@ name = JOB_CORPORATE_LIAISON icon_state = "cl_spawn" job = /datum/job/civilian/liaison - -AddTimelock(/datum/job/civilian/liaison, list( - JOB_HUMAN_ROLES = 10 HOURS, -)) diff --git a/code/game/jobs/job/civilians/other/reporter.dm b/code/game/jobs/job/civilians/other/reporter.dm index c681768f93..d3883f4742 100644 --- a/code/game/jobs/job/civilians/other/reporter.dm +++ b/code/game/jobs/job/civilians/other/reporter.dm @@ -33,7 +33,3 @@ This could be the story of the sector! 'Brave Marines responding to dangerous di /obj/effect/landmark/start/reporter name = JOB_COMBAT_REPORTER job = /datum/job/civilian/reporter - -AddTimelock(/datum/job/civilian/reporter, list( - JOB_HUMAN_ROLES = 10 HOURS, -)) diff --git a/code/game/jobs/job/civilians/other/survivors.dm b/code/game/jobs/job/civilians/other/survivors.dm index 07598483b8..685ca3d968 100644 --- a/code/game/jobs/job/civilians/other/survivors.dm +++ b/code/game/jobs/job/civilians/other/survivors.dm @@ -139,12 +139,6 @@ SSticker.mode.survivors_by_type_amounts[preferred_variant] += 1 -AddTimelock(/datum/job/civilian/survivor, list( - JOB_SQUAD_ROLES = 5 HOURS, - JOB_ENGINEER_ROLES = 5 HOURS, - JOB_MEDIC_ROLES = 5 HOURS -)) - /datum/job/civilian/survivor/synth title = JOB_SYNTH_SURVIVOR selection_class = "job_synth" diff --git a/code/game/jobs/job/civilians/support/cmo.dm b/code/game/jobs/job/civilians/support/cmo.dm index 835f16f7d8..930c1eb492 100644 --- a/code/game/jobs/job/civilians/support/cmo.dm +++ b/code/game/jobs/job/civilians/support/cmo.dm @@ -8,10 +8,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/cmo entry_message_body = "You're a commissioned officer of the USCM. You have authority over everything related to Medbay and Research, only able to be overriden by the XO and CO. You are in charge of medical staff, surgery, chemistry, stimulants and keeping the marines healthy overall." -AddTimelock(/datum/job/civilian/professor, list( - JOB_MEDIC_ROLES = 10 HOURS -)) - /obj/effect/landmark/start/professor name = JOB_CMO icon_state = "cmo_spawn" diff --git a/code/game/jobs/job/civilians/support/doctor.dm b/code/game/jobs/job/civilians/support/doctor.dm index ff1b2146be..7c05985b23 100644 --- a/code/game/jobs/job/civilians/support/doctor.dm +++ b/code/game/jobs/job/civilians/support/doctor.dm @@ -51,10 +51,6 @@ total_positions_so_far = positions return positions -AddTimelock(/datum/job/civilian/doctor, list( - JOB_MEDIC_ROLES = 1 HOURS -)) - /obj/effect/landmark/start/doctor name = JOB_DOCTOR icon_state = "doc_spawn" diff --git a/code/game/jobs/job/civilians/support/nurse.dm b/code/game/jobs/job/civilians/support/nurse.dm index 8912011298..1848dd9d93 100644 --- a/code/game/jobs/job/civilians/support/nurse.dm +++ b/code/game/jobs/job/civilians/support/nurse.dm @@ -12,7 +12,3 @@ name = JOB_NURSE icon_state = "nur_spawn" job = /datum/job/civilian/nurse - -AddTimelock(/datum/job/civilian/nurse, list( - JOB_HUMAN_ROLES = 1 HOURS -)) diff --git a/code/game/jobs/job/civilians/support/researcher.dm b/code/game/jobs/job/civilians/support/researcher.dm index 21163f2795..cd875cf550 100644 --- a/code/game/jobs/job/civilians/support/researcher.dm +++ b/code/game/jobs/job/civilians/support/researcher.dm @@ -27,10 +27,6 @@ total_positions_so_far = positions return positions -AddTimelock(/datum/job/civilian/researcher, list( - JOB_MEDIC_ROLES = 5 HOURS -)) - /obj/effect/landmark/start/researcher name = JOB_RESEARCHER icon_state = "res_spawn" diff --git a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm index 5f62930003..8adc20786a 100644 --- a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm +++ b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm @@ -7,13 +7,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/auxiliary_officer entry_message_body = "Your job is to oversee the hangar crew, the intel officers, the engineering department, and requisition department. You have many responsibilities and a few plates to keep spinning but your subordinates are mostly self-reliant. Assist where you can and make sure command personnel are confident the auxiliary departments are operating at peak efficiency." -AddTimelock(/datum/job/command/auxiliary_officer, list( - JOB_SQUAD_ROLES = 5 HOURS, - JOB_REQUISITION_ROLES = 5 HOURS, - JOB_ENGINEER_ROLES = 5 HOURS, - JOB_AUXILIARY_ROLES = 5 HOURS, -)) - /obj/effect/landmark/start/auxiliary_officer name = JOB_AUXILIARY_OFFICER job = /datum/job/command/auxiliary_officer diff --git a/code/game/jobs/job/command/auxiliary/crew_chief.dm b/code/game/jobs/job/command/auxiliary/crew_chief.dm index 0770bcd60f..9c2f7522b8 100644 --- a/code/game/jobs/job/command/auxiliary/crew_chief.dm +++ b/code/game/jobs/job/command/auxiliary/crew_chief.dm @@ -9,10 +9,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/dcc entry_message_body = "Your job is to assist the pilot officer maintain the ship's dropship. You have authority only on the dropship, but you are expected to maintain order, as not to disrupt the pilot." -AddTimelock(/datum/job/command/crew_chief, list( - JOB_SQUAD_ROLES = 5 HOURS -)) - /obj/effect/landmark/start/crew_chief name = JOB_DROPSHIP_CREW_CHIEF icon_state = "dcc_spawn" diff --git a/code/game/jobs/job/command/auxiliary/intel.dm b/code/game/jobs/job/command/auxiliary/intel.dm index 9905bc9d37..b216d40dff 100644 --- a/code/game/jobs/job/command/auxiliary/intel.dm +++ b/code/game/jobs/job/command/auxiliary/intel.dm @@ -23,10 +23,6 @@ total_positions_so_far = positions return positions -AddTimelock(/datum/job/command/intel, list( - JOB_SQUAD_ROLES = 5 HOURS -)) - /obj/effect/landmark/start/intel name = JOB_INTEL icon_state = "io_spawn" diff --git a/code/game/jobs/job/command/auxiliary/pilot.dm b/code/game/jobs/job/command/auxiliary/pilot.dm index 1a7a7c21d5..f03ef877d9 100644 --- a/code/game/jobs/job/command/auxiliary/pilot.dm +++ b/code/game/jobs/job/command/auxiliary/pilot.dm @@ -9,11 +9,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/po entry_message_body = "Your job is to fly, protect, and maintain the ship's dropship. While you are an officer, your authority is limited to the dropship, where you have authority over the enlisted personnel. If you are not piloting, there is an autopilot fallback for command, but don't leave the dropship without reason." -// Dropship Roles is both PO and DCC combined to not force people to backtrack -AddTimelock(/datum/job/command/pilot, list( - JOB_DROPSHIP_ROLES = 2 HOURS -)) - /obj/effect/landmark/start/pilot name = JOB_PILOT icon_state = "po_spawn" diff --git a/code/game/jobs/job/command/auxiliary/senior.dm b/code/game/jobs/job/command/auxiliary/senior.dm index 014db9569b..308279199e 100644 --- a/code/game/jobs/job/command/auxiliary/senior.dm +++ b/code/game/jobs/job/command/auxiliary/senior.dm @@ -27,16 +27,6 @@ return filtered_job_options -AddTimelock(/datum/job/command/senior, list( - JOB_SQUAD_ROLES = 15 HOURS, - - JOB_ENGINEER_ROLES = 10 HOURS, - JOB_POLICE_ROLES = 10 HOURS, - JOB_MEDIC_ROLES = 10 HOURS, - - JOB_COMMAND_ROLES = 5 HOURS, -)) - /obj/effect/landmark/start/senior name = JOB_SEA icon_state = "sea_spawn" diff --git a/code/game/jobs/job/command/cic/executive.dm b/code/game/jobs/job/command/cic/executive.dm index f717a03e12..0407215829 100644 --- a/code/game/jobs/job/command/cic/executive.dm +++ b/code/game/jobs/job/command/cic/executive.dm @@ -17,10 +17,6 @@ SIGNAL_HANDLER GLOB.marine_leaders -= JOB_XO -AddTimelock(/datum/job/command/executive, list( - JOB_COMMAND_ROLES = 5 HOURS, -)) - /obj/effect/landmark/start/executive name = JOB_XO icon_state = "xo_spawn" diff --git a/code/game/jobs/job/command/cic/staffofficer.dm b/code/game/jobs/job/command/cic/staffofficer.dm index 8e4e7c0cfa..c9c1cf7d8a 100644 --- a/code/game/jobs/job/command/cic/staffofficer.dm +++ b/code/game/jobs/job/command/cic/staffofficer.dm @@ -39,9 +39,8 @@ else gear_preset = initial(gear_preset) -AddTimelock(/datum/job/command/bridge, list( - JOB_SQUAD_LEADER = 1 HOURS, - JOB_HUMAN_ROLES = 15 HOURS +OverrideTimelock(/datum/job/command/bridge, list( + JOB_SQUAD_ROLES = 1 HOURS )) /obj/effect/landmark/start/bridge diff --git a/code/game/jobs/job/command/police/chief_police.dm b/code/game/jobs/job/command/police/chief_police.dm index 63e6d8023f..3cec89ee64 100644 --- a/code/game/jobs/job/command/police/chief_police.dm +++ b/code/game/jobs/job/command/police/chief_police.dm @@ -6,11 +6,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/cmp entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. You lead the Military Police, ensure your officers maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" -AddTimelock(/datum/job/command/warrant, list( - JOB_POLICE_ROLES = 15 HOURS, - JOB_COMMAND_ROLES = 5 HOURS -)) - /obj/effect/landmark/start/warrant name = JOB_CHIEF_POLICE icon_state = "cmp_spawn" diff --git a/code/game/jobs/job/command/police/police.dm b/code/game/jobs/job/command/police/police.dm index e05bc2e962..95eaf7c1b9 100644 --- a/code/game/jobs/job/command/police/police.dm +++ b/code/game/jobs/job/command/police/police.dm @@ -25,10 +25,6 @@ total_positions_so_far = positions return positions -AddTimelock(/datum/job/command/police, list( - JOB_SQUAD_ROLES = 10 HOURS -)) - /obj/effect/landmark/start/police name = JOB_POLICE icon_state = "mp_spawn" diff --git a/code/game/jobs/job/command/police/warden.dm b/code/game/jobs/job/command/police/warden.dm index d2775e1975..50e1a36ce8 100644 --- a/code/game/jobs/job/command/police/warden.dm +++ b/code/game/jobs/job/command/police/warden.dm @@ -7,10 +7,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/warden entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the mainting security records and overwatching any prisoners in Brig." -AddTimelock(/datum/job/command/warden, list( - JOB_POLICE_ROLES = 10 HOURS -)) - /obj/effect/landmark/start/warden name = JOB_WARDEN icon_state = "wmp_spawn" diff --git a/code/game/jobs/job/logistics/cargo/chief_req.dm b/code/game/jobs/job/logistics/cargo/chief_req.dm index 5d5123e687..6fbf6b8864 100644 --- a/code/game/jobs/job/logistics/cargo/chief_req.dm +++ b/code/game/jobs/job/logistics/cargo/chief_req.dm @@ -5,10 +5,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/qm entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Your cargo techs can help you out, but you have final say in your department. Make sure they're not goofing off. While you may request paperwork for supplies, do not go out of your way to screw with marines, unless you want to get deposed. A happy ship is a well-functioning ship." -AddTimelock(/datum/job/logistics/requisition, list( - JOB_REQUISITION_ROLES = 10 HOURS, -)) - /obj/effect/landmark/start/requisition name = JOB_CHIEF_REQUISITION icon_state = "ro_spawn" diff --git a/code/game/jobs/job/logistics/engi/chief_engineer.dm b/code/game/jobs/job/logistics/engi/chief_engineer.dm index b6aa23f9c4..a9a18165d9 100644 --- a/code/game/jobs/job/logistics/engi/chief_engineer.dm +++ b/code/game/jobs/job/logistics/engi/chief_engineer.dm @@ -5,10 +5,6 @@ gear_preset = /datum/equipment_preset/uscm_ship/chief_engineer entry_message_body = "Your job is to maintain your department and keep your technicians in check. You are responsible for engineering, power, ordnance, and the orbital cannon. Should the commanding and executive officer be unavailable, you are next in the chain of command." -AddTimelock(/datum/job/logistics/engineering, list( - JOB_ENGINEER_ROLES = 10 HOURS, -)) - /obj/effect/landmark/start/engineering name = JOB_CHIEF_ENGINEER icon_state = "ce_spawn" diff --git a/code/game/jobs/job/logistics/engi/ordnance_tech.dm b/code/game/jobs/job/logistics/engi/ordnance_tech.dm index 43a8a7122a..df55013cda 100644 --- a/code/game/jobs/job/logistics/engi/ordnance_tech.dm +++ b/code/game/jobs/job/logistics/engi/ordnance_tech.dm @@ -26,10 +26,6 @@ total_positions_so_far = positions return positions -AddTimelock(/datum/job/logistics/otech, list( - JOB_ENGINEER_ROLES = 1 HOURS -)) - /obj/effect/landmark/start/otech name = JOB_ORDNANCE_TECH icon_state = "ot_spawn" diff --git a/code/game/jobs/job/marine/squad/engineer.dm b/code/game/jobs/job/marine/squad/engineer.dm index 1910248a61..5b93e5f6cf 100644 --- a/code/game/jobs/job/marine/squad/engineer.dm +++ b/code/game/jobs/job/marine/squad/engineer.dm @@ -32,10 +32,6 @@ flags_startup_parameters = ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/wo/marine/engineer -AddTimelock(/datum/job/marine/engineer, list( - JOB_SQUAD_ROLES = 1 HOURS -)) - /obj/effect/landmark/start/marine/engineer name = JOB_SQUAD_ENGI icon_state = "engi_spawn" diff --git a/code/game/jobs/job/marine/squad/leader.dm b/code/game/jobs/job/marine/squad/leader.dm index ebb0cd25a9..e856164f87 100644 --- a/code/game/jobs/job/marine/squad/leader.dm +++ b/code/game/jobs/job/marine/squad/leader.dm @@ -25,8 +25,8 @@ flags_startup_parameters = ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/wo/marine/sl -AddTimelock(/datum/job/marine/leader, list( - JOB_SQUAD_ROLES = 10 HOURS +OverrideTimelock(/datum/job/marine/leader, list( + JOB_SQUAD_ROLES = 1 HOURS )) /obj/effect/landmark/start/marine/leader diff --git a/code/game/jobs/job/marine/squad/medic.dm b/code/game/jobs/job/marine/squad/medic.dm index 02b438c048..5c379c1121 100644 --- a/code/game/jobs/job/marine/squad/medic.dm +++ b/code/game/jobs/job/marine/squad/medic.dm @@ -45,11 +45,6 @@ flags_startup_parameters = ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/wo/marine/medic -AddTimelock(/datum/job/marine/medic, list( - JOB_MEDIC_ROLES = 1 HOURS, - JOB_SQUAD_ROLES = 1 HOURS -)) - /obj/effect/landmark/start/marine/medic name = JOB_SQUAD_MEDIC icon_state = "medic_spawn" diff --git a/code/game/jobs/job/marine/squad/smartgunner.dm b/code/game/jobs/job/marine/squad/smartgunner.dm index 6c27f5ec27..861d5fd905 100644 --- a/code/game/jobs/job/marine/squad/smartgunner.dm +++ b/code/game/jobs/job/marine/squad/smartgunner.dm @@ -41,10 +41,6 @@ flags_startup_parameters = ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/wo/marine/sg -AddTimelock(/datum/job/marine/smartgunner, list( - JOB_SQUAD_ROLES = 5 HOURS -)) - /obj/effect/landmark/start/marine/smartgunner name = JOB_SQUAD_SMARTGUN icon_state = "smartgunner_spawn" diff --git a/code/game/jobs/job/marine/squad/specialist.dm b/code/game/jobs/job/marine/squad/specialist.dm index e69241cdc7..3e4d0600c2 100644 --- a/code/game/jobs/job/marine/squad/specialist.dm +++ b/code/game/jobs/job/marine/squad/specialist.dm @@ -29,10 +29,6 @@ flags_startup_parameters = ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/wo/marine/spec -AddTimelock(/datum/job/marine/specialist, list( - JOB_SQUAD_ROLES = 5 HOURS -)) - /obj/effect/landmark/start/marine/spec name = JOB_SQUAD_SPECIALIST icon_state = "spec_spawn" diff --git a/code/game/jobs/job/marine/squad/tl.dm b/code/game/jobs/job/marine/squad/tl.dm index be876dc0b3..d074dfd182 100644 --- a/code/game/jobs/job/marine/squad/tl.dm +++ b/code/game/jobs/job/marine/squad/tl.dm @@ -16,10 +16,6 @@ . = ..() spawning_human.important_radio_channels += JTAC_FREQ -AddTimelock(/datum/job/marine/tl, list( - JOB_SQUAD_ROLES = 8 HOURS -)) - /obj/effect/landmark/start/marine/tl name = JOB_SQUAD_TEAM_LEADER icon_state = "tl_spawn" diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index cda3da5e2e..568c36e2c5 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -410,10 +410,6 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li var/willing = null //We don't want to allow people to be forced into despawning. var/mob/living/M = G.grabbed_thing - if(M.stat == DEAD) //This mob is dead - to_chat(user, SPAN_WARNING("[src] immediately rejects [M]. \He passed away!")) - return - if(isxeno(M)) to_chat(user, SPAN_WARNING("There is no way [src] will accept [M]!")) return diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index da904f255c..4c9b7beb21 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -72,6 +72,13 @@ /obj/structure/machinery/door/poddoor/shutters/finish_close() operating = FALSE +/obj/structure/machinery/door/poddoor/shutters/attack_alien(mob/living/carbon/xenomorph/M) + if(density && !operating) + INVOKE_ASYNC(src, PROC_REF(pry_open), M) + return XENO_ATTACK_ACTION + else + . = ..(M) + /obj/structure/machinery/door/poddoor/shutters/almayer icon = 'icons/obj/structures/doors/blastdoors_shutters.dmi' openspeed = 4 //shorter open animation. @@ -101,13 +108,6 @@ /obj/structure/machinery/door/poddoor/shutters/almayer/containment unacidable = TRUE -/obj/structure/machinery/door/poddoor/shutters/almayer/containment/attack_alien(mob/living/carbon/xenomorph/M) - if(isqueen(M) && density && !operating) - INVOKE_ASYNC(src, PROC_REF(pry_open), M) - return XENO_ATTACK_ACTION - else - . = ..(M) - /obj/structure/machinery/door/poddoor/shutters/almayer/containment/pry_open(mob/living/carbon/xenomorph/X, time = 4 SECONDS) . = ..() if(. && !(stat & BROKEN)) diff --git a/code/game/objects/items/reagent_containers/food/drinks.dm b/code/game/objects/items/reagent_containers/food/drinks.dm index 9f88990e53..a0d0f06be1 100644 --- a/code/game/objects/items/reagent_containers/food/drinks.dm +++ b/code/game/objects/items/reagent_containers/food/drinks.dm @@ -353,7 +353,7 @@ /obj/item/reagent_container/food/drinks/flask/canteen name = "canteen" - desc = "You take a sip from your trusty USCM canteen..." + desc = "A ruggedized metal alloy flask. Can hold a good amount of water... Or other liquids." icon_state = "canteen" volume = 60 center_of_mass = "x=17;y=8" @@ -362,6 +362,12 @@ . = ..() reagents.add_reagent("water", 60) +/obj/item/reagent_container/food/drinks/flask/canteen/empty + +/obj/item/reagent_container/food/drinks/flask/canteen/empty/Initialize() + . = ..() + reagents.clear_reagents() + /obj/item/reagent_container/food/drinks/flask/detflask name = "brown leather flask" desc = "A flask with a leather band around the sides, often seen filled with whiskey and carried by rugged, gritty detectives." diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 04e765dec5..2c17f447f1 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -1696,6 +1696,39 @@ new /obj/item/ammo_magazine/smartgun(src) new /obj/item/ammo_magazine/smartgun(src) +#define MAXIMUM_MAGAZINE_COUNT 2 + +/obj/item/storage/belt/gun/smartgunner/garrow + name = "\improper M802 pattern smartgunner sidearm rig" + desc = "The M802 is a limited-issue mark of USCM load-bearing equipment, designed to carry a limited quantity of smartgun and pistol ammunition, along with a sidearm." + + //Keep a track of how many magazines are inside the belt. + var/magazines = 0 + +/obj/item/storage/belt/gun/smartgunner/garrow/can_be_inserted(obj/item/item, mob/user, stop_messages = FALSE) + . = ..() + if(magazines >= MAXIMUM_MAGAZINE_COUNT && istype(item, /obj/item/ammo_magazine/smartgun)) + if(!stop_messages) + to_chat(usr, SPAN_WARNING("[src] can't hold any more drums.")) + return FALSE + +/obj/item/storage/belt/gun/smartgunner/garrow/handle_item_insertion(obj/item/item, prevent_warning = FALSE, mob/user) + . = ..() + if(istype(item, /obj/item/ammo_magazine/smartgun)) + magazines++ + +/obj/item/storage/belt/gun/smartgunner/garrow/remove_from_storage(obj/item/item as obj, atom/new_location) + . = ..() + if(istype(item, /obj/item/ammo_magazine/smartgun)) + magazines-- + +//If a magazine disintegrates due to acid or something else while in the belt, remove it from the count. +/obj/item/storage/belt/gun/smartgunner/garrow/on_stored_atom_del(atom/movable/item) + if(istype(item, /obj/item/ammo_magazine/smartgun)) + magazines-- + +#undef MAXIMUM_MAGAZINE_COUNT + /obj/item/storage/belt/gun/smartgunner/pmc name = "\improper M802 pattern 'Dirty' smartgunner sidearm rig" desc = "A modification of the standard M802 load-bearing equipment, designed to carry smartgun ammunition and a sidearm." diff --git a/code/game/objects/items/storage/misc.dm b/code/game/objects/items/storage/misc.dm index 12f6fbb3d0..19e680a197 100644 --- a/code/game/objects/items/storage/misc.dm +++ b/code/game/objects/items/storage/misc.dm @@ -146,7 +146,7 @@ w_class = SIZE_LARGE max_w_class = SIZE_MEDIUM storage_slots = 3 - + /obj/item/storage/box/M1911_loadout/fill_preset_inventory() new /obj/item/weapon/gun/pistol/m1911(src) new /obj/item/ammo_magazine/pistol/m1911(src) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index ae476b0f73..2379837c97 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -139,6 +139,7 @@ new /obj/item/weapon/gun/smartgun(src) new /obj/item/smartgun_battery(src) new /obj/item/clothing/suit/storage/marine/smartgunner(src) + new /obj/item/storage/belt/gun/smartgunner/garrow(src) new /obj/item/ammo_magazine/smartgun(src) new /obj/item/ammo_magazine/smartgun(src) new /obj/item/ammo_magazine/smartgun(src) @@ -157,6 +158,7 @@ new /obj/item/weapon/gun/smartgun(src) new /obj/item/smartgun_battery(src) new /obj/item/clothing/suit/storage/marine/smartgunner/standard(src) + new /obj/item/storage/belt/gun/smartgunner/garrow(src) new /obj/item/ammo_magazine/smartgun(src) new /obj/item/ammo_magazine/smartgun(src) new /obj/item/ammo_magazine/smartgun(src) diff --git a/code/game/world.dm b/code/game/world.dm index c23cce5abb..f47840b52c 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -74,7 +74,10 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") initiate_minimap_icons() change_tick_lag(CONFIG_GET(number/ticklag)) - GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 + + // As of byond 515.1637 time2text now treats 0 like it does negative numbers so the hour is wrong + // We could instead use world.timezone but IMO better to not assume lummox will keep time2text in parity with it + GLOB.timezoneOffset = text2num(time2text(10,"hh")) * 36000 Master.Initialize(10, FALSE, TRUE) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 4d1f4ba083..704d633424 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -333,6 +333,7 @@ var/list/roundstart_mod_verbs = list( add_verb(src, /client/proc/open_resin_panel) add_verb(src, /client/proc/open_sound_panel) add_verb(src, /client/proc/toggle_join_xeno) + add_verb(src, /client/proc/admin_marine_announcement) add_verb(src, /client/proc/game_master_rename_platoon) add_verb(src, /client/proc/toggle_vehicle_blockers) add_verb(src, /client/proc/toggle_ai_xeno_weeding) diff --git a/code/modules/admin/game_master/extra_buttons/marine_announce.dm b/code/modules/admin/game_master/extra_buttons/marine_announce.dm new file mode 100644 index 0000000000..6a0a903b8a --- /dev/null +++ b/code/modules/admin/game_master/extra_buttons/marine_announce.dm @@ -0,0 +1,16 @@ +/client/proc/admin_marine_announcement() + set name = "Command Announcement" + set category = "Game Master.Extras" + + if(!check_rights(R_ADMIN)) + return + + var/body = tgui_input_text(src, "Enter the body text for the announcement.", title = "Announcement Body", multiline = TRUE, encode = FALSE) + if(!body) + return + var/title = tgui_input_text(src, "Enter the title of the announcement. Leave blank for the default title.", title = "Announcement Title") + if(!title) + title = COMMAND_ANNOUNCE + marine_announcement(body, "[title]") + message_admins("[key_name_admin(src)] has made an admin command announcement.") + log_admin("[key_name_admin(src)] made an admin command announcement: [body]") diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 32364e1072..7c294da311 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -61,33 +61,9 @@ "nano/templates/", ) -/datum/asset/directory/nanoui/weapons - common_dirs = list( - "nano/images/weapons/", - ) - - uncommon_dirs = list() - -/datum/asset/directory/nanoui/weapons/send(client) - if(!client) - log_debug("Warning! Tried to send nanoui weapon data with a null client! (asset_list_items.dm line 93)") - return - SSassets.transport.send_assets(client, common) - - /datum/asset/simple/nanoui_images keep_local_name = TRUE - assets = list( - "auto.png" = 'nano/images/weapons/auto.png', - "burst.png" = 'nano/images/weapons/burst.png', - "single.png" = 'nano/images/weapons/single.png', - "disabled_automatic.png" = 'nano/images/weapons/disabled_automatic.png', - "disabled_burst.png" = 'nano/images/weapons/disabled_burst.png', - "disabled_single.png" = 'nano/images/weapons/disabled_single.png', - "no_name.png" = 'nano/images/weapons/no_name.png', - ) - var/list/common_dirs = list( "nano/images/", ) @@ -384,9 +360,29 @@ name = "gunlineart" /datum/asset/spritesheet/gun_lineart/register() - InsertAll("", 'icons/obj/items/weapons/guns/lineart.dmi') + var/icon_file = 'icons/obj/items/weapons/guns/lineart.dmi' + InsertAll("", icon_file) + + for(var/obj/item/weapon/gun/current_gun as anything in subtypesof(/obj/item/weapon/gun)) + if(isnull(initial(current_gun.icon_state))) + continue + if(initial(current_gun.flags_gun_features) & GUN_UNUSUAL_DESIGN) + continue // These don't have a way to inspect weapon stats + var/obj/item/weapon/gun/temp_gun = new current_gun + var/icon_state = temp_gun.base_gun_icon // base_gun_icon is set in Initialize generally + qdel(temp_gun) + if(icon_state && isnull(sprites[icon_state])) + // upgrade this to a stack_trace once all guns have a lineart and we want to lint against that + log_debug("[current_gun] does not have a valid lineart icon state, icon=[icon_file], icon_state=[json_encode(icon_state)]") + ..() +/datum/asset/spritesheet/gun_lineart_modes + name = "gunlineartmodes" + +/datum/asset/spritesheet/gun_lineart_modes/register() + InsertAll("", 'icons/obj/items/weapons/guns/lineart_modes.dmi') + ..() /datum/asset/simple/orbit assets = list( @@ -400,17 +396,6 @@ "ntosradarpointerS.png" = 'icons/images/ui_images/ntosradar_pointer_S.png' ) -/datum/asset/simple/firemodes - assets = list( - "auto.png" = 'html/images/auto.png', - "disabled_auto.png" = 'html/images/disabled_automatic.png', - "burst.png" = 'html/images/burst.png', - "disabled_burst.png" = 'html/images/disabled_burst.png', - "single.png" = 'html/images/single.png', - "disabled_single.png" = 'html/images/disabled_single.png', - ) - - /datum/asset/simple/particle_editor assets = list( "motion" = 'icons/images/ui_images/particle_editor/motion.png', diff --git a/code/modules/autowiki/pages/guns.dm b/code/modules/autowiki/pages/guns.dm index ad675c51a4..7f63602d56 100644 --- a/code/modules/autowiki/pages/guns.dm +++ b/code/modules/autowiki/pages/guns.dm @@ -7,14 +7,18 @@ var/list/gun_to_ammo = list() - for(var/obj/item/ammo_magazine/typepath as anything in subtypesof(/obj/item/ammo_magazine) - subtypesof(/obj/item/ammo_magazine/internal)) + for(var/obj/item/ammo_magazine/typepath as anything in subtypesof(/obj/item/ammo_magazine) - typesof(/obj/item/ammo_magazine/internal)) + if(isnull(initial(typepath.icon_state))) + continue // Skip mags with no icon_state (e.g. base types) LAZYADD(gun_to_ammo[initial(typepath.gun_type)], typepath) for(var/typepath in sort_list(subtypesof(/obj/item/weapon/gun), GLOBAL_PROC_REF(cmp_typepaths_asc))) - var/obj/item/weapon/gun/generating_gun = new typepath() + var/obj/item/weapon/gun/generating_gun = typepath + if(isnull(initial(generating_gun.icon_state))) + continue // Skip guns with no icon_state (e.g. base types) + generating_gun = new typepath() var/filename = SANITIZE_FILENAME(escape_value(format_text(generating_gun.name))) - var/list/gun_data = generating_gun.ui_data() var/list/valid_mag_types = list() @@ -70,6 +74,8 @@ var/list/attachments_by_slot = list() for(var/obj/item/attachable/attachment_typepath as anything in generating_gun.attachable_allowed) + if(isnull(initial(attachment_typepath.icon_state))) + continue // Skip attachments with no icon_state (e.g. base types) LAZYADD(attachments_by_slot[capitalize(initial(attachment_typepath.slot))], attachment_typepath) var/attachments = "" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e54d86c7b7..33d77b05c6 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -310,8 +310,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "Xenomorph - " if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_COMMANDER) dat += "Commanding Officer - " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) - dat += "Synthetic - " + dat += "Synthetic - " if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_PREDATOR) dat += "Yautja - " if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_MENTOR) @@ -495,15 +494,12 @@ var/const/MAX_SAVE_SLOTS = 10 else dat += "You do not have the whitelist for this role." if(MENU_SYNTHETIC) - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) - dat += "
" - dat += "

Synthetic Settings:

" - dat += "Synthetic Name: [synthetic_name]
" - dat += "Synthetic Type: [synthetic_type]
" - dat += "Synthetic Whitelist Status: [synth_status]
" - dat += "
" - else - dat += "You do not have the whitelist for this role." + dat += "
" + dat += "

Synthetic Settings:

" + dat += "Synthetic Name: [synthetic_name]
" + dat += "Synthetic Type: [synthetic_type]
" + dat += "Synthetic Whitelist Status: [synth_status]
" + dat += "
" if(MENU_YAUTJA) if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_PREDATOR) dat += "
" diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index af1f6a03c9..2c9b5ba243 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -73,6 +73,7 @@ var/global/list/gear_datums_by_name = list() /datum/gear/eyewear/sunglasses display_name = "Sunglasses" path = /obj/item/clothing/glasses/sunglasses + cost = 0 /datum/gear/eyewear/prescription_sunglasses display_name = "Prescription sunglasses" @@ -279,6 +280,10 @@ var/global/list/gear_datums_by_name = list() display_name = "USCM cap" path = /obj/item/clothing/head/cmcap +/datum/gear/headwear/uscm/cap/flap + display_name = "USCM flapcap" + path = /obj/item/clothing/head/cmcap/flap + /datum/gear/headwear/uscm/headband_brown display_name = "USCM headband, brown" path = /obj/item/clothing/head/headband/brown @@ -821,6 +826,10 @@ var/global/list/gear_datums_by_name = list() display_name = "Canteen" path = /obj/item/reagent_container/food/drinks/flask/canteen +/datum/gear/flask/canteen/empty + display_name = "Empty canteen" + path = /obj/item/reagent_container/food/drinks/flask/canteen/empty + /datum/gear/flask/leather display_name = "Leather flask" path = /obj/item/reagent_container/food/drinks/flask/detflask @@ -1079,7 +1088,7 @@ var/global/list/gear_datums_by_name = list() /datum/gear/misc/patch_uscm display_name = "USCM shoulder patch" path = /obj/item/clothing/accessory/patch - cost = 1 + cost = 0 slot = WEAR_IN_ACCESSORY allowed_origins = USCM_ORIGINS @@ -1113,3 +1122,8 @@ var/global/list/gear_datums_by_name = list() display_name = "M67 flak jacket" path = /obj/item/clothing/accessory/flak cost = 3 + +/datum/gear/misc/servicejacket + display_name = "Marine Service Jacket" + path = /obj/item/clothing/suit/storage/jacket/marine/service + cost = 3 diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 6bdb55e7d7..6c5701c1a3 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -441,6 +441,10 @@ /obj/item/clothing/suit/storage/marine/smartgunner/standard flags_atom = NO_SNOW_TYPE +/obj/item/clothing/suit/storage/marine/smartgunner/black + flags_atom = NO_SNOW_TYPE + icon_state = "8fancy" + /obj/item/clothing/suit/storage/marine/smartgunner/upp name = "\improper UH7-I heavy plated harness" desc = "An experimental set of heavy armor with additional harnesses designed to support QYJ-72-I smartmachinegun. Heavy plates along with harnesses make wearing backpacks extremely uncomfortable and borderline impossible." diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index 32983f455c..1fb9868ed0 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -471,7 +471,7 @@ GUN_FIREMODE_AUTOMATIC, ) /// A multiplier for how slow this gun should fire in automatic as opposed to burst. 1 is normal, 1.2 is 20% slower, 0.8 is 20% faster, etc. - var/autofire_slow_mult = 1 + var/autofire_slow_mult = 0.7 /// If the gun is currently burst firing VAR_PROTECTED/burst_firing = FALSE /// If the gun should display its ammo count diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 6406cf5301..5488403e72 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -173,13 +173,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -196,13 +196,13 @@ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR), @@ -306,13 +306,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -366,13 +366,13 @@ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR), @@ -499,13 +499,13 @@ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -604,13 +604,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -626,13 +626,13 @@ list("QYJ-72 Box Magazine(7.62x54mmR)", 15, /obj/item/ammo_magazine/pkp , null, VENDOR_ITEM_RECOMMENDED), list("ATTACHMENTS (NONE FIT QYJ-72)", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -729,13 +729,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -751,13 +751,13 @@ list("QYJ-72 Box Magazine (7.62x54mmR)", 15, /obj/item/ammo_magazine/pkp , null, VENDOR_ITEM_RECOMMENDED), list("ATTACHMENTS (NONE FIT QYJ-72)", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -868,13 +868,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -919,13 +919,13 @@ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1020,13 +1020,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -1071,13 +1071,13 @@ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1183,13 +1183,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -1234,13 +1234,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1343,13 +1343,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -1394,13 +1394,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1504,13 +1504,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -1555,13 +1555,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1665,13 +1665,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -1716,13 +1716,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1826,13 +1826,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -1877,13 +1877,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -1987,13 +1987,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -2038,13 +2038,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -2148,13 +2148,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -2199,13 +2199,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -2309,13 +2309,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -2360,13 +2360,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -2470,13 +2470,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -2521,13 +2521,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -2877,7 +2877,7 @@ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Tactical Bandana", 0, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR) @@ -2981,13 +2981,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -3004,13 +3004,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR), @@ -3114,13 +3114,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -3174,13 +3174,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR), @@ -3276,13 +3276,13 @@ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ATTACHMENT (CHOOSE 1)", 0, null, null, null), - list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Angled Grip", 0, /obj/item/attachable/angledgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Laser Sight", 0, /obj/item/attachable/lasersight/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 0, /obj/item/attachable/reddot/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 0, /obj/item/attachable/reflex/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 0, /obj/item/attachable/verticalgrip/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -3327,13 +3327,13 @@ 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("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), @@ -3530,19 +3530,19 @@ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), - list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), + list("Angled Grip", 10, /obj/item/attachable/angledgrip/upp, null, VENDOR_ITEM_REGULAR), list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), list("Gyroscopic Stabilizer", 10, /obj/item/attachable/gyro, null, VENDOR_ITEM_REGULAR), - list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), + list("Laser Sight", 10, /obj/item/attachable/lasersight/upp, null, VENDOR_ITEM_REGULAR), list("Masterkey Shotgun", 10, /obj/item/attachable/attached_gun/shotgun, null, VENDOR_ITEM_REGULAR), list("M37 Wooden Stock", 10, /obj/item/attachable/stock/shotgun, null, VENDOR_ITEM_REGULAR), list("M39 Stock", 10, /obj/item/attachable/stock/smg, null, VENDOR_ITEM_REGULAR), list("M41A Solid Stock", 10, /obj/item/attachable/stock/rifle, null, VENDOR_ITEM_REGULAR), list("Recoil Compensator", 10, /obj/item/attachable/compensator, null, VENDOR_ITEM_REGULAR), - list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), - list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), + list("Red-Dot Sight", 10, /obj/item/attachable/reddot/upp, null, VENDOR_ITEM_REGULAR), + list("Reflex Sight", 10, /obj/item/attachable/reflex/upp, null, VENDOR_ITEM_REGULAR), list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), - list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 10, /obj/item/attachable/verticalgrip/upp, null, VENDOR_ITEM_REGULAR), list("UTILITIES", 0, null, null, null), list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm b/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm index 177cd07433..40e20fc06f 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm @@ -76,21 +76,32 @@ At bare minimum, make sure the relevant checks from parent types gets copied in ///////////////////////////// -// Poddoors/shutters // +// PODDDOORS // ///////////////////////////// /obj/structure/machinery/door/poddoor/xeno_ai_obstacle(mob/living/carbon/xenomorph/X, direction, turf/target) . = ..() if(!.) - return + return INFINITY + + if(unacidable) + return INFINITY if(!(stat & NOPOWER)) - return + return INFINITY + + return DOOR_PENALTY - if(operating) - return + +///////////////////////////// +// SHUTTERS // +///////////////////////////// +/obj/structure/machinery/door/poddoor/shutters/xeno_ai_obstacle(mob/living/carbon/xenomorph/X, direction, turf/target) + . = ..() + if(!.) + return INFINITY if(unacidable) - return + return INFINITY return DOOR_PENALTY @@ -104,7 +115,7 @@ At bare minimum, make sure the relevant checks from parent types gets copied in return if(locked || welded || isElectrified()) - return INFINITY + return LOCKED_DOOR_PENALTY if(isfacehugger(X)) return -1 // We LOVE going under doors! diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 70b0ad3b41..7dc0a56943 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -608,14 +608,13 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w gun_recoil = recoil_buildup var/penetration = 0 - var/armor_punch = 0 var/accuracy = 0 var/min_accuracy = 0 var/max_range = 0 + var/effective_range = 0 var/scatter = 0 var/list/damage_armor_profile_xeno = list() var/list/damage_armor_profile_marine = list() - var/list/damage_armor_profile_armorbreak = list() var/list/damage_armor_profile_headers = list() var/datum/ammo/in_ammo @@ -638,35 +637,26 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w falloff = in_ammo.damage_falloff * damage_falloff_mult penetration = in_ammo.penetration - armor_punch = in_ammo.damage_armor_punch accuracy = in_ammo.accurate_range min_accuracy = in_ammo.accurate_range_min max_range = in_ammo.max_range + effective_range = in_ammo.effective_range_max scatter = in_ammo.scatter for(var/i = 0; i<=CODEX_ARMOR_MAX; i+=CODEX_ARMOR_STEP) damage_armor_profile_headers.Add(i) - damage_armor_profile_marine.Add(round(armor_damage_reduction(GLOB.marine_ranged_stats, damage, i, penetration))) - damage_armor_profile_xeno.Add(round(armor_damage_reduction(GLOB.xeno_ranged_stats, damage, i, penetration))) - if(!GLOB.xeno_general.armor_ignore_integrity) - if(i != 0) - damage_armor_profile_armorbreak.Add("[round(armor_break_calculation(GLOB.xeno_ranged_stats, damage, i, penetration, in_ammo.pen_armor_punch, armor_punch)/i)]%") - else - damage_armor_profile_armorbreak.Add("N/A") + damage_armor_profile_marine.Add(floor(armor_damage_reduction(GLOB.marine_ranged_stats, damage, i, penetration))) + damage_armor_profile_xeno.Add(floor(armor_damage_reduction(GLOB.xeno_ranged_stats, damage, i, penetration))) var/rpm = max(fire_delay, 1) var/burst_rpm = max((fire_delay * 1.5 + (burst_amount - 1) * burst_delay)/max(burst_amount, 1), 0.0001) // weapon info - data["icon"] = SSassets.transport.get_asset_url("no_name.png") - - if(SSassets.cache["[base_gun_icon].png"]) - data["icon"] = SSassets.transport.get_asset_url("[base_gun_icon].png") - + data["icon"] = base_gun_icon data["name"] = name data["desc"] = desc data["two_handed_only"] = (flags_gun_features & GUN_WIELDED_FIRING_ONLY) @@ -688,19 +678,18 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w data["damage"] = damage data["falloff"] = falloff data["total_projectile_amount"] = bonus_projectile_amount+1 - data["armor_punch"] = armor_punch data["penetration"] = penetration data["accuracy"] = accuracy * accuracy_mult data["unwielded_accuracy"] = accuracy * accuracy_mult_unwielded data["min_accuracy"] = min_accuracy data["max_range"] = max_range + data["effective_range"] = effective_range // damage table data data["damage_armor_profile_headers"] = damage_armor_profile_headers data["damage_armor_profile_marine"] = damage_armor_profile_marine data["damage_armor_profile_xeno"] = damage_armor_profile_xeno - data["damage_armor_profile_armorbreak"] = damage_armor_profile_armorbreak return data @@ -715,10 +704,10 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w data["damage_max"] = 100 data["accuracy_max"] = 32 data["range_max"] = 32 + data["effective_range_max"] = EFFECTIVE_RANGE_MAX_TIER_4 data["falloff_max"] = DAMAGE_FALLOFF_TIER_1 data["penetration_max"] = ARMOR_PENETRATION_TIER_10 data["punch_max"] = 5 - data["glob_armourbreak"] = GLOB.xeno_general.armor_ignore_integrity data["automatic"] = (GUN_FIREMODE_AUTOMATIC in gun_firemode_list) data["auto_only"] = ((length(gun_firemode_list) == 1) && (GUN_FIREMODE_AUTOMATIC in gun_firemode_list)) @@ -726,8 +715,8 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w /obj/item/weapon/gun/ui_assets(mob/user) . = ..() || list() - . += get_asset_datum(/datum/asset/simple/firemodes) - //. += get_asset_datum(/datum/asset/spritesheet/gun_lineart) + . += get_asset_datum(/datum/asset/spritesheet/gun_lineart_modes) + . += get_asset_datum(/datum/asset/spritesheet/gun_lineart) // END TGUI \\ diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 0b14f1db09..0c6da6f973 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -250,7 +250,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/suppressor name = "suppressor" - desc = "A small tube with exhaust ports to expel noise and gas.\n Does not completely silence a weapon, but does make it much quieter and a little more accurate and stable at the cost of slightly reduced damage." + desc = "Small muzzle device that reduces flash and noise with special internal geometry.\n Reduces noise of the shot, increases accuracy and stability, but penalizes damage marginally." icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' icon_state = "suppressor" slot = "muzzle" @@ -278,7 +278,7 @@ Defined in conflicts.dm of the #defines folder. icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' icon_state = "bayonet" item_state = "combat_knife" - desc = "The standard-issue bayonet of the Colonial Marines. You can slide this knife into your boots, or attach it to the end of a rifle." + desc = "USCMC standard issue combat knife. Can be put into boot holster or affixed to the bayonet lug of a rifle. Can also be used to extract shrapnel..." sharp = IS_SHARP_ITEM_ACCURATE force = MELEE_FORCE_NORMAL throwforce = MELEE_FORCE_NORMAL @@ -375,7 +375,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/extended_barrel name = "extended barrel" - desc = "The lengthened barrel speeds up and stabilizes the bullet, increasing velocity and accuracy." + desc = "Longer barrel reduces unburnt powder, improving muzzle velocity and accuracy." slot = "muzzle" icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' icon_state = "ebarrel" @@ -452,7 +452,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/f90_dmr_barrel name = "f90 barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon_state = "aug_dmr_barrel_a" attach_icon = "aug_dmr_barrel_a" slot = "muzzle" @@ -463,7 +463,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/f90_shotgun_barrel name = "f90 barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon_state = "aug_mkey_barrel_a" attach_icon = "aug_mkey_barrel_a" slot = "muzzle" @@ -474,7 +474,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/l56a2_smartgun name = "l56a2 barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon_state = "magsg_barrel_a" attach_icon = "magsg_barrel_a" slot = "muzzle" @@ -613,8 +613,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/reddot name = "S5 red-dot sight" - desc = "An ARMAT S5 red-dot sight. A zero-magnification optic that offers faster, and more accurate target acquisition." - desc_lore = "An all-weather collimator sight, designated as the AN/PVQ-64 Dot Sight. Equipped with a sunshade to increase clarity in bright conditions and resist weathering. Compact and efficient, a marvel of military design, until you realize that this is actually just an off-the-shelf design that got a military designation slapped on." + desc = "An ARMAT S5 red-dot, type designated as the AN/PVQ-62 Dot Sight. Zero-magnification optic equipped with a sunshade, for better clarity under bright conditions and weather resistance. Unobtrusive and compact, increases wielded accuracy." icon = 'icons/obj/items/weapons/guns/attachments/rail.dmi' icon_state = "reddot" attach_icon = "reddot_a" @@ -626,10 +625,13 @@ Defined in conflicts.dm of the #defines folder. accuracy_unwielded_mod = HIT_ACCURACY_MULT_TIER_1 movement_onehanded_acc_penalty_mod = MOVEMENT_ACCURACY_PENALTY_MULT_TIER_5 +/obj/item/attachable/reddot/upp + name = "EKP-9-M Red Dot Sight" + desc = "Cutting edge UPP sight with automated reticle correction for a fixed zero point. Increases accuracy significantly." + /obj/item/attachable/reflex name = "S6 reflex sight" - desc = "An ARMAT S6 reflex sight. A zero-magnification alternative to iron sights with a more open optic window when compared to the S5 red-dot. Helps to reduce scatter during automated fire." - desc_lore = "A simple folding reflex sight designated as the AN/PVG-72 Reflex Sight, compatible with most rail systems. Bulky and built to last, it can link with military HUDs for limited point-of-aim calculations." + desc = "An ARMAT S6 reflex sight, type designated as the AN/PVG-72 Reflex. Zero-magnification alternative to irons, decreases scatter during burst fire. Can link with mil-HUDs for a limited CCIP." icon = 'icons/obj/items/weapons/guns/attachments/rail.dmi' icon_state = "reflex" attach_icon = "reflex_a" @@ -643,10 +645,13 @@ Defined in conflicts.dm of the #defines folder. burst_scatter_mod = -1 movement_onehanded_acc_penalty_mod = MOVEMENT_ACCURACY_PENALTY_MULT_TIER_5 +/obj/item/attachable/reflex/upp + name = "PK-12 Reflex Sight" + desc = "Reflector type gunsight compatible with most standard issue UPP firearms. Durable but the power supply is notoriously unreliable. Reduces scatter significantly and boosts accuracy slightly." /obj/item/attachable/flashlight name = "rail flashlight" - desc = "A flashlight, for rails, on guns. Can be toggled on and off. A better light source than standard M3 pattern armor lights." + desc = "Railmounted flashlight. Pretty generic. Surprisingly high intensity, as it's a better light source than the suit lamps of most armor systems." icon = 'icons/obj/items/weapons/guns/attachments/rail.dmi' icon_state = "flashlight" attach_icon = "flashlight_a" @@ -806,6 +811,10 @@ Defined in conflicts.dm of the #defines folder. to_chat(user, SPAN_NOTICE("Hold on there cowboy, that grip is bolted on. You are unable to modify it.")) return +/obj/item/attachable/flashlight/grip/upp + name = "RK-5A Flashlight Grip" + desc = "Folding grip with an integrated flashlight. Reduces recoil and scatter marginally, boosts accuracy slightly. \nStatistically udentical to the underbarrel flashlight grip." + /obj/item/attachable/flashlight/laser_light_combo //Unique attachment for the VP78 based on the fact it has a Laser-Light Module in AVP2010 name = "VP78 Laser-Light Module" desc = "A Laser-Light module for the VP78 Service Pistol which is currently undergoing limited field testing as part of the USCMs next generation pistol program. All VP78 pistols come equipped with the module." @@ -899,8 +908,7 @@ Defined in conflicts.dm of the #defines folder. icon = 'icons/obj/items/weapons/guns/attachments/rail.dmi' icon_state = "sniperscope" attach_icon = "sniperscope_a" - desc = "An ARMAT S8 telescopic eye piece. Fixed at 4x zoom. Press the 'use rail attachment' HUD icon or use the verb of the same name to zoom." - desc_lore = "An intermediate-power Armat scope designated as the AN/PVQ-31 4x Optic. Fairly basic, but both durable and functional... enough. 780 meters is about as far as one can push the 10x24mm cartridge, really." + desc = "An ARMAT S8 scope, type designation AN/PVQ-31. Fixed 4x zoom, reduces fire rate and increases wield time but increases accuracy while scoped." slot = "rail" aim_speed_mod = SLOWDOWN_ADS_SCOPE //Extra slowdown when wielded wield_delay_mod = WIELD_DELAY_FAST @@ -989,6 +997,10 @@ Defined in conflicts.dm of the #defines folder. #define ZOOM_LEVEL_2X 0 #define ZOOM_LEVEL_4X 1 +/obj/item/attachable/scope/upp + name = "PO-M 4x Optic" + desc = "Old fashioned 4x scope. Sturdy, but a little unergonomic. UPP tradition. Reduces RoF and increases wield time. Major accuracy bonus when scoped." + /obj/item/attachable/scope/variable_zoom name = "S10 variable zoom telescopic scope" desc = "An ARMAT S10 telescopic eye piece. Can be switched between 2x zoom, which allows the user to move while scoped in, and 4x zoom. Press the 'use rail attachment' HUD icon or use the verb of the same name to zoom." @@ -1071,8 +1083,7 @@ Defined in conflicts.dm of the #defines folder. name = "S4 2x telescopic mini-scope" icon_state = "miniscope" attach_icon = "miniscope_a" - desc = "An ARMAT S4 telescoping eye piece. Fixed at a modest 2x zoom. Press the 'use rail attachment' HUD icon or use the verb of the same name to zoom." - desc_lore = "A light-duty optic, designated as the AN/PVQ-45 2x Optic. Suited towards short to medium-range engagements. Users are advised to zero it often, as the first mass-production batch had a tendency to drift in one direction or another with sustained use." + desc = "An ARMAT S4 scope, type designation AN/PVQ-45. 2x magnification optic, increases accuracy while scoped, decreases RoF and increased wield speed. \nZero often, first production batch suffered from drifting under heavy use and some of them might be in circulation still." slot = "rail" zoom_offset = 6 zoom_viewsize = 7 @@ -1095,6 +1106,10 @@ Defined in conflicts.dm of the #defines folder. G.slowdown -= dynamic_aim_slowdown ..() +/obj/item/attachable/scope/mini/upp + name = "1P93 2x Optic" + desc = "Mild update of a 2159 UPP design. Holds zero in all conditions, antiglint grid prevents glare, but the reticle is unfortunately cluttered and busy. Reduces RoF and increases wield time, boosts accuracy while scoped." + /obj/item/attachable/scope/mini/flaregun wield_delay_mod = 0 dynamic_aim_slowdown = SLOWDOWN_ADS_MINISCOPE_DYNAMIC @@ -1116,11 +1131,11 @@ Defined in conflicts.dm of the #defines folder. name = "2x hunting mini-scope" icon_state = "huntingscope" attach_icon = "huntingscope" - desc = "This civilian-grade scope is a common sight on hunting rifles due to its cheap price and great optics. Fixed at a modest 2x zoom. Press the 'use rail attachment' HUD icon or use the verb of the same name to zoom." + desc = "Generic fixed-magnification 2x optic. Common just about everywhere in civil hands, and sometimes used by law enforcement too." /obj/item/attachable/scope/mini/nsg23 name = "W-Y S4 2x advanced telescopic mini-scope" - desc = "An ARMAT S4 telescoping eye piece, custom-tuned by W-Y scientists to be as ergonomic as possible." + desc = "An ARMAT S4 telescoping eye piece, revised by W-Y scientists to be much more ergonomic." icon_state = "miniscope_nsg23" attach_icon = "miniscope_nsg23_a" zoom_offset = 7 @@ -1128,7 +1143,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/scope/mini/xm88 name = "XS-9 targeting relay" - desc = "An ARMAT XS-9 optical interface. Unlike a traditional scope, this rail-mounted device features no telescoping lens. Instead, the firearm's onboard targeting system relays data directly to the optic for the system operator to reference in realtime." + desc = "An ARMAT XS-9 optical interface, type designation XAN/PVG-90. Computer controlled 2x magnification with electronic fire control system, interfacing with the rifle's sensors to provide near perfect shooting accuracy... In theory." icon_state = "boomslang-scope" zoom_offset = 7 dynamic_aim_slowdown = SLOWDOWN_ADS_NONE @@ -1142,8 +1157,7 @@ Defined in conflicts.dm of the #defines folder. name = "B8 Smart-Scope" icon_state = "iffbarrel" attach_icon = "iffbarrel_a" - desc = "An experimental B8 Smart-Scope. Based on the technologies used in the Smart Gun by ARMAT, this sight has integrated IFF systems. It can only attach to the M4RA Battle Rifle and M44 Combat Revolver." - desc_lore = "An experimental fire-control optic capable of linking into compatible IFF systems on certain weapons, designated the XAN/PVG-110 Smart Scope. Currently programmed for usage with the M4RA battle rifle and M44 Combat Revolver, due to their relatively lower rates of fire. Experimental technology developed by Armat, who have assured that all previously reported issues with false-negative IFF recognitions have been solved. Make sure to check the sight after every op, just in case." + desc = "An experimental B8 Smart-Scope, type designation XAN/PVG-110. Limited automated IFF trigger interlock system allows for use with the M44 Combat Revolver and M4RA Battle Rifle. Reduces damage due to the momentary trigger delay." slot = "rail" zoom_offset = 6 zoom_viewsize = 7 @@ -1786,7 +1800,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/stock/xm88 name = "\improper XM88 padded stock" - desc = "A specially made compound polymer stock reinforced with aluminum rods and thick rubber padding to shield the user from recoil. Fitted specifically for the XM88 Heavy Rifle." + desc = "A polymer framed alloy reinforced stock for the XM88 antimateriel rifle. Helps manage recoil." icon_state = "boomslang-stock" wield_delay_mod = WIELD_DELAY_NORMAL hud_offset_mod = 6 @@ -1942,8 +1956,8 @@ Defined in conflicts.dm of the #defines folder. aim_speed_mod = CONFIG_GET(number/slowdown_med) /obj/item/attachable/stock/rifle/collapsible - name = "\improper M41A folding stock" - desc = "The standard back end of any gun starting with \"M41\". Compatible with the M41A series, this stock reduces recoil and improves accuracy, but at a reduction to handling and agility. Also enhances the thwacking of things with the stock-end of the rifle." + name = "\improper M41A extendable stock" + desc = "The M41A's standard polymer extendable stock. When extended, it improves scatter, accuracy, and recoil, but slightly hinders agility." slot = "stock" melee_mod = 5 size_mod = 1 @@ -2185,7 +2199,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/m4ra_barrel name = "M4RA barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon_state = "m4ra_barrel" attach_icon = "m4ra_barrel" slot = "special" @@ -2211,7 +2225,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/m4ra_barrel_custom name = "custom M4RA barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon_state = "m4ra_custom_barrel" attach_icon = "m4ra_custom_barrel" slot = "special" @@ -2242,7 +2256,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/upp_rpg_breech name = "HJRA-12 Breech" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi' icon_state = "hjra_breech" attach_icon = "hjra_breech" @@ -2254,7 +2268,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/pkpbarrel name = "QYJ-72 Barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' icon_state = "uppmg_barrel" attach_icon = "uppmg_barrel" @@ -2266,7 +2280,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/stock/pkpstock name = "QYJ-72 Stock" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi' icon_state = "uppmg_stock" attach_icon = "uppmg_stock" @@ -2278,7 +2292,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/type88_barrel name = "Type-88 Barrel" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' icon_state = "type88_barrel" attach_icon = "type88_barrel" @@ -2290,7 +2304,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/type73suppressor name = "Type 73 Integrated Suppressor" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' icon_state = "type73_suppressor" attach_icon = "type73_suppressor" @@ -2302,7 +2316,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/stock/type71 name = "Type 71 Stock" - desc = "This isn't supposed to be seperated from the gun, how'd this happen?" + desc = "This isn't supposed to be separated from the gun, how'd this happen?" icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi' icon_state = "type71_stock" attach_icon = "type71_stock" @@ -2813,8 +2827,8 @@ Defined in conflicts.dm of the #defines folder. //For the Mk1 /obj/item/attachable/attached_gun/grenade/mk1 - name = "\improper MK1 underslung grenade launcher" - desc = "An older version of the classic underslung grenade launcher. Can store five grenades, and fire them farther, but fires them slower." + name = "\improper PN 30mm underslung grenade launcher" + desc = "Standard pump action underslung grenade launcher. Fits the M41A, four round tube, chambers one." icon_state = "grenade-mk1" attach_icon = "grenade-mk1_a" current_rounds = 0 @@ -3003,7 +3017,7 @@ Defined in conflicts.dm of the #defines folder. name = "\improper U7 underbarrel shotgun" icon_state = "masterkey" attach_icon = "masterkey_a" - desc = "An ARMAT U7 tactical shotgun. Attaches to the underbarrel of most weapons. Only capable of loading up to five buckshot shells. Specialized for breaching into buildings." + desc = "An ARMAT U7 tactical shotgun. Attaches to the underbarrel of most weapons. Only capable of loading up to five buckshot shells. Specialized for breaching into buildings, shorter barrel reduces actual damage." w_class = SIZE_MEDIUM max_rounds = 5 current_rounds = 5 @@ -3050,7 +3064,7 @@ Defined in conflicts.dm of the #defines folder. name = "HME-12 underbarrel extinguisher" icon_state = "extinguisher" attach_icon = "extinguisher_a" - desc = "A Taiho-Technologies HME-12 underbarrel extinguisher. Attaches to the underbarrel of most weapons. Point at flame before applying pressure." + desc = "A Taiho-Technologies HME-12 underbarrel extinguisher, a miniaturization of a complex used by firefighters. Attaches to the underbarrel of most weapons, point at fire to remove fire." w_class = SIZE_MEDIUM slot = "under" flags_attach_features = ATTACH_REMOVABLE|ATTACH_ACTIVATION|ATTACH_WEAPON|ATTACH_MELEE @@ -3190,6 +3204,10 @@ Defined in conflicts.dm of the #defines folder. accuracy_unwielded_mod = -HIT_ACCURACY_MULT_TIER_3 scatter_unwielded_mod = SCATTER_AMOUNT_TIER_10 +/obj/item/attachable/verticalgrip/upp + name = "RK-5 Vertical Grip" + desc = "Sturdy grip positioned at optimal place offers enhanced stability in rapid fire. Increases weapon size, penalizes one handed fire, improves scatter and accuracy while wielded." + /obj/item/attachable/angledgrip name = "angled grip" desc = "An angled foregrip that improves weapon ergonomics resulting in faster wielding time. \nHowever, it also increases weapon size." @@ -3201,6 +3219,10 @@ Defined in conflicts.dm of the #defines folder. slot = "under" pixel_shift_x = 20 +/obj/item/attachable/angledgrip/upp + name = "RK-9 Angled Grip" + desc = "Ergonomic grip decreases time for shouldering the weapon. Increases weapon size, accelerates wield speed." + /obj/item/attachable/gyro name = "gyroscopic stabilizer" desc = "A set of weights and balances to stabilize the weapon when fired with one hand. Slightly decreases firing speed." @@ -3228,8 +3250,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/lasersight name = "laser sight" - desc = "A laser sight that attaches to the underside of most weapons. Increases accuracy and decreases scatter, especially while one-handed." - desc_lore = "A standard visible-band laser module designated as the AN/PEQ-42 Laser Sight. Can be mounted onto any firearm that has a lower rail large enough to accommodate it." + desc = "Standard issue visible-band underbarrel laser module, type designation AN/PEQ-42. Increases accuracy and decreases scatter, especially while one-handed. Also improves handling on the move." icon = 'icons/obj/items/weapons/guns/attachments/under.dmi' icon_state = "lasersight" attach_icon = "lasersight_a" @@ -3245,6 +3266,14 @@ Defined in conflicts.dm of the #defines folder. scatter_unwielded_mod = -SCATTER_AMOUNT_TIER_9 accuracy_unwielded_mod = HIT_ACCURACY_MULT_TIER_1 +/obj/item/attachable/lasersight/upp + name = "Zvezda Laser Module" + desc = "Visible band 512nm green laser, compatible with NVG and IR. Bears striking resemblance to an old Weyland Yutani offering... Decreases scatter, especially onehanded, slightly boosts accuracy. " + icon = 'icons/obj/items/weapons/guns/attachments/under.dmi' + icon_state = "lasersight_upp" + attach_icon = "lasersight_upp_a" + pixel_shift_x = 15 + pixel_shift_y = 18 /obj/item/attachable/bipod name = "bipod" diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm index ae8bef53f6..3397c75457 100644 --- a/code/modules/projectiles/guns/pistols.dm +++ b/code/modules/projectiles/guns/pistols.dm @@ -236,7 +236,6 @@ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi' icon_state = "c_deagle" item_state = "c_deagle" - base_gun_icon = "c_deagle" current_mag = /obj/item/ammo_magazine/pistol/heavy/super/highimpact black_market_value = 100 @@ -257,7 +256,6 @@ desc = "A Desert Eagle anodized in gold and adorned with rosewood grips. The living definition of ostentatious, it's flashy, unwieldy, tremendously heavy, and kicks like a mule. But as a symbol of power, there's nothing like it." icon_state = "g_deagle" item_state = "g_deagle" - base_gun_icon = "g_deagle" //------------------------------------------------------- //NP92 pistol @@ -588,7 +586,7 @@ name = "\improper 88 Mod 4 combat pistol" desc = "Standard issue USCM firearm. Also found in the hands of Weyland-Yutani PMC teams. Fires 9mm armor shredding rounds and is capable of 3-round burst." icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "88m4" + icon_state = "_88m4" // to comply with css standards item_state = "88m4" fire_sound = "88m4" firesound_volume = 20 diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index 48918ef2ee..e0f481a7e4 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -1302,17 +1302,24 @@ /obj/item/attachable/flashlight, // Rail /obj/item/attachable/magnetic_harness, /obj/item/attachable/scope, + /obj/item/attachable/scope/upp, /obj/item/attachable/scope/mini, + /obj/item/attachable/scope/mini/upp, /obj/item/attachable/reddot, + /obj/item/attachable/reddot/upp, /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/suppressor, // Muzzle /obj/item/attachable/bayonet, /obj/item/attachable/bayonet/upp, /obj/item/attachable/extended_barrel, /obj/item/attachable/heavy_barrel, /obj/item/attachable/verticalgrip, // Underbarrel + /obj/item/attachable/verticalgrip/upp, /obj/item/attachable/flashlight/grip, + /obj/item/attachable/flashlight/grip/upp, /obj/item/attachable/lasersight, + /obj/item/attachable/lasersight/upp, /obj/item/attachable/burstfire_assembly, /obj/item/attachable/attached_gun/flamer, /obj/item/attachable/attached_gun/flamer/advanced, @@ -1355,7 +1362,7 @@ random_spawn_chance = 100 random_rail_chance = 70 random_spawn_rail = list( - /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, ) random_muzzle_chance = 100 @@ -1364,14 +1371,14 @@ ) random_under_chance = 40 random_spawn_under = list( - /obj/item/attachable/verticalgrip, + /obj/item/attachable/verticalgrip/upp, ) /obj/item/weapon/gun/rifle/type71/dual random_spawn_chance = 100 random_rail_chance = 70 random_spawn_rail = list( - /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, ) random_muzzle_chance = 100 @@ -1380,8 +1387,8 @@ ) random_under_chance = 40 random_spawn_under = list( - /obj/item/attachable/lasersight, - /obj/item/attachable/verticalgrip, + /obj/item/attachable/lasersight/upp, + /obj/item/attachable/verticalgrip/upp, ) /obj/item/weapon/gun/rifle/type71/sapper @@ -1389,7 +1396,7 @@ random_spawn_chance = 100 random_rail_chance = 80 random_spawn_rail = list( - /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, /obj/item/attachable/magnetic_harness, ) @@ -1410,9 +1417,12 @@ /obj/item/attachable/flashlight, // Rail /obj/item/attachable/magnetic_harness, /obj/item/attachable/scope, + /obj/item/attachable/scope/upp, /obj/item/attachable/scope/mini, - /obj/item/attachable/reddot, + /obj/item/attachable/scope/mini/upp, + /obj/item/attachable/reddot/upp, /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/suppressor, // Muzzle /obj/item/attachable/bayonet, /obj/item/attachable/bayonet/upp, @@ -1431,10 +1441,10 @@ random_spawn_chance = 100 random_rail_chance = 100 random_spawn_rail = list( - /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, /obj/item/attachable/magnetic_harness, - /obj/item/attachable/scope/mini, + /obj/item/attachable/scope/mini/upp, ) random_muzzle_chance = 100 random_spawn_muzzle = list( @@ -1454,15 +1464,20 @@ /obj/item/attachable/flashlight, // Rail /obj/item/attachable/magnetic_harness, /obj/item/attachable/scope, + /obj/item/attachable/scope/upp, /obj/item/attachable/scope/mini, + /obj/item/attachable/scope/mini/upp, /obj/item/attachable/reddot, + /obj/item/attachable/reddot/upp, /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/suppressor, // Muzzle /obj/item/attachable/bayonet, /obj/item/attachable/bayonet/upp, /obj/item/attachable/extended_barrel, /obj/item/attachable/heavy_barrel, /obj/item/attachable/verticalgrip, // Underbarrel + /obj/item/attachable/verticalgrip/upp, /obj/item/attachable/burstfire_assembly, ) @@ -1485,7 +1500,7 @@ random_spawn_chance = 100 random_rail_chance = 70 random_spawn_rail = list( - /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, ) random_muzzle_chance = 100 @@ -1494,7 +1509,7 @@ ) random_under_chance = 40 random_spawn_under = list( - /obj/item/attachable/verticalgrip, + /obj/item/attachable/verticalgrip/upp, ) /obj/item/weapon/gun/rifle/type71/carbine/commando @@ -1509,6 +1524,7 @@ current_mag = /obj/item/ammo_magazine/rifle/type71/ap attachable_allowed = list( /obj/item/attachable/verticalgrip, + /obj/item/attachable/verticalgrip/upp, ) random_spawn_chance = 0 random_spawn_rail = list() diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index 9ea6624dc6..a705861f98 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -374,14 +374,18 @@ can cause issues with ammo types getting mixed up during the burst. current_mag = /obj/item/ammo_magazine/internal/shotgun/type23 attachable_allowed = list( /obj/item/attachable/reddot, // Rail + /obj/item/attachable/reddot/upp, /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, /obj/item/attachable/magnetic_harness, /obj/item/attachable/bayonet, // Muzzle /obj/item/attachable/heavy_barrel, /obj/item/attachable/bayonet/upp, /obj/item/attachable/verticalgrip, // Underbarrel + /obj/item/attachable/verticalgrip/upp, /obj/item/attachable/flashlight/grip, + /obj/item/attachable/flashlight/grip/upp, /obj/item/attachable/attached_gun/flamer, /obj/item/attachable/attached_gun/flamer/advanced, /obj/item/attachable/attached_gun/extinguisher, @@ -421,7 +425,7 @@ can cause issues with ammo types getting mixed up during the burst. ) random_under_chance = 40 random_spawn_under = list( - /obj/item/attachable/verticalgrip, + /obj/item/attachable/verticalgrip/upp, ) /obj/item/weapon/gun/shotgun/type23/breacher/slug @@ -444,7 +448,7 @@ can cause issues with ammo types getting mixed up during the burst. random_under_chance = 100 random_spawn_under = list( /obj/item/attachable/flashlight/grip, - /obj/item/attachable/verticalgrip, + /obj/item/attachable/verticalgrip/upp, ) /obj/item/weapon/gun/shotgun/type23/dragon @@ -470,10 +474,13 @@ can cause issues with ammo types getting mixed up during the burst. current_mag = /obj/item/ammo_magazine/internal/shotgun/type23/beanbag attachable_allowed = list( /obj/item/attachable/reddot, //Rail + /obj/item/attachable/reddot/upp, /obj/item/attachable/reflex, + /obj/item/attachable/reflex/upp, /obj/item/attachable/flashlight, /obj/item/attachable/magnetic_harness, /obj/item/attachable/verticalgrip, //Underbarrel + /obj/item/attachable/verticalgrip/upp, /obj/item/attachable/stock/type23, //Stock ) flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_INTERNAL_MAG diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm index 1672df4631..bc0ac3340e 100644 --- a/code/modules/projectiles/guns/specialist/sniper.dm +++ b/code/modules/projectiles/guns/specialist/sniper.dm @@ -474,6 +474,7 @@ /obj/item/attachable/bayonet/upp, //Under, /obj/item/attachable/verticalgrip, + /obj/item/attachable/verticalgrip/upp, /obj/item/attachable/bipod, //Integrated, /obj/item/attachable/type88_barrel, diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 6319028d81..35ca73d7e9 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -1,6 +1,6 @@ # DMAPI Internals -This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. +This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. - [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. - The [core](./core) folder includes all code not directly part of any API version. diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index b82d8f49e2..965e21b549 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -3,7 +3,7 @@ This folder contains all DMAPI code not directly involved in an API. - [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. - [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition -- diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm new file mode 100644 index 0000000000..6ef8d841b8 --- /dev/null +++ b/code/modules/tgs/core/byond_world_export.dm @@ -0,0 +1,22 @@ +/datum/tgs_http_handler/byond_world_export + +/datum/tgs_http_handler/byond_world_export/PerformGet(url) + // This is an infinite sleep until we get a response + var/export_response = world.Export(url) + TGS_DEBUG_LOG("byond_world_export: Export complete") + + if(!export_response) + TGS_ERROR_LOG("byond_world_export: Failed request: [url]") + return new /datum/tgs_http_result(null, FALSE) + + var/content = export_response["CONTENT"] + if(!content) + TGS_ERROR_LOG("byond_world_export: Failed request, missing content!") + return new /datum/tgs_http_result(null, FALSE) + + var/response_json = TGS_FILE2TEXT_NATIVE(content) + if(!response_json) + TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!") + return new /datum/tgs_http_result(null, FALSE) + + return new /datum/tgs_http_result(response_json, TRUE) diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 15622228e9..63cb5a2c35 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -1,4 +1,4 @@ -/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null) var/current_api = TGS_READ_GLOBAL(tgs) if(current_api) TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?") @@ -55,7 +55,10 @@ TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") event_handler = null - var/datum/tgs_api/new_api = new api_datum(event_handler, version) + if(!http_handler) + http_handler = new /datum/tgs_http_handler/byond_world_export + + var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler) TGS_WRITE_GLOBAL(tgs, new_api) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index f734fd0527..3ca53e9bf7 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -6,7 +6,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/list/warned_deprecated_command_runs -/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) ..() src.event_handler = event_handler src.version = version diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 23b714f9d0..f5118ed55a 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -1,4 +1,5 @@ #include "core\_definitions.dm" +#include "core\byond_world_export.dm" #include "core\core.dm" #include "core\datum.dm" #include "core\tgs_version.dm" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 95b8edd3ee..3e328fc7c2 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -31,9 +31,12 @@ var/detached = FALSE -/datum/tgs_api/v5/New() + var/datum/tgs_http_handler/http_handler + +/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) . = ..() interop_version = version + src.http_handler = http_handler TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() @@ -50,7 +53,9 @@ version = null // we want this to be the TGS version, not the interop version // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]") sleep(world.tick_lag) + TGS_DEBUG_LOG("Export bug prevention sleep complete") var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 0c5e701a32..62201fcc9e 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -78,27 +78,24 @@ WaitForReattach(FALSE) TGS_DEBUG_LOG("Bridge request start") - // This is an infinite sleep until we get a response - var/export_response = world.Export(bridge_request) + var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request) TGS_DEBUG_LOG("Bridge request complete") - if(!export_response) - TGS_ERROR_LOG("Failed bridge request: [bridge_request]") + if(isnull(result)) + TGS_ERROR_LOG("Failed bridge request, handler returned null!") return - var/content = export_response["CONTENT"] - if(!content) - TGS_ERROR_LOG("Failed bridge request, missing content!") + if(!istype(result) || result.type != /datum/tgs_http_result) + TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!") return - var/response_json = TGS_FILE2TEXT_NATIVE(content) - if(!response_json) - TGS_ERROR_LOG("Failed bridge request, failed to load content!") + if(!result.success) + TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!") return - var/list/bridge_response = json_decode(response_json) + var/list/bridge_response = json_decode(result.response_text) if(!bridge_response) - TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") + TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]") return var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] diff --git a/code/modules/unit_tests/spritesheets.dm b/code/modules/unit_tests/spritesheets.dm index c7c16c6535..142d3f9588 100644 --- a/code/modules/unit_tests/spritesheets.dm +++ b/code/modules/unit_tests/spritesheets.dm @@ -2,6 +2,7 @@ /datum/unit_test/spritesheets /datum/unit_test/spritesheets/Run() + var/regex/valid_css_class = new(@"^([\l_][\w\-]|[\l_\-][\l_])") for(var/datum/asset/spritesheet/sheet as anything in subtypesof(/datum/asset/spritesheet)) if(!initial(sheet.name)) //Ignore abstract types continue @@ -9,3 +10,6 @@ for(var/sprite_name in sheet.sprites) if(!sprite_name) TEST_FAIL("Spritesheet [sheet.type] has a nameless icon state.") + if(!valid_css_class.Find(sprite_name)) + // https://www.w3.org/TR/CSS2/syndata.html#value-def-identifier + TEST_FAIL("Spritesheet [sheet.type] has a icon state that doesn't comply with css standards: '[sprite_name]'.") diff --git a/colonialmarines.dme b/colonialmarines.dme index d814088a41..d5e035d6d2 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1405,6 +1405,7 @@ #include "code\modules\admin\game_master\resin_panel.dm" #include "code\modules\admin\game_master\sound_panel.dm" #include "code\modules\admin\game_master\extra_buttons\fire_support_menu.dm" +#include "code\modules\admin\game_master\extra_buttons\marine_announce.dm" #include "code\modules\admin\game_master\extra_buttons\rappel_menu.dm" #include "code\modules\admin\game_master\extra_buttons\rename_platoon.dm" #include "code\modules\admin\game_master\extra_buttons\toggle_ai_xeno_weeding.dm" diff --git a/html/changelogs/AutoChangeLog-pr-386.yml b/html/changelogs/AutoChangeLog-pr-386.yml new file mode 100644 index 0000000000..f1e71e70fd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-386.yml @@ -0,0 +1,4 @@ +author: "Doubleumc" +delete-after: True +changes: + - bugfix: "fixed WeaponStats TGUI" \ No newline at end of file diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml index f401f98deb..050c64bd12 100644 --- a/html/changelogs/archive/2024-08.yml +++ b/html/changelogs/archive/2024-08.yml @@ -57,3 +57,22 @@ sunofang: - rscadd: Due to budget increases, Close Air Support now has ammo. - admin: Added a fire support menu for GM's to use. +2024-08-11: + private-tristan: + - balance: M56D has been buffed with more damage, accuracy, and firerate. +2024-08-18: + BonniePandora: + - rscadd: Adds a Golden-Arrow specific sub-set of the smartgunners sidearm belt + - rscadd: Adds the above to the corresponding lockers, both on the standard & FORECON + smartgunner ones + Doubleumc: + - rscadd: Added 1 hour squad role timelocks for PltSgt, PltCo + - admin: '"Start Round" can start a delayed round' + nauticall: + - rscadd: Added a quick "Command Announcement" button for Game Masters, available + in the GM tab. + sunofang: + - admin: Spawn menu no longer populates by default, and doesnt cause you to lag. + xDanilcusx: + - bugfix: AI can track through electrified/locked/welded doors + - code_imp: AI now doesn't swipe on poddoors and shutters, opening them instead diff --git a/html/create_object.html b/html/create_object.html index a4c3085a9a..0625ab9e5c 100644 --- a/html/create_object.html +++ b/html/create_object.html @@ -37,7 +37,6 @@ var objects = object_paths == null ? new Array() : object_paths.split(";"); document.spawner.filter.focus(); - populateList(objects); function populateList(from_list) { object_list.options.length = 0; diff --git a/icons/mob/humans/onmob/eyes.dmi b/icons/mob/humans/onmob/eyes.dmi index c4d743f61e..9a4fd3bd64 100644 Binary files a/icons/mob/humans/onmob/eyes.dmi and b/icons/mob/humans/onmob/eyes.dmi differ diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi index a5e0100844..a316ccf8c4 100644 Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi index 016a1cd6c0..2b3b3a091c 100644 Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/under.dmi b/icons/obj/items/weapons/guns/attachments/under.dmi index a3691b8cc5..8947ecd174 100644 Binary files a/icons/obj/items/weapons/guns/attachments/under.dmi and b/icons/obj/items/weapons/guns/attachments/under.dmi differ diff --git a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi index c5946b587a..e57c625158 100644 Binary files a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi differ diff --git a/icons/obj/items/weapons/guns/lineart.dmi b/icons/obj/items/weapons/guns/lineart.dmi index 35241cf3a3..6920290c7e 100644 Binary files a/icons/obj/items/weapons/guns/lineart.dmi and b/icons/obj/items/weapons/guns/lineart.dmi differ diff --git a/icons/obj/items/weapons/guns/lineart_modes.dmi b/icons/obj/items/weapons/guns/lineart_modes.dmi new file mode 100644 index 0000000000..787fdd34f2 Binary files /dev/null and b/icons/obj/items/weapons/guns/lineart_modes.dmi differ diff --git a/nano/images/weapons/88m4.png b/nano/images/weapons/88m4.png deleted file mode 100644 index 77faa65720..0000000000 Binary files a/nano/images/weapons/88m4.png and /dev/null differ diff --git a/nano/images/weapons/aamateba.png b/nano/images/weapons/aamateba.png deleted file mode 100644 index 30a5c1c72c..0000000000 Binary files a/nano/images/weapons/aamateba.png and /dev/null differ diff --git a/nano/images/weapons/amateba.png b/nano/images/weapons/amateba.png deleted file mode 100644 index 6d411d2ad7..0000000000 Binary files a/nano/images/weapons/amateba.png and /dev/null differ diff --git a/nano/images/weapons/auto.png b/nano/images/weapons/auto.png deleted file mode 100644 index 7efc6ff1c8..0000000000 Binary files a/nano/images/weapons/auto.png and /dev/null differ diff --git a/nano/images/weapons/auto9.png b/nano/images/weapons/auto9.png deleted file mode 100644 index 8fbc101f2f..0000000000 Binary files a/nano/images/weapons/auto9.png and /dev/null differ diff --git a/nano/images/weapons/b92fs.png b/nano/images/weapons/b92fs.png deleted file mode 100644 index 2788124dfb..0000000000 Binary files a/nano/images/weapons/b92fs.png and /dev/null differ diff --git a/nano/images/weapons/burst.png b/nano/images/weapons/burst.png deleted file mode 100644 index 669bd676eb..0000000000 Binary files a/nano/images/weapons/burst.png and /dev/null differ diff --git a/nano/images/weapons/c70.png b/nano/images/weapons/c70.png deleted file mode 100644 index b7e2ed731b..0000000000 Binary files a/nano/images/weapons/c70.png and /dev/null differ diff --git a/nano/images/weapons/c_deagle.png b/nano/images/weapons/c_deagle.png deleted file mode 100644 index c2a5c991ac..0000000000 Binary files a/nano/images/weapons/c_deagle.png and /dev/null differ diff --git a/nano/images/weapons/cmateba.png b/nano/images/weapons/cmateba.png deleted file mode 100644 index f949d4b547..0000000000 Binary files a/nano/images/weapons/cmateba.png and /dev/null differ diff --git a/nano/images/weapons/cshotgun.png b/nano/images/weapons/cshotgun.png deleted file mode 100644 index 9820f58546..0000000000 Binary files a/nano/images/weapons/cshotgun.png and /dev/null differ diff --git a/nano/images/weapons/dartgun.png b/nano/images/weapons/dartgun.png deleted file mode 100644 index 218dc742dc..0000000000 Binary files a/nano/images/weapons/dartgun.png and /dev/null differ diff --git a/nano/images/weapons/deagle.png b/nano/images/weapons/deagle.png deleted file mode 100644 index 059a730d7e..0000000000 Binary files a/nano/images/weapons/deagle.png and /dev/null differ diff --git a/nano/images/weapons/disabled_automatic.png b/nano/images/weapons/disabled_automatic.png deleted file mode 100644 index 94da079d80..0000000000 Binary files a/nano/images/weapons/disabled_automatic.png and /dev/null differ diff --git a/nano/images/weapons/disabled_burst.png b/nano/images/weapons/disabled_burst.png deleted file mode 100644 index 71b88bcaf9..0000000000 Binary files a/nano/images/weapons/disabled_burst.png and /dev/null differ diff --git a/nano/images/weapons/disabled_single.png b/nano/images/weapons/disabled_single.png deleted file mode 100644 index bf2cef4b15..0000000000 Binary files a/nano/images/weapons/disabled_single.png and /dev/null differ diff --git a/nano/images/weapons/dshotgun.png b/nano/images/weapons/dshotgun.png deleted file mode 100644 index cd79598281..0000000000 Binary files a/nano/images/weapons/dshotgun.png and /dev/null differ diff --git a/nano/images/weapons/fp9000.png b/nano/images/weapons/fp9000.png deleted file mode 100644 index b9f971eb07..0000000000 Binary files a/nano/images/weapons/fp9000.png and /dev/null differ diff --git a/nano/images/weapons/fp9000_pmc.png b/nano/images/weapons/fp9000_pmc.png deleted file mode 100644 index b9f971eb07..0000000000 Binary files a/nano/images/weapons/fp9000_pmc.png and /dev/null differ diff --git a/nano/images/weapons/g_deagle.png b/nano/images/weapons/g_deagle.png deleted file mode 100644 index c2a5c991ac..0000000000 Binary files a/nano/images/weapons/g_deagle.png and /dev/null differ diff --git a/nano/images/weapons/hg3712.png b/nano/images/weapons/hg3712.png deleted file mode 100644 index f7f32190c4..0000000000 Binary files a/nano/images/weapons/hg3712.png and /dev/null differ diff --git a/nano/images/weapons/highpower.png b/nano/images/weapons/highpower.png deleted file mode 100644 index a7d25c4480..0000000000 Binary files a/nano/images/weapons/highpower.png and /dev/null differ diff --git a/nano/images/weapons/holdout.png b/nano/images/weapons/holdout.png deleted file mode 100644 index 1d6f26fad2..0000000000 Binary files a/nano/images/weapons/holdout.png and /dev/null differ diff --git a/nano/images/weapons/hunting.png b/nano/images/weapons/hunting.png deleted file mode 100644 index 5d9613117f..0000000000 Binary files a/nano/images/weapons/hunting.png and /dev/null differ diff --git a/nano/images/weapons/kt42.png b/nano/images/weapons/kt42.png deleted file mode 100644 index ecf0ee41a9..0000000000 Binary files a/nano/images/weapons/kt42.png and /dev/null differ diff --git a/nano/images/weapons/l42mk1.png b/nano/images/weapons/l42mk1.png deleted file mode 100644 index b5efcc14d3..0000000000 Binary files a/nano/images/weapons/l42mk1.png and /dev/null differ diff --git a/nano/images/weapons/m16.png b/nano/images/weapons/m16.png deleted file mode 100644 index 2287f73196..0000000000 Binary files a/nano/images/weapons/m16.png and /dev/null differ diff --git a/nano/images/weapons/m240.png b/nano/images/weapons/m240.png deleted file mode 100644 index 72eb477c9e..0000000000 Binary files a/nano/images/weapons/m240.png and /dev/null differ diff --git a/nano/images/weapons/m240t.png b/nano/images/weapons/m240t.png deleted file mode 100644 index 619551d690..0000000000 Binary files a/nano/images/weapons/m240t.png and /dev/null differ diff --git a/nano/images/weapons/m37-17.png b/nano/images/weapons/m37-17.png deleted file mode 100644 index 7d53cbd761..0000000000 Binary files a/nano/images/weapons/m37-17.png and /dev/null differ diff --git a/nano/images/weapons/m37.png b/nano/images/weapons/m37.png deleted file mode 100644 index f888adaeb6..0000000000 Binary files a/nano/images/weapons/m37.png and /dev/null differ diff --git a/nano/images/weapons/m39.png b/nano/images/weapons/m39.png deleted file mode 100644 index f6fbb0a489..0000000000 Binary files a/nano/images/weapons/m39.png and /dev/null differ diff --git a/nano/images/weapons/m41a.png b/nano/images/weapons/m41a.png deleted file mode 100644 index 9476e0d1f4..0000000000 Binary files a/nano/images/weapons/m41a.png and /dev/null differ diff --git a/nano/images/weapons/m41a2.png b/nano/images/weapons/m41a2.png deleted file mode 100644 index 4179cb37f5..0000000000 Binary files a/nano/images/weapons/m41a2.png and /dev/null differ diff --git a/nano/images/weapons/m41ae2.png b/nano/images/weapons/m41ae2.png deleted file mode 100644 index 4a5232fd66..0000000000 Binary files a/nano/images/weapons/m41ae2.png and /dev/null differ diff --git a/nano/images/weapons/m41amk1.png b/nano/images/weapons/m41amk1.png deleted file mode 100644 index 3f44c62b0f..0000000000 Binary files a/nano/images/weapons/m41amk1.png and /dev/null differ diff --git a/nano/images/weapons/m41b.png b/nano/images/weapons/m41b.png deleted file mode 100644 index 1d63443f25..0000000000 Binary files a/nano/images/weapons/m41b.png and /dev/null differ diff --git a/nano/images/weapons/m42a.png b/nano/images/weapons/m42a.png deleted file mode 100644 index f0d07328c1..0000000000 Binary files a/nano/images/weapons/m42a.png and /dev/null differ diff --git a/nano/images/weapons/m42c.png b/nano/images/weapons/m42c.png deleted file mode 100644 index 47d53b86ce..0000000000 Binary files a/nano/images/weapons/m42c.png and /dev/null differ diff --git a/nano/images/weapons/m44r.png b/nano/images/weapons/m44r.png deleted file mode 100644 index d7deb2589e..0000000000 Binary files a/nano/images/weapons/m44r.png and /dev/null differ diff --git a/nano/images/weapons/m44rc.png b/nano/images/weapons/m44rc.png deleted file mode 100644 index 1c20973a0a..0000000000 Binary files a/nano/images/weapons/m44rc.png and /dev/null differ diff --git a/nano/images/weapons/m46c.png b/nano/images/weapons/m46c.png deleted file mode 100644 index d404a6d88f..0000000000 Binary files a/nano/images/weapons/m46c.png and /dev/null differ diff --git a/nano/images/weapons/m4a3.png b/nano/images/weapons/m4a3.png deleted file mode 100644 index 9169c71c51..0000000000 Binary files a/nano/images/weapons/m4a3.png and /dev/null differ diff --git a/nano/images/weapons/m4a345.png b/nano/images/weapons/m4a345.png deleted file mode 100644 index 1ba0015846..0000000000 Binary files a/nano/images/weapons/m4a345.png and /dev/null differ diff --git a/nano/images/weapons/m4a3c.png b/nano/images/weapons/m4a3c.png deleted file mode 100644 index 95731a6c71..0000000000 Binary files a/nano/images/weapons/m4a3c.png and /dev/null differ diff --git a/nano/images/weapons/m5.png b/nano/images/weapons/m5.png deleted file mode 100644 index 7d502fdaaf..0000000000 Binary files a/nano/images/weapons/m5.png and /dev/null differ diff --git a/nano/images/weapons/m56.png b/nano/images/weapons/m56.png deleted file mode 100644 index baf9b9bd9c..0000000000 Binary files a/nano/images/weapons/m56.png and /dev/null differ diff --git a/nano/images/weapons/m57a4.png b/nano/images/weapons/m57a4.png deleted file mode 100644 index 6c2cbcbdbe..0000000000 Binary files a/nano/images/weapons/m57a4.png and /dev/null differ diff --git a/nano/images/weapons/m60.png b/nano/images/weapons/m60.png deleted file mode 100644 index 08baffaa74..0000000000 Binary files a/nano/images/weapons/m60.png and /dev/null differ diff --git a/nano/images/weapons/m79.png b/nano/images/weapons/m79.png deleted file mode 100644 index 365280f242..0000000000 Binary files a/nano/images/weapons/m79.png and /dev/null differ diff --git a/nano/images/weapons/m81.png b/nano/images/weapons/m81.png deleted file mode 100644 index 7b1a6a195b..0000000000 Binary files a/nano/images/weapons/m81.png and /dev/null differ diff --git a/nano/images/weapons/m82f.png b/nano/images/weapons/m82f.png deleted file mode 100644 index f6d5e24ec8..0000000000 Binary files a/nano/images/weapons/m82f.png and /dev/null differ diff --git a/nano/images/weapons/m92.png b/nano/images/weapons/m92.png deleted file mode 100644 index ce64c3df36..0000000000 Binary files a/nano/images/weapons/m92.png and /dev/null differ diff --git a/nano/images/weapons/m93b2.png b/nano/images/weapons/m93b2.png deleted file mode 100644 index 987f56643a..0000000000 Binary files a/nano/images/weapons/m93b2.png and /dev/null differ diff --git a/nano/images/weapons/mac15.png b/nano/images/weapons/mac15.png deleted file mode 100644 index 179c8b7a61..0000000000 Binary files a/nano/images/weapons/mac15.png and /dev/null differ diff --git a/nano/images/weapons/mar30.png b/nano/images/weapons/mar30.png deleted file mode 100644 index 3a5c19f336..0000000000 Binary files a/nano/images/weapons/mar30.png and /dev/null differ diff --git a/nano/images/weapons/mar40.png b/nano/images/weapons/mar40.png deleted file mode 100644 index 043d6529ef..0000000000 Binary files a/nano/images/weapons/mar40.png and /dev/null differ diff --git a/nano/images/weapons/mateba.png b/nano/images/weapons/mateba.png deleted file mode 100644 index 49ec3f897a..0000000000 Binary files a/nano/images/weapons/mateba.png and /dev/null differ diff --git a/nano/images/weapons/mk221.png b/nano/images/weapons/mk221.png deleted file mode 100644 index a15773fb26..0000000000 Binary files a/nano/images/weapons/mk221.png and /dev/null differ diff --git a/nano/images/weapons/mou.png b/nano/images/weapons/mou.png deleted file mode 100644 index a471e16f6e..0000000000 Binary files a/nano/images/weapons/mou.png and /dev/null differ diff --git a/nano/images/weapons/mp5.png b/nano/images/weapons/mp5.png deleted file mode 100644 index e36fccdca4..0000000000 Binary files a/nano/images/weapons/mp5.png and /dev/null differ diff --git a/nano/images/weapons/mp7.png b/nano/images/weapons/mp7.png deleted file mode 100644 index 9494c8003d..0000000000 Binary files a/nano/images/weapons/mp7.png and /dev/null differ diff --git a/nano/images/weapons/no_name.png b/nano/images/weapons/no_name.png deleted file mode 100644 index 8babb2fda5..0000000000 Binary files a/nano/images/weapons/no_name.png and /dev/null differ diff --git a/nano/images/weapons/ny762.png b/nano/images/weapons/ny762.png deleted file mode 100644 index bdd5fe500e..0000000000 Binary files a/nano/images/weapons/ny762.png and /dev/null differ diff --git a/nano/images/weapons/painless.png b/nano/images/weapons/painless.png deleted file mode 100644 index f493c662eb..0000000000 Binary files a/nano/images/weapons/painless.png and /dev/null differ diff --git a/nano/images/weapons/pk9.png b/nano/images/weapons/pk9.png deleted file mode 100644 index 7c66494637..0000000000 Binary files a/nano/images/weapons/pk9.png and /dev/null differ diff --git a/nano/images/weapons/pk9r.png b/nano/images/weapons/pk9r.png deleted file mode 100644 index be9adcd507..0000000000 Binary files a/nano/images/weapons/pk9r.png and /dev/null differ diff --git a/nano/images/weapons/pk9u.png b/nano/images/weapons/pk9u.png deleted file mode 100644 index 519f574f6e..0000000000 Binary files a/nano/images/weapons/pk9u.png and /dev/null differ diff --git a/nano/images/weapons/ppsh17b.png b/nano/images/weapons/ppsh17b.png deleted file mode 100644 index 4ea9e0214f..0000000000 Binary files a/nano/images/weapons/ppsh17b.png and /dev/null differ diff --git a/nano/images/weapons/single.png b/nano/images/weapons/single.png deleted file mode 100644 index 2f784868ca..0000000000 Binary files a/nano/images/weapons/single.png and /dev/null differ diff --git a/nano/images/weapons/skorpion.png b/nano/images/weapons/skorpion.png deleted file mode 100644 index 342fc75e3e..0000000000 Binary files a/nano/images/weapons/skorpion.png and /dev/null differ diff --git a/nano/images/weapons/skorpion_u.png b/nano/images/weapons/skorpion_u.png deleted file mode 100644 index 72128e1f46..0000000000 Binary files a/nano/images/weapons/skorpion_u.png and /dev/null differ diff --git a/nano/images/weapons/smartpistol.png b/nano/images/weapons/smartpistol.png deleted file mode 100644 index e688ac9260..0000000000 Binary files a/nano/images/weapons/smartpistol.png and /dev/null differ diff --git a/nano/images/weapons/spearhead.png b/nano/images/weapons/spearhead.png deleted file mode 100644 index 7b740dbdc5..0000000000 Binary files a/nano/images/weapons/spearhead.png and /dev/null differ diff --git a/nano/images/weapons/sshotgun.png b/nano/images/weapons/sshotgun.png deleted file mode 100644 index f052433653..0000000000 Binary files a/nano/images/weapons/sshotgun.png and /dev/null differ diff --git a/nano/images/weapons/supremo.png b/nano/images/weapons/supremo.png deleted file mode 100644 index 83f6a6fb4b..0000000000 Binary files a/nano/images/weapons/supremo.png and /dev/null differ diff --git a/nano/images/weapons/svd003.png b/nano/images/weapons/svd003.png deleted file mode 100644 index 6395b8d3b6..0000000000 Binary files a/nano/images/weapons/svd003.png and /dev/null differ diff --git a/nano/images/weapons/sw357.png b/nano/images/weapons/sw357.png deleted file mode 100644 index a89ea9cb2f..0000000000 Binary files a/nano/images/weapons/sw357.png and /dev/null differ diff --git a/nano/images/weapons/sw358.png b/nano/images/weapons/sw358.png deleted file mode 100644 index c24e72bfce..0000000000 Binary files a/nano/images/weapons/sw358.png and /dev/null differ diff --git a/nano/images/weapons/syringegun.png b/nano/images/weapons/syringegun.png deleted file mode 100644 index bf18bf425d..0000000000 Binary files a/nano/images/weapons/syringegun.png and /dev/null differ diff --git a/nano/images/weapons/taser.png b/nano/images/weapons/taser.png deleted file mode 100644 index 6337a89966..0000000000 Binary files a/nano/images/weapons/taser.png and /dev/null differ diff --git a/nano/images/weapons/type71.png b/nano/images/weapons/type71.png deleted file mode 100644 index 700ff164d6..0000000000 Binary files a/nano/images/weapons/type71.png and /dev/null differ diff --git a/nano/images/weapons/type71c.png b/nano/images/weapons/type71c.png deleted file mode 100644 index 273ac0bcbe..0000000000 Binary files a/nano/images/weapons/type71c.png and /dev/null differ diff --git a/nano/images/weapons/type73.png b/nano/images/weapons/type73.png deleted file mode 100644 index 63294f7cc9..0000000000 Binary files a/nano/images/weapons/type73.png and /dev/null differ diff --git a/nano/images/weapons/vp78.png b/nano/images/weapons/vp78.png deleted file mode 100644 index 2383b4e3ad..0000000000 Binary files a/nano/images/weapons/vp78.png and /dev/null differ diff --git a/nano/images/weapons/xm42b.png b/nano/images/weapons/xm42b.png deleted file mode 100644 index 645c552314..0000000000 Binary files a/nano/images/weapons/xm42b.png and /dev/null differ diff --git a/tgui/packages/tgui/interfaces/WeaponStats.jsx b/tgui/packages/tgui/interfaces/WeaponStats.jsx index 4978e93ec0..4def237f6b 100644 --- a/tgui/packages/tgui/interfaces/WeaponStats.jsx +++ b/tgui/packages/tgui/interfaces/WeaponStats.jsx @@ -1,4 +1,5 @@ import { map } from 'common/collections'; +import { classes } from 'common/react'; import { useBackend } from '../backend'; import { Box, Divider, Flex, ProgressBar, Section, Table } from '../components'; @@ -68,7 +69,7 @@ const GeneralInfo = (props) => { - + @@ -78,25 +79,33 @@ const GeneralInfo = (props) => { - {!auto_only ? ( - - ) : ( - - )} + - {!auto_only && burst_amount > 1 ? ( - - ) : ( - - )} + 1 ? 'burst' : 'disabled_burst' + }`, + ])} + /> - {automatic ? ( - - ) : ( - - )} + @@ -272,13 +281,27 @@ const Accuracy = (props) => { const Range = (props) => { const { data } = useBackend(); - const { max_range, range_max, falloff, falloff_max } = data; + const { + max_range, + range_max, + falloff, + falloff_max, + effective_range, + effective_range_max, + } = data; return ( <> Max range: {max_range} / {range_max} + + Effective range: {effective_range} + + Falloff: {falloff} / {falloff_max} @@ -289,16 +312,13 @@ const Range = (props) => { const ArmourPen = (props) => { const { data } = useBackend(); - const { penetration, penetration_max, armor_punch, punch_max } = data; + const { penetration, penetration_max } = data; return ( <> Armour penetration: {penetration} / {penetration_max} - - Armour punch: {armor_punch} / {punch_max} - ); }; @@ -308,9 +328,7 @@ const DamageTable = (props) => { const { damage_armor_profile_marine, damage_armor_profile_xeno, - damage_armor_profile_armorbreak, damage_armor_profile_headers, - glob_armourbreak, } = data; return (
@@ -337,14 +355,6 @@ const DamageTable = (props) => { {entry} ))} - {!glob_armourbreak ? ( - - Armor break - {map(damage_armor_profile_armorbreak, (entry, i) => ( - {entry} - ))} - - ) : null}
);