Files
Bubberstation/code/modules/research/techweb/nodes/cyborg_nodes.dm
necromanceranne e9471b00b0 Adds the NT BR-38 Battle Rifle. A sci-fi hybrid gun, but better than the last attempt. Only SOMETIMES fails at existence. (#88095)
## About The Pull Request

A repeat of the first half of
https://github.com/tgstation/tgstation/pull/86853

The NT BR-38 Battle Rifle is a semi-automatic
railgun...marksman...carbine...rifle...thingy that uses .38 ammunition
and is magazine fed from a 15 round magazine. It comes with a scope, and
is bulky.


![image](https://github.com/user-attachments/assets/456aba07-ba0a-4ad3-993c-7fc2bc1395d6)

Sprites by OrcaCora.

### Some of its features

The gun shoots at a higher than normal velocity for .38. This means it
hits harder (30 damage compared to the standard 25), and flies faster
through the air.

The gun, however, suffers from degradation as it is used. It has a 10
shot buffer before suffering degradation. After the 10 shot buffer, it
has a 10% chance each shot to increase in degradation stage. From stage
1 to stage 5 (the maximum stage), it begins to lose fire rate and
projectile flight speed.

To recalibrate the gun, you can do one of two things; 
A) Use a multitool on the gun. This completely resets the gun, but its
pretty slow.
B) Insert it into a weapon recharger to recharge its buffer and reduce
its degradation stages.

### Some of its downsides

The weapon is EMP vulnerable. If it gets EMP'd, it immediately degrades
and loses any buffer it has. While EMP'd, there is a 75% chance it
doesn't fire when you pull the trigger. This is also true if the gun has
hit maximum degradation. Keep your guns in good shape.

It can be emagged. While emagged, the gun has increased damage (40 for
standard ammunition), but once it hits maximum degradation, it
immediately begins to catastrophically fail. It also degrades
significantly faster while emagged. There is no way to reverse this
effect, and the explosion is extremely lethal.

### Where can I find it? What about ammo?

You can purchase the gun from cargo at a significant premium, as well as
some additional magazines of some basic ammo types.

There is exactly one of these in the armory, and you can print more
magazines from the security protolathe. As research progresses, you can
print different, specialized ammunition for the rifle. (and also the
detective .38 revolver, obviously)

### New .38 ammunition types

True Strike bounces accurately between targets, but deals significantly
less damage than other ammo types (15 base, 18 in this rifle).

It is printed once the station gets Exotic Ammo.

## Why It's Good For The Game

This is a followup on my previous PR, where I tested this weapon and
gathered a whole bunch of feedback on it. Most people quite liked it.
but had some concerns that I feel this addresses.

Much of the justifications given there apply here. Obviously ignoring
anything to do with the combat shotgun removal.

Some stuff obviously has not come back from the original test. Notably,
the TRAC changes were probably a little too powerful. As much as I liked
a default entirely nonlethal ammunition type, TRAC itself is better left
as a late research goal.

In addition, I moved the explosion part to an emag effect. It's funny,
and lends itself to the original intention of the weapon; a callback to
the WT-550 incident. But it isn't a standard part of the guns mechanics.
2024-12-13 19:46:24 +00:00

253 lines
8.3 KiB
Plaintext

