mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-25 06:06:34 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 2/17/2018_make_AI_great_again
This commit is contained in:
@@ -50,6 +50,7 @@
|
||||
|
||||
/obj/item/ammo_magazine/s38/rubber
|
||||
name = "speedloader (.38 rubber)"
|
||||
icon_state = "T38"
|
||||
ammo_type = /obj/item/ammo_casing/a38r
|
||||
|
||||
/obj/item/ammo_magazine/s38/emp
|
||||
@@ -493,6 +494,23 @@
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/s44
|
||||
name = "speedloader (.44)"
|
||||
icon_state = "44"
|
||||
ammo_type = /obj/item/ammo_casing/a44
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1260) //metal costs are very roughly based around 1 .45 casing = 75 metal
|
||||
caliber = ".44"
|
||||
max_ammo = 6
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/s44/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/s44/rubber
|
||||
name = "speedloader (.44 rubber)"
|
||||
icon_state = "R44"
|
||||
ammo_type = /obj/item/ammo_casing/a44r
|
||||
|
||||
///////// 7.62mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/m762
|
||||
|
||||
@@ -59,6 +59,12 @@
|
||||
caliber = ".44"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
|
||||
/obj/item/ammo_casing/a44r
|
||||
icon_state = "r-casing"
|
||||
desc = "A .44 rubber bullet casing."
|
||||
caliber = ".44"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong
|
||||
|
||||
/*
|
||||
* .75 (aka Gyrojet Rockets, aka admin abuse)
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/effect/projectile
|
||||
icon = 'icons/effects/projectiles.dmi'
|
||||
icon_state = "bolt"
|
||||
layer = 20
|
||||
plane = ABOVE_PLANE
|
||||
|
||||
/obj/effect/projectile/New(var/turf/location)
|
||||
if(istype(location))
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
if(propname == "mode_name")
|
||||
name = propvalue
|
||||
else if(isnull(propvalue))
|
||||
if(isnull(propvalue))
|
||||
settings[propname] = gun.vars[propname] //better than initial() as it handles list vars like burst_accuracy
|
||||
else
|
||||
settings[propname] = propvalue
|
||||
@@ -58,6 +58,7 @@
|
||||
var/move_delay = 1
|
||||
var/fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
var/fire_sound_text = "gunshot"
|
||||
var/fire_anim = null
|
||||
var/recoil = 0 //screen shake
|
||||
var/silenced = 0
|
||||
var/muzzle_flash = 3
|
||||
@@ -379,10 +380,13 @@
|
||||
if(one_handed_penalty >= 20)
|
||||
to_chat(user, "<span class='warning'>You struggle to keep \the [src] pointed at the correct position with just one hand!</span>")
|
||||
|
||||
if(reflex)
|
||||
admin_attack_log(user, target, attacker_message = "fired [src] by reflex.", victim_message = "triggered a reflex shot from [src].", admin_message = "shot [target], who triggered gunfire ([src]) by reflex)")
|
||||
var/target_for_log
|
||||
if(ismob(target))
|
||||
target_for_log = target
|
||||
else
|
||||
admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].")
|
||||
target_for_log = "[target.name]"
|
||||
|
||||
add_attack_logs(user,target_for_log,"Fired gun [src.name] ([reflex ? "REFLEX" : "MANUAL"])")
|
||||
|
||||
//update timing
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
@@ -454,9 +458,13 @@
|
||||
target = targloc
|
||||
//pointblank = 0
|
||||
|
||||
log_and_message_admins("Fired [src].")
|
||||
var/target_for_log
|
||||
if(ismob(target))
|
||||
target_for_log = target
|
||||
else
|
||||
target_for_log = "[target.name]"
|
||||
|
||||
//admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].")
|
||||
add_attack_logs("Unmanned",target_for_log,"Fired [src.name]")
|
||||
|
||||
//update timing
|
||||
next_fire_time = world.time + fire_delay
|
||||
@@ -491,6 +499,9 @@
|
||||
|
||||
//called after successfully firing
|
||||
/obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0)
|
||||
if(fire_anim)
|
||||
flick(fire_anim, src)
|
||||
|
||||
if(silenced)
|
||||
if(reflex)
|
||||
user.visible_message(
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
fire_delay = 20
|
||||
w_class = ITEMSIZE_LARGE
|
||||
// one_handed_penalty = 90 // The thing's heavy and huge.
|
||||
accuracy = 3
|
||||
accuracy = 45
|
||||
charge_cost = 600
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon/mounted
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/gun/energy/gun
|
||||
name = "energy gun"
|
||||
desc = "Another bestseller of Lawson Arms and the FTU, the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
|
||||
desc = "Another bestseller of Lawson Arms and "+TSC_HEPH+", the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
|
||||
icon_state = "energystun100"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_delay = 10 // Handguns should be inferior to two-handed weapons.
|
||||
@@ -64,4 +64,4 @@
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="nucgunstun", charge_cost = 240),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", charge_cost = 480),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "The NT Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Not the best of its type."
|
||||
icon_state = "ionrifle"
|
||||
item_state = "ionrifle"
|
||||
wielded_item_state = "ionrifle-wielded"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
@@ -33,7 +34,6 @@
|
||||
charge_cost = 300
|
||||
projectile_type = /obj/item/projectile/energy/phase
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/decloner
|
||||
name = "biological demolecularisor"
|
||||
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
|
||||
|
||||
@@ -52,9 +52,9 @@
|
||||
var/mob/living/L = hit_atom
|
||||
//unfortuately we don't know where the dart will actually hit, since that's done by the parent.
|
||||
if(L.can_inject() && syringe.reagents)
|
||||
var/reagent_log = syringe.reagents.get_reagents()
|
||||
syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD)
|
||||
admin_inject_log(thrower, L, src, reagent_log, 15, violent=1)
|
||||
var/contained = syringe.reagents.get_reagents()
|
||||
var/trans = syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD)
|
||||
add_attack_logs(thrower,L,"Shot with [src.name] containing [contained], trasferred [trans] units")
|
||||
|
||||
syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null)
|
||||
syringe.update_icon()
|
||||
|
||||
@@ -53,6 +53,8 @@
|
||||
name = "assault rifle"
|
||||
desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds."
|
||||
icon_state = "arifle"
|
||||
item_state = "arifle"
|
||||
wielded_item_state = "arifle-wielded"
|
||||
item_state = null
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
@@ -109,6 +111,7 @@
|
||||
desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 7.62mm rounds and has an under barrel grenade launcher."
|
||||
icon_state = "carbine" // This isn't a carbine. :T
|
||||
item_state = "z8carbine"
|
||||
wielded_item_state = "z8carbine-wielded"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
caliber = "7.62mm"
|
||||
|
||||
@@ -118,7 +118,6 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
// Blade Runner pistol.
|
||||
/obj/item/weapon/gun/projectile/revolver/deckard
|
||||
name = "\improper Deckard .38"
|
||||
@@ -259,3 +258,24 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]")
|
||||
else
|
||||
to_chat(user, "\The [src] has a secondary barrel that is empty.")
|
||||
|
||||
|
||||
//Ported from Bay
|
||||
/obj/item/weapon/gun/projectile/revolver/webley
|
||||
name = "service revolver"
|
||||
desc = "A rugged top break revolver based on the Webley Mk. VI model, with modern improvements. Uses .44 magnum rounds."
|
||||
icon_state = "webley2"
|
||||
item_state = "webley2"
|
||||
caliber = ".44"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 6
|
||||
ammo_type = /obj/item/ammo_casing/a44
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/webley/auto
|
||||
name = "autorevolver"
|
||||
icon_state = "mosley"
|
||||
desc = "A shiny Mosley Autococker automatic revolver, with black accents. Marketed as the 'Revolver for the Modern Era'. Uses .44 magnum rounds."
|
||||
fire_delay = 5.7 //Autorevolver. Also synced with the animation
|
||||
fire_anim = "mosley_fire"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
|
||||
@@ -49,6 +49,7 @@
|
||||
//Effects
|
||||
var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 maybe later for burst of fire around the impact point. - Mech
|
||||
var/flammability = 0 //Amount of fire stacks to add for the above.
|
||||
var/combustion = TRUE //Does this set off flammable objects on fire/hit?
|
||||
var/stun = 0
|
||||
var/weaken = 0
|
||||
var/paralyze = 0
|
||||
@@ -90,6 +91,10 @@
|
||||
//called when the projectile stops flying because it collided with something
|
||||
/obj/item/projectile/proc/on_impact(var/atom/A)
|
||||
impact_effect(effect_transform) // generate impact effect
|
||||
if(damage && damage_type == BURN)
|
||||
var/turf/T = get_turf(A)
|
||||
if(T)
|
||||
T.hotspot_expose(700, 5)
|
||||
return
|
||||
|
||||
//Checks if the projectile is eligible for embedding. Not that it necessarily will.
|
||||
@@ -132,6 +137,9 @@
|
||||
if (!istype(targloc) || !istype(curloc))
|
||||
return 1
|
||||
|
||||
if(combustion)
|
||||
curloc.hotspot_expose(700, 5)
|
||||
|
||||
if(targloc == curloc) //Shooting something in the same turf
|
||||
target.bullet_act(src, target_zone)
|
||||
on_impact(target)
|
||||
@@ -200,17 +208,8 @@
|
||||
|
||||
//admin logs
|
||||
if(!no_attack_log)
|
||||
if(istype(firer, /mob))
|
||||
|
||||
var/attacker_message = "shot with \a [src.type]"
|
||||
var/victim_message = "shot with \a [src.type]"
|
||||
var/admin_message = "shot (\a [src.type])"
|
||||
|
||||
admin_attack_log(firer, target_mob, attacker_message, victim_message, admin_message)
|
||||
else
|
||||
if(target_mob) // Sometimes the target_mob gets gibbed or something.
|
||||
target_mob.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[target_mob]/[target_mob.ckey]</b> with <b>\a [src]</b>"
|
||||
msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with \a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target_mob.x];Y=[target_mob.y];Z=[target_mob.z]'>JMP</a>)")
|
||||
if(istype(firer, /mob) && istype(target_mob))
|
||||
add_attack_logs(firer,target_mob,"Shot with \a [src.type] projectile")
|
||||
|
||||
//sometimes bullet_act() will want the projectile to continue flying
|
||||
if (result == PROJECTILE_CONTINUE)
|
||||
@@ -402,7 +401,7 @@
|
||||
P.activate()
|
||||
|
||||
/obj/item/projectile/proc/impact_effect(var/matrix/M)
|
||||
if(ispath(tracer_type))
|
||||
if(ispath(tracer_type) && location)
|
||||
var/obj/effect/projectile/P = new impact_type(location.loc)
|
||||
|
||||
if(istype(P))
|
||||
@@ -428,6 +427,14 @@
|
||||
return
|
||||
if(istype(A, /obj/structure/foamedmetal)) //Turrets can detect through foamed metal, but will have to blast through it. Similar to windows, if someone runs behind it, a person should probably just not shoot.
|
||||
return
|
||||
if(istype(A, /obj/structure/girder)) //They see you there.
|
||||
return
|
||||
if(istype(A, /obj/structure/door_assembly)) //And through there.
|
||||
return
|
||||
if(istype(A, /obj/structure)) //Unanchored things you can shove around will still keep the turret or other firing at your position. Aim intent still functions.
|
||||
var/obj/structure/S = A
|
||||
if(!S.anchored)
|
||||
return
|
||||
if(istype(A, /mob/living) || istype(A, /obj/mecha) || istype(A, /obj/vehicle))
|
||||
result_ref = A
|
||||
result = 2 //We hit someone, return 1!
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/animate/Bump(var/atom/change)
|
||||
if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects))
|
||||
|
||||
@@ -122,6 +122,8 @@
|
||||
check_armour = "laser"
|
||||
light_color = "#0066FF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_blue/muzzle
|
||||
tracer_type = /obj/effect/projectile/laser_blue/tracer
|
||||
impact_type = /obj/effect/projectile/laser_blue/impact
|
||||
@@ -142,6 +144,8 @@
|
||||
check_armour = "laser"
|
||||
light_color = "#FF0D00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/beam/lastertag/red/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -157,6 +161,8 @@
|
||||
check_armour = "laser"
|
||||
light_color = "#00C6FF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_omni/muzzle
|
||||
tracer_type = /obj/effect/projectile/laser_omni/tracer
|
||||
impact_type = /obj/effect/projectile/laser_omni/impact
|
||||
@@ -190,6 +196,8 @@
|
||||
damage_type = HALLOSS
|
||||
light_color = "#FFFFFF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/stun/muzzle
|
||||
tracer_type = /obj/effect/projectile/stun/tracer
|
||||
impact_type = /obj/effect/projectile/stun/impact
|
||||
|
||||
@@ -147,6 +147,14 @@
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
|
||||
damage = 60
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
|
||||
damage = 10
|
||||
agony = 60
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
check_armour = "melee"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
|
||||
name = "rubber bullet"
|
||||
damage = 5
|
||||
@@ -191,6 +199,8 @@
|
||||
sharp = 0
|
||||
check_armour = "melee"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0)
|
||||
..()
|
||||
empulse(target, 0, 0, 0, 0) //Only affects what it hits
|
||||
@@ -325,6 +335,8 @@
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/pistol/cap/process()
|
||||
loc = null
|
||||
qdel(src)
|
||||
@@ -6,6 +6,8 @@
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/change/on_hit(var/atom/change)
|
||||
wabbajack(change)
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/dart
|
||||
name = "dart"
|
||||
@@ -101,6 +102,7 @@
|
||||
agony = 120
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/bolt
|
||||
name = "bolt"
|
||||
@@ -122,6 +124,8 @@
|
||||
agony = 10
|
||||
check_armour = "bio"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
@@ -130,6 +134,8 @@
|
||||
agony = 80
|
||||
check_armour = "bio"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin/toxic //New alien mob projectile to match the player-variant's projectiles.
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
@@ -149,6 +155,8 @@
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/plasmastun
|
||||
name = "plasma pulse"
|
||||
icon_state = "plasma_stun"
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
damage = 20
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/forcebolt/strong
|
||||
name = "force bolt"
|
||||
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
var/sev1_range = 0
|
||||
var/sev2_range = 1
|
||||
var/sev3_range = 1
|
||||
@@ -56,6 +59,8 @@
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)
|
||||
..()
|
||||
if(isliving(target))
|
||||
@@ -85,6 +90,8 @@
|
||||
name = "heat beam"
|
||||
target_temperature = 1000
|
||||
|
||||
combustion = TRUE
|
||||
|
||||
/obj/item/projectile/meteor
|
||||
name = "meteor"
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
@@ -127,6 +134,8 @@
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/living/M = target
|
||||
if(ishuman(target))
|
||||
@@ -196,6 +205,8 @@
|
||||
/obj/item/projectile/beam/mindflayer
|
||||
name = "flayer ray"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -218,6 +229,8 @@
|
||||
damage_type = HALLOSS
|
||||
muzzle_type = null
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bola/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -235,6 +248,8 @@
|
||||
damage_type = BRUTE
|
||||
muzzle_type = null
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/webball/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target.loc))
|
||||
var/obj/effect/spider/stickyweb/W = locate() in get_turf(target)
|
||||
|
||||
Reference in New Issue
Block a user