-
Notifications
You must be signed in to change notification settings - Fork 522
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
M707 "Vulture" Anti-Materiel Rifle (#4253)
# About the pull request ## The M707 is not made player-accessible in this PR. Adds the M707 "Vulture" anti-materiel rifle to the game. [Design doc here.](https://github.com/cmss13-devs/cmss13/files/12433899/M707_Final.pdf) The M707 is meant to take the place of a heavy support weapon, not unlike the mortar. It is a 20mm bolt-action rifle, capable of loading from 4-round magazines. Each round does 400 damage with full AP (50), but it is not a simple task to fire the weapon. The gun, being as high-caliber as it is, will immediately break your arm & hand if you do not fire it without use of the built-in bipod. In addition, its accuracy is massively reduced below its ideal range (10 tiles), which means the scope is necessary to be used. The scope does not function like a regular scope. (see screenshot section for details) Instead, it shows a 5x5 area (the rest is blacked out) 12 tiles ahead, with an aiming reticle in the center. The aiming reticle will drift over time within the 5x5, requiring you to re-adjust or use the **Hold Breath** ability to temporarily stop the sway. If you open up the scope's UI, you will be able to modify the scope and the reticle's location, one tile at a time, very slowly. To assist with this, the Vulture comes with a spotting scope & tripod. A secondary user is able to assemble and use the spotting scope. The scope is a complement to the Vulture's, allowing a communicative team to become far more effective. The spotter's view, on use, will be locked to the location of the Vulture scope. However, the spotter's view is not locked to a 5x5 area, instead getting a view of the full area, on top of an extra 2 tiles (in each direction) of view range. Finally, both the spotter and sniper's scopes have night vision equivalent to an SG's goggles. The bullet itself is a powerful beast. Powerful enough to pierce walls, people, and barricades, but with 2 caveats. The first is that every wall/cade penetration removes 75 damage from the round, and any cades/tables that the round passes over will be immediately destroyed by the round. In addition, anyone in a large range will hear the report of the rifle sound and the direction it came from. Update as of 8/31: Vulture and its spotter scope now require a pamphlet to use (a pamphlet gives the trait needed to use both), guncase spawns with 2. # Explain why it's good for the game It's a unique weapon that encourages communication inside a team, while simultaneously not contributing to the IFF ungaball. The weapon promotes thoughtful gameplay and repositioning to be able to hit a target without friendlies getting in the way or getting overrun. # Screenshots <details> <summary>Screenshots & Videos</summary> Scope UI ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/c5ff4c44-65ac-41be-a30a-1dbca019c8ab) The vulture's scope. ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/ea004c6f-10a6-4f02-a439-303710956286) Sniper's nest ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/6c9a5165-b831-43a8-ad48-a044c434fcfa) Closeup ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/6244a435-2c1f-43b8-b15d-003e247bf156) Spotter's vision ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/82259e26-5355-4362-a300-1ebe409bcb6d) </details> # Changelog :cl: Zonepace, Thwomper add: Added the M707 "Vulture" anti-materiel rifle. Not currently player-obtainable. Credit to Tophat and Kaga for the lore description. /:cl: --------- Co-authored-by: harryob <[email protected]>
- Loading branch information
1 parent
3534372
commit 7cb618c
Showing
76 changed files
with
1,526 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/datum/element/bullet_trait_penetrating/heavy | ||
// Generic bullet trait vars | ||
element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE | ||
id_arg_index = 3 | ||
|
||
/// For every turf this pierces, how much damage should this lose? | ||
var/damage_lost_per_pen = 100 | ||
/// Typecache of things to annihilate if the bullet is on a tile with it | ||
var/static/list/bullet_destroy_structures = typecacheof(list( | ||
/obj/structure/surface, | ||
/obj/structure/barricade, | ||
)) | ||
|
||
/datum/element/bullet_trait_penetrating/heavy/Attach(datum/target, distance_loss_per_hit = 3, damage_lost_per_pen = 75) | ||
. = ..() | ||
if(. == ELEMENT_INCOMPATIBLE) | ||
return | ||
|
||
src.damage_lost_per_pen = damage_lost_per_pen | ||
|
||
/datum/element/bullet_trait_penetrating/heavy/handle_passthrough_movables(obj/item/projectile/bullet, atom/movable/hit_movable, did_hit) | ||
if(did_hit) | ||
var/slow_mult = 1 | ||
if(ismob(hit_movable)) | ||
var/mob/mob = hit_movable | ||
if(mob.mob_size >= MOB_SIZE_BIG) | ||
slow_mult = 2 | ||
|
||
bullet.distance_travelled += (distance_loss_per_hit * slow_mult) | ||
|
||
if(is_type_in_typecache(hit_movable, bullet_destroy_structures)) | ||
var/obj/structure/cade = hit_movable | ||
cade.deconstruct() // This bullet just tears through whatever cades you put it up against from either side | ||
bullet.damage -= damage_lost_per_pen | ||
|
||
return COMPONENT_BULLET_PASS_THROUGH | ||
|
||
/datum/element/bullet_trait_penetrating/heavy/handle_passthrough_turf(obj/item/projectile/bullet, turf/closed/wall/hit_wall) | ||
bullet.distance_travelled += distance_loss_per_hit | ||
bullet.damage -= damage_lost_per_pen | ||
|
||
if(!istype(hit_wall)) | ||
return COMPONENT_BULLET_PASS_THROUGH | ||
|
||
if(!hit_wall.hull) | ||
return COMPONENT_BULLET_PASS_THROUGH | ||
|
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/obj/item/device/vulture_spotter_scope | ||
name = "\improper M707 spotter scope" | ||
desc = "A scope that, when mounted on a tripod, allows a user to assist the M707's firer in target acquisition." | ||
icon_state = "vulture_scope" | ||
item_state = "electronic" | ||
flags_atom = FPRINT|CONDUCT | ||
unacidable = TRUE | ||
indestructible = TRUE | ||
/// A weakref to the corresponding rifle | ||
var/datum/weakref/bound_rifle | ||
|
||
/obj/item/device/vulture_spotter_scope/Initialize(mapload, datum/weakref/rifle) | ||
. = ..() | ||
if(rifle) | ||
bound_rifle = rifle | ||
|
||
/obj/item/device/vulture_spotter_scope/attack_self(mob/user) | ||
. = ..() | ||
to_chat(user, SPAN_WARNING("[src] needs to be mounted on a tripod to use!")) | ||
|
||
/obj/item/device/vulture_spotter_tripod | ||
name = "\improper M707 spotter tripod" | ||
desc = "A tripod, meant for stabilizing a spotting scope for the M707 anti-materiel rifle." | ||
icon_state = "vulture_tripod" | ||
item_state = "electronic" | ||
flags_atom = FPRINT|CONDUCT | ||
unacidable = TRUE | ||
indestructible = TRUE | ||
|
||
/obj/item/device/vulture_spotter_tripod/get_examine_text(mob/user) | ||
. = ..() | ||
. += SPAN_NOTICE("[src] can be set down by <b>using in-hand</b>.") | ||
|
||
/obj/item/device/vulture_spotter_tripod/attack_self(mob/user) | ||
. = ..() | ||
user.balloon_alert(user, "setting up tripod...") | ||
if(!do_after(user, 1.5 SECONDS, target = user)) | ||
return | ||
|
||
new /obj/structure/vulture_spotter_tripod(get_turf(user)) | ||
qdel(src) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.