mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-15 20:52:41 +00:00
Collection of gear and changes from the four gear polls on the forums includes: 2 new automatic weapons, mapped in to ERT and random weapon spawns. Laser carbine balance. Slow emergency softsuits, no armor value other than bio and rad, 4 slowdown. 1 knife, not mapped in, available for Psi's uplink merge. New vests: 2 types, 2 pocket no slowdown, 4 pocket with slowdown, second is available from cargo and one random vest spawn in armory. The first replaces all instances of the old vests. Old vests still exist in code. Mercenary vest with no slowdown, 4 pockets, and slightly better armor, not on map, possibly for Nukes or Traitor Uplink Holster rearrangement for custom loadout. Acid dispenser, mapped into robotics and science. New food items, added to vendors and rations crate. New random medical spawns, added to medbay. Cargo and loadout additions to accommodate new items. 1 beanbag loaded 5 round shotgun added to Warden's closet to compensate for officers having .45 ltls and the HoS having an e-gun, suggested by IRC and server. http://baystation12.net/forums/viewtopic.php?f=5&t=12064 http://baystation12.net/forums/viewtopic.php?f=5&t=12031 http://baystation12.net/forums/viewtopic.php?f=5&t=12027 http://baystation12.net/forums/viewtopic.php?f=5&t=12007
170 lines
4.9 KiB
Plaintext
170 lines
4.9 KiB
Plaintext
/obj/item/projectile/bullet
|
|
name = "bullet"
|
|
icon_state = "bullet"
|
|
damage = 60
|
|
damage_type = BRUTE
|
|
nodamage = 0
|
|
check_armour = "bullet"
|
|
embed = 1
|
|
sharp = 1
|
|
|
|
/obj/item/projectile/bullet/on_hit(var/atom/target, var/blocked = 0)
|
|
if (..(target, blocked))
|
|
var/mob/living/L = target
|
|
shake_camera(L, 3, 2)
|
|
|
|
/obj/item/projectile/bullet/check_penetrate(var/atom/A)
|
|
if(!A || !A.density) return 1 //if whatever it was got destroyed when we hit it, then I guess we can just keep going
|
|
|
|
if(istype(A, /obj/mecha))
|
|
return 1 //mecha have their own penetration handling
|
|
|
|
if(ismob(A))
|
|
if(iscarbon(A))
|
|
//squishy mobs absorb KE
|
|
if(can_embed()) return 0
|
|
damage *= 0.7
|
|
return 1
|
|
|
|
var/chance = 0
|
|
if(istype(A, /turf/simulated/wall))
|
|
var/turf/simulated/wall/W = A
|
|
chance = round(damage/W.damage_cap*180)
|
|
else if(istype(A, /obj/machinery/door))
|
|
var/obj/machinery/door/D = A
|
|
chance = round(damage/D.maxhealth*100)
|
|
else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder))
|
|
chance = 100
|
|
else if(istype(A, /obj/machinery) || istype(A, /obj/structure))
|
|
chance = 25
|
|
|
|
if(prob(chance))
|
|
if(A.opacity)
|
|
//display a message so that people on the other side aren't so confused
|
|
A.visible_message("<span class='warning'>\The [src] pierces through \the [A]!")
|
|
return 1
|
|
|
|
return 0
|
|
|
|
//For projectiles that actually represent clouds of projectiles
|
|
/obj/item/projectile/bullet/pellet
|
|
name = "shrapnel" //'shrapnel' sounds more dangerous (i.e. cooler) than 'pellet'
|
|
damage = 20
|
|
//icon_state = "bullet" //TODO: would be nice to have it's own icon state
|
|
var/pellets = 4 //number of pellets
|
|
var/range_step = 2 //effective pellet count decreases every few tiles
|
|
var/base_spread = 90 //lower means the pellets spread more across body parts
|
|
var/spread_step = 10 //higher means the pellets spread more across body parts with distance
|
|
|
|
/obj/item/projectile/bullet/pellet/Bumped()
|
|
. = ..()
|
|
bumped = 0 //can hit all mobs in a tile. pellets is decremented inside attack_mob so this should be fine.
|
|
|
|
/obj/item/projectile/bullet/pellet/attack_mob(var/mob/living/target_mob, var/distance)
|
|
if (pellets < 0) return 1
|
|
|
|
var/pellet_loss = round((distance - 1)/range_step) //pellets lost due to distance
|
|
var/total_pellets = max(pellets - pellet_loss, 1)
|
|
var/spread = max(base_spread - (spread_step*distance), 0)
|
|
var/hits = 0
|
|
for (var/i in 1 to total_pellets)
|
|
//pellet hits spread out across different zones, but 'aim at' the targeted zone with higher probability
|
|
//whether the pellet actually hits the def_zone or a different zone should still be determined by the parent using get_zone_with_miss_chance().
|
|
var/old_zone = def_zone
|
|
def_zone = ran_zone(def_zone, spread)
|
|
if (..()) hits++
|
|
def_zone = old_zone //restore the original zone the projectile was aimed at
|
|
|
|
pellets -= hits //each hit reduces the number of pellets left
|
|
if (hits >= total_pellets || pellets <= 0)
|
|
return 1
|
|
return 0
|
|
|
|
/* short-casing projectiles, like the kind used in pistols or SMGs */
|
|
|
|
/obj/item/projectile/bullet/pistol
|
|
damage = 20
|
|
|
|
/obj/item/projectile/bullet/pistol/medium
|
|
damage = 25
|
|
|
|
/obj/item/projectile/bullet/pistol/strong //revolvers and matebas
|
|
damage = 60
|
|
|
|
/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
|
|
name = "rubber bullet"
|
|
damage = 10
|
|
agony = 40
|
|
embed = 0
|
|
sharp = 0
|
|
|
|
/* shotgun projectiles */
|
|
|
|
/obj/item/projectile/bullet/shotgun
|
|
name = "slug"
|
|
damage = 60
|
|
|
|
/obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets
|
|
name = "beanbag"
|
|
damage = 20
|
|
agony = 60
|
|
embed = 0
|
|
sharp = 0
|
|
|
|
//Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance.
|
|
//Overall less damage than slugs in exchange for more damage at very close range and more embedding
|
|
/obj/item/projectile/bullet/pellet/shotgun
|
|
name = "shrapnel"
|
|
damage = 13
|
|
pellets = 6
|
|
range_step = 1
|
|
spread_step = 10
|
|
|
|
/* "Rifle" rounds */
|
|
|
|
/obj/item/projectile/bullet/rifle/a762
|
|
damage = 30
|
|
penetrating = 1
|
|
|
|
/obj/item/projectile/bullet/rifle/a145
|
|
damage = 80
|
|
stun = 3
|
|
weaken = 3
|
|
penetrating = 5
|
|
|
|
/obj/item/projectile/bullet/rifle/a556
|
|
damage = 50
|
|
penetrating = 1
|
|
|
|
/* Miscellaneous */
|
|
|
|
/obj/item/projectile/bullet/suffocationbullet//How does this even work?
|
|
name = "co bullet"
|
|
damage = 20
|
|
damage_type = OXY
|
|
|
|
/obj/item/projectile/bullet/cyanideround
|
|
name = "poison bullet"
|
|
damage = 40
|
|
damage_type = TOX
|
|
|
|
/obj/item/projectile/bullet/burstbullet
|
|
name = "exploding bullet"
|
|
damage = 20
|
|
embed = 0
|
|
edge = 1
|
|
|
|
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
|
|
if(isturf(target))
|
|
explosion(target, -1, 0, 2)
|
|
..()
|
|
|
|
/obj/item/projectile/bullet/blank
|
|
invisibility = 101
|
|
damage = 1
|
|
embed = 0
|
|
|
|
/obj/item/projectile/bullet/chameleon
|
|
damage = 1 // stop trying to murderbone with a fake gun dumbass!!!
|
|
embed = 0 // nope
|