/datum/techweb_node/augmentation
id = TECHWEB_NODE_AUGMENTATION
starting_node = TRUE
display_name = "Augmentation"
description = "For those who prefer shiny metal over squishy flesh."
prereq_ids = list(TECHWEB_NODE_ROBOTICS)
design_ids = list(
"borg_chest",
"borg_head",
"borg_l_arm",
"borg_l_leg",
"borg_r_arm",
"borg_r_leg",
"borg_suit",
"cybernetic_eyes",
"cybernetic_eyes_moth",
"cybernetic_ears",
"cybernetic_lungs",
"cybernetic_stomach",
"cybernetic_liver",
"cybernetic_heart",
)
experiments_to_unlock = list(
/datum/experiment/scanning/people/android,
)
/datum/techweb_node/cybernetics
id = TECHWEB_NODE_CYBERNETICS
display_name = "Cybernetics"
description = "Sapient robots with preloaded tool modules and programmable laws."
prereq_ids = list(TECHWEB_NODE_AUGMENTATION)
design_ids = list(
"robocontrol",
"borgupload",
"cyborgrecharger",
"mmi_posi",
"mmi",
"mmi_m",
"advanced_l_arm",
"advanced_r_arm",
"advanced_l_leg",
"advanced_r_leg",
"borg_upgrade_rename",
"borg_upgrade_restart",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
/datum/techweb_node/borg_service
id = TECHWEB_NODE_BORG_SERVICES
display_name = "Service Cyborg Upgrades"
description = "Let them do the cookin' by the book."
prereq_ids = list(TECHWEB_NODE_CYBERNETICS)
design_ids = list(
"borg_upgrade_rolling_table",
"borg_upgrade_condiment_synthesizer",
"borg_upgrade_silicon_knife",
"borg_upgrade_service_apparatus",
"borg_upgrade_drink_apparatus",
"borg_upgrade_service_cookbook",
"borg_upgrade_botany",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
/datum/techweb_node/borg_mining
id = TECHWEB_NODE_BORG_MINING
display_name = "Mining Cyborg Upgrades"
description = "To mine places too dangerous for humans."
prereq_ids = list(TECHWEB_NODE_CYBERNETICS)
design_ids = list(
"borg_upgrade_lavaproof",
"borg_upgrade_holding",
"borg_upgrade_diamonddrill",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
/datum/techweb_node/borg_medical
id = TECHWEB_NODE_BORG_MEDICAL
display_name = "Medical Cyborg Upgrades"
description = "Let them follow Asimov's First Law."
prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SURGERY_ADV)
design_ids = list(
"borg_upgrade_pinpointer",
"borg_upgrade_beakerapp",
"borg_upgrade_defibrillator",
"borg_upgrade_expandedsynthesiser",
"borg_upgrade_piercinghypospray",
"borg_upgrade_surgicalprocessor",
"borg_upgrade_surgicalomnitool",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
/datum/techweb_node/borg_utility
id = TECHWEB_NODE_BORG_UTILITY
display_name = "Utility Cyborg Upgrades"
description = "Let them wipe our floors for us."
prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SANITATION)
design_ids = list(
"borg_upgrade_advancedmop",
"borg_upgrade_broomer",
"borg_upgrade_expand",
"borg_upgrade_prt",
"borg_upgrade_plunger",
"borg_upgrade_high_capacity_replacer",
"borg_upgrade_selfrepair",
"borg_upgrade_thrusters",
"borg_upgrade_trashofholding",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
/datum/techweb_node/borg_utility/New()
. = ..()
if(!CONFIG_GET(flag/disable_secborg))
design_ids += "borg_upgrade_disablercooler"
/datum/techweb_node/borg_engi
id = TECHWEB_NODE_BORG_ENGI
display_name = "Engineering Cyborg Upgrades"
description = "To slack even more."
prereq_ids = list(TECHWEB_NODE_BORG_MINING, TECHWEB_NODE_PARTS_UPG)
design_ids = list(
"borg_upgrade_rped",
"borg_upgrade_engineeringomnitool",
"borg_upgrade_circuitapp",
"borg_upgrade_inducer",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
// Implants root node
/datum/techweb_node/passive_implants
id = TECHWEB_NODE_PASSIVE_IMPLANTS
display_name = "Passive Implants"
description = "Implants designed to operate seamlessly without active user input, enhancing various physiological functions or providing continuous benefits."
prereq_ids = list(TECHWEB_NODE_AUGMENTATION)
design_ids = list(
"skill_station",
"implant_trombone",
"implant_chem",
"implant_tracking",
"implant_exile",
"implant_beacon",
"implant_bluespace",
"implantcase",
"implanter",
"locator",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/cyber/cyber_implants
id = TECHWEB_NODE_CYBER_IMPLANTS
display_name = "Cybernetic Implants"
description = "Advanced technological enhancements integrated into the body, offering improved physical capabilities."
prereq_ids = list(TECHWEB_NODE_PASSIVE_IMPLANTS, TECHWEB_NODE_CYBERNETICS)
design_ids = list(
"ci-breather",
"ci-nutriment",
"ci-thrusters",
"ci-herculean",
"ci-connector",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/cyber/New()
..()
if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
research_costs[TECHWEB_POINT_TYPE_GENERIC] /= 2
/datum/techweb_node/cyber/combat_implants
id = TECHWEB_NODE_COMBAT_IMPLANTS
display_name = "Combat Implants"
description = "To make sure that you can wake the f*** up, samurai."
prereq_ids = list(TECHWEB_NODE_CYBER_IMPLANTS)
design_ids = list(
"ci-reviver",
"ci-antidrop",
"ci-antistun",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/cyber/integrated_toolsets
id = TECHWEB_NODE_INTERGRATED_TOOLSETS
display_name = "Integrated Toolsets"
description = "Decades of contraband smuggling by assistants have led to the development of a full toolbox that fits seamlessly into your arm."
prereq_ids = list(TECHWEB_NODE_COMBAT_IMPLANTS, TECHWEB_NODE_EXP_TOOLS)
design_ids = list(
"ci-nutrimentplus",
"ci-toolset",
"ci-surgery",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/cyber/cyber_organs
id = TECHWEB_NODE_CYBER_ORGANS
display_name = "Cybernetic Organs"
description = "We have the technology to rebuild him."
prereq_ids = list(TECHWEB_NODE_CYBERNETICS)
design_ids = list(
"cybernetic_eyes_improved",
"cybernetic_eyes_improved_moth",
"cybernetic_ears_u",
"cybernetic_lungs_tier2",
"cybernetic_stomach_tier2",
"cybernetic_liver_tier2",
"cybernetic_heart_tier2",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/cyber/cyber_organs_upgraded
id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED
display_name = "Upgraded Cybernetic Organs"
description = "We have the technology to upgrade him."
prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS)
design_ids = list(
"ci-gloweyes",
"ci-welding",
"ci-gloweyes-moth",
"ci-welding-moth",
"cybernetic_ears_whisper",
"cybernetic_lungs_tier3",
"cybernetic_stomach_tier3",
"cybernetic_liver_tier3",
"cybernetic_heart_tier3",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
required_experiments = list(/datum/experiment/scanning/people/augmented_organs)
announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/cyber/cyber_organs_adv
id = TECHWEB_NODE_CYBER_ORGANS_ADV
display_name = "Advanced Cybernetic Organs"
description = "Cutting-edge cybernetic organs offering enhanced sensory capabilities, making it easier than ever to detect ERP."
prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS_UPGRADED, TECHWEB_NODE_NIGHT_VISION)
design_ids = list(
"cybernetic_ears_xray",
"ci-thermals",
"ci-xray",
"ci-thermals-moth",
"ci-xray-moth",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)