mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 18:02:57 +00:00
Merge remote-tracking branch 'upstream/master' into haha
This commit is contained in:
@@ -36,6 +36,14 @@
|
||||
if(isgun(fired_from))
|
||||
var/obj/item/gun/G = fired_from
|
||||
BB.damage *= G.projectile_damage_multiplier
|
||||
if(HAS_TRAIT(user, TRAIT_INSANE_AIM))
|
||||
BB.ricochets_max = max(BB.ricochets_max, 10) //bouncy!
|
||||
BB.ricochet_chance = max(BB.ricochet_chance, 100) //it wont decay so we can leave it at 100 for always bouncing
|
||||
BB.ricochet_auto_aim_range = max(BB.ricochet_auto_aim_range, 3)
|
||||
BB.ricochet_auto_aim_angle = max(BB.ricochet_auto_aim_angle, 360) //it can turn full circle and shoot you in the face because our aim? is insane.
|
||||
BB.ricochet_decay_chance = 0
|
||||
BB.ricochet_decay_damage = max(BB.ricochet_decay_damage, 0.1)
|
||||
BB.ricochet_incidence_leeway = 0
|
||||
|
||||
if(reagents && BB.reagents)
|
||||
reagents.trans_to(BB, reagents.total_volume) //For chemical darts/bullets
|
||||
|
||||
@@ -14,9 +14,13 @@
|
||||
/obj/item/ammo_casing/a357/match
|
||||
name = ".357 match bullet casing"
|
||||
desc = "A .357 bullet casing, manufactured to exceedingly high standards."
|
||||
caliber = "357"
|
||||
projectile_type = /obj/item/projectile/bullet/a357/match
|
||||
|
||||
/obj/item/ammo_casing/a357/dumdum
|
||||
name = ".357 DumDum bullet casing"
|
||||
desc = "A .357 bullet casing. Usage of this ammunition will constitute a war crime in your area."
|
||||
projectile_type = /obj/item/projectile/bullet/a357/dumdum
|
||||
|
||||
// 7.62x38mmR (Nagant Revolver)
|
||||
|
||||
/obj/item/ammo_casing/n762
|
||||
@@ -68,4 +72,4 @@
|
||||
/obj/item/ammo_casing/c38/dumdum
|
||||
name = ".38 DumDum bullet casing"
|
||||
desc = "A .38 DumDum bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/c38/dumdum
|
||||
projectile_type = /obj/item/projectile/bullet/c38/dumdum
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
name = "speed loader (.357 AP)"
|
||||
ammo_type = /obj/item/ammo_casing/a357/ap
|
||||
|
||||
/obj/item/ammo_box/a357/dumdum
|
||||
name = "speed loader (.357 DumDum)"
|
||||
desc = "Designed to quickly reload revolvers. Usage of these rounds will constitute a war crime in your area."
|
||||
ammo_type = /obj/item/ammo_casing/a357/dumdum
|
||||
|
||||
/obj/item/ammo_box/c38
|
||||
name = "speed loader (.38 rubber)"
|
||||
desc = "Designed to quickly reload revolvers."
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
|
||||
var/sawn_desc = null //description change if weapon is sawn-off
|
||||
var/sawn_off = FALSE
|
||||
|
||||
|
||||
/// can we be put into a turret
|
||||
var/can_turret = TRUE
|
||||
/// can we be put in a circuit
|
||||
@@ -310,8 +310,6 @@
|
||||
randomized_gun_spread = rand(0, spread)
|
||||
else if(burst_size > 1 && burst_spread)
|
||||
randomized_gun_spread = rand(0, burst_spread)
|
||||
if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex
|
||||
bonus_spread += 25
|
||||
var/randomized_bonus_spread = rand(0, bonus_spread)
|
||||
|
||||
if(burst_size > 1)
|
||||
@@ -603,10 +601,16 @@
|
||||
var/penalty = (last_fire + GUN_AIMING_TIME + fire_delay) - world.time
|
||||
if(penalty > 0) //Yet we only penalize users firing it multiple times in a haste. fire_delay isn't necessarily cumbersomeness.
|
||||
aiming_delay = penalty
|
||||
if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) //To be removed in favor of something less tactless later.
|
||||
if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE) || HAS_TRAIT(user, TRAIT_INSANE_AIM)) //To be removed in favor of something less tactless later.
|
||||
base_inaccuracy /= 1.5
|
||||
if(stamloss > STAMINA_NEAR_SOFTCRIT) //This can null out the above bonus.
|
||||
base_inaccuracy *= 1 + (stamloss - STAMINA_NEAR_SOFTCRIT)/(STAMINA_NEAR_CRIT - STAMINA_NEAR_SOFTCRIT)*0.5
|
||||
if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex
|
||||
if(!HAS_TRAIT(user, TRAIT_INSANE_AIM))
|
||||
bonus_spread += 25
|
||||
else
|
||||
//you have both poor aim and insane aim, why?
|
||||
bonus_spread += rand(0,50)
|
||||
var/mult = max((GUN_AIMING_TIME + aiming_delay + user.last_click_move - world.time)/GUN_AIMING_TIME, -0.5) //Yes, there is a bonus for taking time aiming.
|
||||
if(mult < 0) //accurate weapons should provide a proper bonus with negative inaccuracy. the opposite is true too.
|
||||
mult *= 1/inaccuracy_modifier
|
||||
|
||||
@@ -327,16 +327,18 @@
|
||||
if(!trajectory)
|
||||
return
|
||||
var/turf/T = get_turf(A)
|
||||
if(check_ricochet(A) && A.handle_ricochet(src)) //if you can ricochet, attempt to ricochet off the object
|
||||
on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above
|
||||
var/datum/point/pcache = trajectory.copy_to()
|
||||
if(hitscan)
|
||||
store_hitscan_collision(pcache)
|
||||
decayedRange = max(0, decayedRange - reflect_range_decrease)
|
||||
ricochet_chance *= ricochet_decay_chance
|
||||
damage *= ricochet_decay_damage
|
||||
range = decayedRange
|
||||
return TRUE
|
||||
if(check_ricochet_flag(A) && check_ricochet(A)) //if you can ricochet, attempt to ricochet off the object
|
||||
ricochets++
|
||||
if(A.handle_ricochet(src))
|
||||
on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above
|
||||
var/datum/point/pcache = trajectory.copy_to()
|
||||
if(hitscan)
|
||||
store_hitscan_collision(pcache)
|
||||
decayedRange = max(0, decayedRange - reflect_range_decrease)
|
||||
ricochet_chance *= ricochet_decay_chance
|
||||
damage *= ricochet_decay_damage
|
||||
range = decayedRange
|
||||
return TRUE
|
||||
|
||||
var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
|
||||
if(def_zone && check_zone(def_zone) != BODY_ZONE_CHEST)
|
||||
@@ -680,7 +682,8 @@
|
||||
if(!ignore_source_check && firer)
|
||||
var/mob/M = firer
|
||||
if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
|
||||
return FALSE
|
||||
if(!ricochets) //if it has ricocheted, it can hit the firer.
|
||||
return FALSE
|
||||
if(!ignore_loc && (loc != target.loc))
|
||||
return FALSE
|
||||
if(target in passthrough)
|
||||
|
||||
@@ -126,4 +126,15 @@
|
||||
ricochet_auto_aim_angle = 50
|
||||
ricochet_auto_aim_range = 6
|
||||
ricochet_incidence_leeway = 80
|
||||
ricochet_decay_chance = 1
|
||||
ricochet_decay_chance = 1
|
||||
|
||||
/obj/item/projectile/bullet/a357/dumdum
|
||||
name = ".357 DumDum bullet" // the warcrime bullet
|
||||
damage = 40
|
||||
armour_penetration = -20
|
||||
wound_bonus = 45
|
||||
bare_wound_bonus = 45
|
||||
sharpness = SHARP_EDGED
|
||||
embedding = list(embed_chance=90, fall_chance=2, jostle_chance=5, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10)
|
||||
wound_falloff_tile = -1
|
||||
embed_falloff_tile = -5
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "plasma blast"
|
||||
icon_state = "plasmacutter"
|
||||
damage_type = BRUTE
|
||||
damage = 20
|
||||
damage = 10
|
||||
range = 4
|
||||
dismemberment = 20
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
@@ -32,12 +32,12 @@
|
||||
return BULLET_ACT_FORCE_PIERCE
|
||||
|
||||
/obj/item/projectile/plasma/adv
|
||||
damage = 28
|
||||
damage = 14
|
||||
range = 5
|
||||
mine_range = 5
|
||||
|
||||
/obj/item/projectile/plasma/adv/mech
|
||||
damage = 40
|
||||
damage = 20
|
||||
range = 9
|
||||
mine_range = 3
|
||||
|
||||
@@ -52,4 +52,4 @@
|
||||
dismemberment = 0
|
||||
damage = 10
|
||||
range = 4
|
||||
mine_range = 0
|
||||
mine_range = 0
|
||||
|
||||
Reference in New Issue
Block a user