mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
Gun changes (#4185)
* Various background gun changes * Forgot to include the sounds, woops * Fixes some more gun stuff * Makes the cham gun work again
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
|
||||
on_created_text = "<span class='warning'>You start to glow very brightly!</span>"
|
||||
on_expired_text = "<span class='notice'>Your glow has ended.</span>"
|
||||
evasion = -2
|
||||
evasion = -30
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/technomancer/corona/tick()
|
||||
|
||||
@@ -24,5 +24,5 @@
|
||||
|
||||
on_created_text = "<span class='notice'>You have a repulsion field around you, which will attempt to deflect projectiles.</span>"
|
||||
on_expired_text = "<span class='warning'>Your repulsion field has expired.</span>"
|
||||
evasion = 3
|
||||
evasion = 45
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,7 @@
|
||||
|
||||
/obj/item/weapon/material/twohanded/update_held_icon()
|
||||
var/mob/living/M = loc
|
||||
if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full())
|
||||
if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M))
|
||||
wielded = 1
|
||||
force = force_wielded
|
||||
name = "[base_name] (wielded)"
|
||||
|
||||
@@ -430,6 +430,7 @@
|
||||
P.icon = initial(copy_projectile.icon)
|
||||
P.icon_state = initial(copy_projectile.icon_state)
|
||||
P.pass_flags = initial(copy_projectile.pass_flags)
|
||||
P.fire_sound = initial(copy_projectile.fire_sound)
|
||||
P.hitscan = initial(copy_projectile.hitscan)
|
||||
P.step_delay = initial(copy_projectile.step_delay)
|
||||
P.muzzle_type = initial(copy_projectile.muzzle_type)
|
||||
@@ -451,12 +452,15 @@
|
||||
var/obj/item/weapon/gun/copy = ..()
|
||||
|
||||
flags_inv = copy.flags_inv
|
||||
fire_sound = copy.fire_sound
|
||||
if(copy.fire_sound)
|
||||
fire_sound = copy.fire_sound
|
||||
else
|
||||
fire_sound = null
|
||||
fire_sound_text = copy.fire_sound_text
|
||||
|
||||
var/obj/item/weapon/gun/energy/E = copy
|
||||
if(istype(E))
|
||||
copy_projectile = E.projectile_type
|
||||
var/obj/item/weapon/gun/G = copy
|
||||
if(istype(G))
|
||||
copy_projectile = G.projectile_type
|
||||
//charge_meter = E.charge_meter //does not work very well with icon_state changes, ATM
|
||||
else
|
||||
copy_projectile = null
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
outgoing_melee_damage_percent = 0.7 // 30% less melee damage.
|
||||
disable_duration_percent = 1.25 // Stuns last 25% longer.
|
||||
slowdown = 1 // Slower.
|
||||
evasion = -1 // 15% easier to hit.
|
||||
evasion = -15 // 15% easier to hit.
|
||||
|
||||
// Tracks number of deaths, one modifier added per cloning
|
||||
/datum/modifier/cloned
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
var/outgoing_melee_damage_percent // Adjusts melee damage inflicted by holder by a percentage. Affects attacks by melee weapons and hand-to-hand.
|
||||
var/slowdown // Negative numbers speed up, positive numbers slow down movement.
|
||||
var/haste // If set to 1, the mob will be 'hasted', which makes it ignore slowdown and go really fast.
|
||||
var/evasion // Positive numbers reduce the odds of being hit by 15% each. Negative numbers increase the odds.
|
||||
var/evasion // Positive numbers reduce the odds of being hit. Negative numbers increase the odds.
|
||||
var/bleeding_rate_percent // Adjusts amount of blood lost when bleeding.
|
||||
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. Each point makes it 15% easier or harder, just like evasion.
|
||||
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. Every 15% is equal to one tile easier or harder, just like evasion.
|
||||
var/accuracy_dispersion // Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties.
|
||||
var/metabolism_percent // Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing.
|
||||
var/icon_scale_percent // Makes the holder's icon get scaled up or down.
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
desc = "You're rather inexperienced with guns, you've never used one in your life, or you're just really rusty. \
|
||||
Regardless, you find it quite difficult to land shots where you wanted them to go."
|
||||
|
||||
accuracy = -1
|
||||
accuracy = -15
|
||||
accuracy_dispersion = 1
|
||||
|
||||
/datum/modifier/trait/high_metabolism
|
||||
|
||||
@@ -164,12 +164,14 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
else if (W == r_hand)
|
||||
r_hand = null
|
||||
if(l_hand)
|
||||
l_hand.update_twohanding()
|
||||
l_hand.update_held_icon()
|
||||
update_inv_l_hand()
|
||||
update_inv_r_hand()
|
||||
else if (W == l_hand)
|
||||
l_hand = null
|
||||
if(r_hand)
|
||||
r_hand.update_twohanding()
|
||||
r_hand.update_held_icon()
|
||||
update_inv_l_hand()
|
||||
update_inv_l_hand()
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
|
||||
var/lastpuke = 0
|
||||
|
||||
var/evasion = 0 // Makes attacks harder to land. Each number equals 15% more likely to miss. Negative numbers increase hit chance.
|
||||
var/evasion = 0 // Makes attacks harder to land. Negative numbers increase hit chance.
|
||||
var/force_max_speed = 0 // If 1, the mob runs extremely fast and cannot be slowed.
|
||||
|
||||
var/image/dsoverlay = null //Overlay used for darksight eye adjustments
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
/proc/mob_size_difference(var/mob_size_A, var/mob_size_B)
|
||||
return round(log(2, mob_size_A/mob_size_B), 1)
|
||||
|
||||
/mob/proc/can_wield_item(obj/item/W)
|
||||
if(W.w_class >= ITEMSIZE_LARGE && issmall(src))
|
||||
return FALSE //M is too small to wield this
|
||||
return TRUE
|
||||
|
||||
/proc/istiny(A)
|
||||
if(A && istype(A, /mob/living))
|
||||
var/mob/living/L = A
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
if(propname == "mode_name")
|
||||
name = propvalue
|
||||
if(isnull(propvalue))
|
||||
else if(isnull(propvalue))
|
||||
settings[propname] = gun.vars[propname] //better than initial() as it handles list vars like burst_accuracy
|
||||
else
|
||||
settings[propname] = propvalue
|
||||
@@ -61,13 +61,14 @@
|
||||
var/recoil = 0 //screen shake
|
||||
var/silenced = 0
|
||||
var/muzzle_flash = 3
|
||||
var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment.
|
||||
var/accuracy = 0 //Accuracy is measured in percents. +15 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -15 means the opposite. launchers are not supported, at the moment.
|
||||
var/scoped_accuracy = null
|
||||
var/list/burst_accuracy = list(0) //allows for different accuracies for each shot in a burst. Applied on top of accuracy
|
||||
var/list/dispersion = list(0)
|
||||
var/mode_name = null
|
||||
var/requires_two_hands
|
||||
var/wielded_icon = "gun_wielded"
|
||||
var/projectile_type = /obj/item/projectile //On ballistics, only used to check for the cham gun
|
||||
|
||||
var/wielded_item_state
|
||||
var/one_handed_penalty = 0 // Penalty applied if someone fires a two-handed gun with one hand.
|
||||
var/obj/screen/auto_target/auto_target
|
||||
var/shooting = 0
|
||||
@@ -104,19 +105,32 @@
|
||||
verbs -= /obj/item/weapon/gun/verb/give_dna
|
||||
verbs -= /obj/item/weapon/gun/verb/allow_dna
|
||||
|
||||
/obj/item/weapon/gun/update_held_icon()
|
||||
if(requires_two_hands)
|
||||
/obj/item/weapon/gun/update_twohanding()
|
||||
if(one_handed_penalty)
|
||||
var/mob/living/M = loc
|
||||
if(istype(M))
|
||||
if(M.item_is_in_hands(src) && !M.hands_are_full())
|
||||
if(M.can_wield_item(src) && src.is_held_twohanded(M))
|
||||
name = "[initial(name)] (wielded)"
|
||||
item_state = wielded_icon
|
||||
else
|
||||
name = initial(name)
|
||||
item_state = initial(item_state)
|
||||
update_icon(ignore_inhands=1) // In case item_state is set somewhere else.
|
||||
else
|
||||
name = initial(name)
|
||||
update_icon() // In case item_state is set somewhere else.
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/update_held_icon()
|
||||
if(wielded_item_state)
|
||||
var/mob/living/M = loc
|
||||
if(istype(M))
|
||||
if(M.can_wield_item(src) && src.is_held_twohanded(M))
|
||||
item_state_slots[slot_l_hand_str] = wielded_item_state
|
||||
item_state_slots[slot_r_hand_str] = wielded_item_state
|
||||
else
|
||||
item_state_slots[slot_l_hand_str] = initial(item_state)
|
||||
item_state_slots[slot_r_hand_str] = initial(item_state)
|
||||
..()
|
||||
|
||||
|
||||
//Checks whether a given mob can use the gun
|
||||
//Any checks that shouldn't result in handle_click_empty() being called if they fail should go here.
|
||||
//Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there.
|
||||
@@ -243,6 +257,7 @@
|
||||
verbs -= /obj/item/weapon/gun/verb/allow_dna
|
||||
else
|
||||
user << "<span class='warning'>\The [src] is not accepting modifications at this time.</span>"
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(dna_lock && attached_lock.controller_lock)
|
||||
@@ -286,6 +301,7 @@
|
||||
|
||||
/obj/item/weapon/gun/proc/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0)
|
||||
if(!user || !target) return
|
||||
if(target.z != user.z) return
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -307,12 +323,7 @@
|
||||
|
||||
next_fire_time = world.time + shoot_time
|
||||
|
||||
var/held_acc_mod = 0
|
||||
var/held_disp_mod = 0
|
||||
if(requires_two_hands)
|
||||
if(user.item_is_in_hands(src) && user.hands_are_full())
|
||||
held_acc_mod = held_acc_mod - one_handed_penalty
|
||||
held_disp_mod = held_disp_mod - round(one_handed_penalty / 2)
|
||||
var/held_twohanded = (user.can_wield_item(src) && src.is_held_twohanded(user))
|
||||
|
||||
//actually attempt to shoot
|
||||
var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed.
|
||||
@@ -342,9 +353,7 @@
|
||||
handle_click_empty(user)
|
||||
break
|
||||
|
||||
var/acc = burst_accuracy[min(i, burst_accuracy.len)] + held_acc_mod
|
||||
var/disp = dispersion[min(i, dispersion.len)] + held_disp_mod
|
||||
process_accuracy(projectile, user, target, acc, disp)
|
||||
process_accuracy(projectile, user, target, i, held_twohanded)
|
||||
|
||||
if(pointblank)
|
||||
process_point_blank(projectile, user, target)
|
||||
@@ -366,10 +375,9 @@
|
||||
shooting = 0
|
||||
*/
|
||||
// We do this down here, so we don't get the message if we fire an empty gun.
|
||||
if(requires_two_hands)
|
||||
if(user.item_is_in_hands(src) && user.hands_are_full())
|
||||
if(one_handed_penalty >= 2)
|
||||
user << "<span class='warning'>You struggle to keep \the [src] pointed at the correct position with just one hand!</span>"
|
||||
if(user.item_is_in_hands(src) && user.hands_are_full())
|
||||
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)")
|
||||
@@ -483,25 +491,45 @@
|
||||
//called after successfully firing
|
||||
/obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0)
|
||||
if(silenced)
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
to_chat(user, "<span class='warning'>You fire \the [src][pointblank ? " point blank at \the [target]":""][reflex ? " by reflex!":""]</span>")
|
||||
for(var/mob/living/L in oview(2,user))
|
||||
if(L.stat)
|
||||
continue
|
||||
if(L.blinded)
|
||||
to_chat(L, "You hear a [fire_sound_text]!")
|
||||
continue
|
||||
to_chat(L, "<span class='warning'>[user] fires \the [src][pointblank ? " point blank at \the [target]":""][reflex ? " by reflex!":""]</span>")
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.visible_message(
|
||||
"<span class='warning'>[user] fires \the [src][pointblank ? " point blank at \the [target]":""][reflex ? " by reflex!":""]</span>",
|
||||
"<span class='warning'>You fire \the [src][pointblank ? " point blank at \the [target]":""][reflex ? " by reflex!":""]</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
if(reflex)
|
||||
user.visible_message(
|
||||
"<span class='reflex_shoot'><b>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""] by reflex!</b></span>",
|
||||
"<span class='reflex_shoot'>You fire \the [src] by reflex!</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='danger'>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""]!</span>",
|
||||
"<span class='warning'>You fire \the [src]!</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
|
||||
if(muzzle_flash)
|
||||
set_light(muzzle_flash)
|
||||
if(muzzle_flash)
|
||||
set_light(muzzle_flash)
|
||||
|
||||
if(one_handed_penalty)
|
||||
if(!src.is_held_twohanded(user))
|
||||
switch(one_handed_penalty)
|
||||
if(1 to 15)
|
||||
if(prob(50)) //don't need to tell them every single time
|
||||
to_chat(user, "<span class='warning'>Your aim wavers slightly.</span>")
|
||||
if(16 to 30)
|
||||
to_chat(user, "<span class='warning'>Your aim wavers as you fire \the [src] with just one hand.</span>")
|
||||
if(31 to 45)
|
||||
to_chat(user, "<span class='warning'>You have trouble keeping \the [src] on target with just one hand.</span>")
|
||||
if(46 to INFINITY)
|
||||
to_chat(user, "<span class='warning'>You struggle to keep \the [src] on target with just one hand!</span>")
|
||||
else if(!user.can_wield_item(src))
|
||||
switch(one_handed_penalty)
|
||||
if(1 to 15)
|
||||
if(prob(50)) //don't need to tell them every single time
|
||||
to_chat(user, "<span class='warning'>Your aim wavers slightly.</span>")
|
||||
if(16 to 30)
|
||||
to_chat(user, "<span class='warning'>Your aim wavers as you try to hold \the [src] steady.</span>")
|
||||
if(31 to 45)
|
||||
to_chat(user, "<span class='warning'>You have trouble holding \the [src] steady.</span>")
|
||||
if(46 to INFINITY)
|
||||
to_chat(user, "<span class='warning'>You struggle to hold \the [src] steady!</span>")
|
||||
|
||||
if(recoil)
|
||||
spawn()
|
||||
@@ -530,29 +558,37 @@
|
||||
damage_mult = 1.5
|
||||
P.damage *= damage_mult
|
||||
|
||||
/obj/item/weapon/gun/proc/process_accuracy(obj/projectile, mob/living/user, atom/target, acc_mod, dispersion)
|
||||
/obj/item/weapon/gun/proc/process_accuracy(obj/projectile, mob/living/user, atom/target, var/burst, var/held_twohanded)
|
||||
var/obj/item/projectile/P = projectile
|
||||
if(!istype(P))
|
||||
return //default behaviour only applies to true projectiles
|
||||
|
||||
var/acc_mod = burst_accuracy[min(burst, burst_accuracy.len)]
|
||||
var/disp_mod = dispersion[min(burst, dispersion.len)]
|
||||
|
||||
if(one_handed_penalty)
|
||||
if(!held_twohanded)
|
||||
acc_mod += -ceil(one_handed_penalty/2)
|
||||
disp_mod += one_handed_penalty*0.5 //dispersion per point of two-handedness
|
||||
|
||||
//Accuracy modifiers
|
||||
P.accuracy = accuracy + acc_mod
|
||||
P.dispersion = dispersion
|
||||
P.dispersion = disp_mod
|
||||
|
||||
// Certain statuses make it harder to aim, blindness especially. Same chances as melee, however guns accuracy uses multiples of 15.
|
||||
if(user.eye_blind)
|
||||
P.accuracy -= 5
|
||||
P.accuracy -= 75
|
||||
if(user.eye_blurry)
|
||||
P.accuracy -= 2
|
||||
P.accuracy -= 30
|
||||
if(user.confused)
|
||||
P.accuracy -= 3
|
||||
P.accuracy -= 45
|
||||
|
||||
//accuracy bonus from aiming
|
||||
if (aim_targets && (target in aim_targets))
|
||||
//If you aim at someone beforehead, it'll hit more often.
|
||||
//Kinda balanced by fact you need like 2 seconds to aim
|
||||
//As opposed to no-delay pew pew
|
||||
P.accuracy += 2
|
||||
P.accuracy += 30
|
||||
|
||||
// Some modifiers make it harder or easier to hit things.
|
||||
for(var/datum/modifier/M in user.modifiers)
|
||||
@@ -582,17 +618,24 @@
|
||||
y_offset = rand(-1,1)
|
||||
x_offset = rand(-1,1)
|
||||
|
||||
return !P.launch_from_gun(target, user, src, target_zone, x_offset, y_offset)
|
||||
var/launched = !P.launch_from_gun(target, user, src, target_zone, x_offset, y_offset)
|
||||
|
||||
//apart of reskins that have two sprites, touching may result in frustration and breaks
|
||||
/obj/item/weapon/gun/projectile/colt/detective/attack_hand(var/mob/living/user)
|
||||
if(!unique_reskin && loc == user)
|
||||
reskin_gun(user)
|
||||
return
|
||||
..()
|
||||
if(launched)
|
||||
play_fire_sound(user, P)
|
||||
|
||||
return launched
|
||||
|
||||
|
||||
/obj/item/weapon/gun/proc/play_fire_sound(var/mob/user, var/obj/item/projectile/P)
|
||||
var/shot_sound = (istype(P) && P.fire_sound)? P.fire_sound : fire_sound
|
||||
if(silenced)
|
||||
playsound(user, shot_sound, 10, 1)
|
||||
else
|
||||
playsound(user, shot_sound, 50, 1)
|
||||
|
||||
//Suicide handling.
|
||||
/obj/item/weapon/gun/var/mouthshoot = 0 //To stop people from suiciding twice... >.>
|
||||
|
||||
/obj/item/weapon/gun/proc/handle_suicide(mob/living/user)
|
||||
if(!ishuman(user))
|
||||
return
|
||||
@@ -607,10 +650,11 @@
|
||||
var/obj/item/projectile/in_chamber = consume_next_projectile()
|
||||
if (istype(in_chamber))
|
||||
user.visible_message("<span class = 'warning'>[user] pulls the trigger.</span>")
|
||||
var/shot_sound = in_chamber.fire_sound? in_chamber.fire_sound : fire_sound
|
||||
if(silenced)
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
playsound(user, shot_sound, 10, 1)
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
playsound(user, shot_sound, 50, 1)
|
||||
if(istype(in_chamber, /obj/item/projectile/beam/lastertag))
|
||||
user.show_message("<span class = 'warning'>You feel rather silly, trying to commit suicide with a toy.</span>")
|
||||
mouthshoot = 0
|
||||
@@ -656,7 +700,7 @@
|
||||
..()
|
||||
if(firemodes.len > 1)
|
||||
var/datum/firemode/current_mode = firemodes[sel_mode]
|
||||
user << "The fire selector is set to [current_mode.name]."
|
||||
to_chat(user, "The fire selector is set to [current_mode.name].")
|
||||
|
||||
/obj/item/weapon/gun/proc/switch_firemodes(mob/user)
|
||||
if(firemodes.len <= 1)
|
||||
@@ -667,7 +711,7 @@
|
||||
sel_mode = 1
|
||||
var/datum/firemode/new_mode = firemodes[sel_mode]
|
||||
new_mode.apply_to(src)
|
||||
user << "<span class='notice'>\The [src] is now set to [mode_name].</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is now set to [new_mode.name].</span>")
|
||||
|
||||
return new_mode
|
||||
|
||||
|
||||
@@ -7,8 +7,10 @@
|
||||
|
||||
var/obj/item/weapon/cell/power_supply //What type of power cell this uses
|
||||
var/charge_cost = 240 //How much energy is needed to fire.
|
||||
|
||||
var/cell_type = /obj/item/weapon/cell/device/weapon
|
||||
var/projectile_type = /obj/item/projectile/beam/practice
|
||||
projectile_type = /obj/item/projectile/beam/practice
|
||||
|
||||
var/modifystate
|
||||
var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
switch between standard fire and a more efficent but weaker 'suppressive' fire."
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
wielded_item_state = "laser-wielded"
|
||||
fire_delay = 8
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = ITEMSIZE_LARGE
|
||||
@@ -12,8 +12,7 @@
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/midlaser
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 2
|
||||
// one_handed_penalty = 30
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240),
|
||||
@@ -23,7 +22,7 @@
|
||||
/obj/item/weapon/gun/energy/laser/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
one_handed_penalty = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/practice
|
||||
name = "practice laser carbine"
|
||||
@@ -43,7 +42,6 @@
|
||||
icon_state = "retro"
|
||||
item_state = "retro"
|
||||
desc = "An older model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
@@ -79,7 +77,6 @@
|
||||
item_state = "caplaser"
|
||||
desc = "A rare weapon, handcrafted by a now defunct specialty manufacturer on Luna for a small fortune. It's certainly aged well."
|
||||
force = 5
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
@@ -95,15 +92,13 @@
|
||||
flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
|
||||
icon_state = "lasercannon"
|
||||
item_state = null
|
||||
fire_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser/cannon
|
||||
battery_lock = 1
|
||||
fire_delay = 20
|
||||
w_class = ITEMSIZE_LARGE
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 6 // The thing's heavy and huge.
|
||||
// one_handed_penalty = 90 // The thing's heavy and huge.
|
||||
accuracy = 3
|
||||
charge_cost = 600
|
||||
|
||||
@@ -113,7 +108,7 @@
|
||||
use_external_power = 1
|
||||
recharge_time = 10
|
||||
accuracy = 0 // Mounted cannons are just fine the way they are.
|
||||
requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
one_handed_penalty = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser
|
||||
charge_cost = 400
|
||||
fire_delay = 20
|
||||
@@ -124,7 +119,6 @@
|
||||
standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
|
||||
icon_state = "xray"
|
||||
item_state = "xray"
|
||||
fire_sound = 'sound/weapons/eluger.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
charge_cost = 200
|
||||
@@ -145,10 +139,10 @@
|
||||
fire_delay = 35
|
||||
force = 10
|
||||
w_class = ITEMSIZE_HUGE // So it can't fit in a backpack.
|
||||
accuracy = -3 //shooting at the hip
|
||||
accuracy = -45 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
// one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle/verb/scope()
|
||||
set category = "Object"
|
||||
@@ -165,7 +159,6 @@
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/lastertag/blue
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge
|
||||
battery_lock = 1
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
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."
|
||||
icon_state = "energystun100"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
fire_delay = 10 // Handguns should be inferior to two-handed weapons.
|
||||
|
||||
projectile_type = /obj/item/projectile/beam/stun/med
|
||||
@@ -11,8 +10,8 @@
|
||||
modifystate = "energystun"
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480),
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="energystun", charge_cost = 240),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", charge_cost = 480),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/mounted
|
||||
@@ -26,7 +25,6 @@
|
||||
desc = "The FM-2t is a versatile energy based weapon, capable of switching between stun or kill with a three round burst option for both settings."
|
||||
icon_state = "fm-2tstun100" //May resprite this to be more rifley
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
charge_cost = 100
|
||||
force = 8
|
||||
w_class = ITEMSIZE_LARGE //Probably gonna make it a rifle sooner or later
|
||||
@@ -37,13 +35,13 @@
|
||||
modifystate = "fm-2tstun"
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 2
|
||||
// one_handed_penalty = 30
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 100),
|
||||
list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 200),
|
||||
list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", charge_cost = 100),
|
||||
list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun"),
|
||||
list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill", charge_cost = 200),
|
||||
list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill"),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/nuclear
|
||||
@@ -61,9 +59,9 @@
|
||||
modifystate = null
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 1 // It's rather bulky, so holding it in one hand is a little harder than with two, however it's not 'required'.
|
||||
// one_handed_penalty = 15 // It's rather bulky, so holding it in one hand is a little harder than with two, however it's not 'required'.
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="nucgunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480),
|
||||
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),
|
||||
)
|
||||
@@ -5,15 +5,14 @@
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
force = 10
|
||||
fire_sound='sound/weapons/Laser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
charge_cost = 120
|
||||
sel_mode = 2
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost = 120),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost = 120),
|
||||
list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost = 240),
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 120),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 120),
|
||||
list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 240),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse_rifle/mounted
|
||||
@@ -39,7 +38,7 @@
|
||||
charge_cost = 240
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost = 240),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost = 240),
|
||||
list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost = 480),
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 240),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 240),
|
||||
list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 480),
|
||||
)
|
||||
@@ -3,7 +3,6 @@
|
||||
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"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
@@ -202,12 +201,12 @@ obj/item/weapon/gun/energy/staff/focus
|
||||
projectile_type = /obj/item/projectile/energy/blue_pellet
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge
|
||||
battery_lock = 1
|
||||
accuracy = 5 // Suppressive weapons don't work too well if there's no risk of being hit.
|
||||
accuracy = 75 // Suppressive weapons don't work too well if there's no risk of being hit.
|
||||
burst_delay = 1 // Burst faster than average.
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6)
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="single shot", burst = 1, burst_accuracy = list(5), dispersion = list(0), charge_cost = 24),
|
||||
list(mode_name="five shot burst", burst = 5, burst_accuracy = list(5,5,5,5,5), dispersion = list(1,1,1,1,1)),
|
||||
list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(5,5,5,5,5,5,5,5,5,5), dispersion = list(2,2,2,2,2,2,2,2,2,2))
|
||||
list(mode_name="single shot", burst = 1, burst_accuracy = list(75), dispersion = list(0), charge_cost = 24),
|
||||
list(mode_name="five shot burst", burst = 5, burst_accuracy = list(75,75,75,75,75), dispersion = list(1,1,1,1,1)),
|
||||
list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(75,75,75,75,75,75,75,75,75,75), dispersion = list(2,2,2,2,2,2,2,2,2,2)),
|
||||
)
|
||||
@@ -3,7 +3,6 @@
|
||||
desc = "The NT Mk30 NL is a small gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T design."
|
||||
icon_state = "taser"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/mounted
|
||||
@@ -22,7 +21,6 @@
|
||||
desc = "A LAEP20 Zeus. Designed by Lawson Arms and produced under the wing of Hephaestus, several TSCs have been trying to get a hold of the blueprints for half a decade."
|
||||
icon_state = "stunrevolver"
|
||||
item_state = "stunrevolver"
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
projectile_type = /obj/item/projectile/energy/electrode/strong
|
||||
charge_cost = 300
|
||||
@@ -63,7 +61,6 @@
|
||||
desc = "The Mars Military Industries MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands."
|
||||
icon_state = "plasma_stun"
|
||||
item_state = "plasma_stun"
|
||||
fire_sound = 'sound/weapons/blaster.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3)
|
||||
fire_delay = 20
|
||||
charge_cost = 600
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "coilgun"
|
||||
item_state = "coilgun"
|
||||
icon = 'icons/obj/railgun.dmi'
|
||||
// one_handed_penalty = 1
|
||||
// one_handed_penalty = 15
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_MAGNET = 4)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
var/obj/item/loaded // Currently loaded object, for retrieval/unloading.
|
||||
var/load_type = /obj/item/stack/rods // Type of stack to load with.
|
||||
var/projectile_type = /obj/item/projectile/bullet/magnetic // Actual fire type, since this isn't throw_at rod launcher.
|
||||
projectile_type = /obj/item/projectile/bullet/magnetic // Actual fire type, since this isn't throw_at rod launcher.
|
||||
|
||||
var/power_cost = 950 // Cost per fire, should consume almost an entire basic cell.
|
||||
var/power_per_tick // Capacitor charge per process(). Updated based on capacitor rating.
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
w_class = ITEMSIZE_HUGE
|
||||
slot_flags = SLOT_BELT
|
||||
loaded = /obj/item/weapon/rcd_ammo/large
|
||||
slowdown = 1 // Slowdown equals slowdown_worn, until we decide to import the system to differentiate between held and worn items
|
||||
fire_delay = 1
|
||||
|
||||
var/initial_cell_type = /obj/item/weapon/cell/hyper
|
||||
var/initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv
|
||||
@@ -59,7 +61,9 @@
|
||||
|
||||
initial_cell_type = /obj/item/weapon/cell/infinite
|
||||
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/super
|
||||
fire_delay = 0
|
||||
|
||||
slowdown = 2
|
||||
slowdown_held = 3
|
||||
slowdown_worn = 2
|
||||
|
||||
@@ -67,9 +71,9 @@
|
||||
w_class = ITEMSIZE_NO_CONTAINER
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=1, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_handed_penalty=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=15, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_handed_penalty=30, burst_accuracy=list(0,-15,-15,-15,-30), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/automatic/examine(var/mob/user)
|
||||
@@ -82,11 +86,18 @@
|
||||
desc = "The MI-12 Skadi is a burst fire capable railgun that fires flechette rounds at high velocity. Deadly against armour, but much less effective against soft targets."
|
||||
icon_state = "flechette_gun"
|
||||
item_state = "z8carbine"
|
||||
|
||||
initial_cell_type = /obj/item/weapon/cell/hyper
|
||||
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv
|
||||
|
||||
fire_delay = 0
|
||||
|
||||
slot_flags = SLOT_BACK
|
||||
|
||||
slowdown = 0
|
||||
slowdown_held = 0
|
||||
slowdown_worn = 0
|
||||
|
||||
power_cost = 100
|
||||
load_type = /obj/item/weapon/magnetic_ammo
|
||||
projectile_type = /obj/item/projectile/bullet/magnetic/flechette
|
||||
@@ -95,6 +106,6 @@
|
||||
empty_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=1, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=15, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
|
||||
)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000)
|
||||
recoil = 1
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong //Only used for Cham Guns
|
||||
|
||||
var/caliber = ".357" //determines which casings will fit
|
||||
var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled
|
||||
|
||||
@@ -9,16 +9,16 @@
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
|
||||
slot_flags = SLOT_BELT
|
||||
ammo_type = /obj/item/ammo_casing/a9mm
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
multi_aim = 1
|
||||
burst_delay = 2
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 1
|
||||
// one_handed_penalty = 15
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
|
||||
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1,-2,-2), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))
|
||||
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15,-30,-30), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r
|
||||
@@ -35,11 +35,11 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m10mm
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m10mm)
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 2
|
||||
// one_handed_penalty = 15
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/update_icon()
|
||||
..()
|
||||
@@ -62,13 +62,14 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m545
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m545)
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a545
|
||||
|
||||
one_handed_penalty = 4
|
||||
// one_handed_penalty = 30
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
|
||||
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2,-2,-3), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6))
|
||||
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30,-30,-45), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
|
||||
@@ -93,6 +94,7 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m9mmt/rubber
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m9mmt)
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
|
||||
..()
|
||||
@@ -116,15 +118,16 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762)
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
one_handed_penalty = 4
|
||||
// one_handed_penalty = 60
|
||||
|
||||
burst_delay = 4
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, use_launcher=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, use_launcher=null, burst_accuracy=list(0,-1), dispersion=list(0.0, 0.6)),
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, use_launcher=null, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)),
|
||||
list(mode_name="fire grenades", burst=null, fire_delay=null, move_delay=null, use_launcher=1, burst_accuracy=null, dispersion=null)
|
||||
)
|
||||
|
||||
@@ -187,8 +190,9 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m545saw
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m545saw, /obj/item/ammo_magazine/m545)
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a545
|
||||
|
||||
one_handed_penalty = 6
|
||||
// one_handed_penalty = 90
|
||||
|
||||
var/cover_open = 0
|
||||
|
||||
@@ -203,8 +207,8 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/special_check(mob/user)
|
||||
@@ -260,19 +264,19 @@
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
caliber = "12g"
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m12gdrum
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m12gdrum)
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun
|
||||
|
||||
one_handed_penalty = 4
|
||||
// one_handed_penalty = 60
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6))
|
||||
// list(mode_name="6-round bursts", burst=6, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
|
||||
list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.0, 0.6, 0.6))
|
||||
// list(mode_name="6-round bursts", burst=6, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30, -30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/as24/update_icon()
|
||||
@@ -296,7 +300,7 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0))
|
||||
list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon()
|
||||
@@ -322,7 +326,7 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/p90/update_icon()
|
||||
@@ -342,7 +346,7 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
|
||||
@@ -363,12 +367,13 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762
|
||||
|
||||
one_handed_penalty = 4
|
||||
// one_handed_penalty = 45
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1), dispersion=list(0.0, 0.6))
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bullpup/update_icon(var/ignore_inhands)
|
||||
@@ -379,4 +384,5 @@
|
||||
icon_state = "bullpup"
|
||||
else
|
||||
item_state = "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
if(!ignore_inhands)
|
||||
update_held_icon()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
icon_state = "sawnrifle"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
recoil = 2 // Owch
|
||||
accuracy = -1 // You know damn well why.
|
||||
accuracy = -15 // You know damn well why.
|
||||
item_state = "gun"
|
||||
slot_flags &= ~SLOT_BACK //you can't sling it on your back
|
||||
slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
handle_casings = HOLD_CASINGS
|
||||
max_shells = 1
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
var/retracted_bolt = 0
|
||||
load_method = SINGLE_CASING
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
|
||||
magazine_type = /obj/item/ammo_magazine/m45
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m45)
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium
|
||||
icon_state = "colt"
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg'
|
||||
load_method = MAGAZINE
|
||||
|
||||
/obj/item/weapon/gun/projectile/colt/update_icon()
|
||||
@@ -68,14 +68,22 @@
|
||||
M << "Your gun is now sprited as [choice]. Say hello to your new friend."
|
||||
return 1
|
||||
|
||||
/*//apart of reskins that have two sprites, touching may result in frustration and breaks
|
||||
/obj/item/weapon/gun/projectile/colt/detective/attack_hand(var/mob/living/user)
|
||||
if(!unique_reskin && loc == user)
|
||||
reskin_gun(user)
|
||||
return
|
||||
..()
|
||||
*/
|
||||
|
||||
/obj/item/weapon/gun/projectile/sec
|
||||
name = ".45 pistol"
|
||||
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Found pretty much everywhere humans are. Uses .45 rounds."
|
||||
icon_state = "secguncomp"
|
||||
magazine_type = /obj/item/ammo_magazine/m45/rubber
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg'
|
||||
load_method = MAGAZINE
|
||||
|
||||
/obj/item/weapon/gun/projectile/sec/update_icon()
|
||||
@@ -114,6 +122,7 @@
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m45
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m45)
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle
|
||||
name = "desert eagle"
|
||||
@@ -195,10 +204,10 @@
|
||||
caliber = "9mm"
|
||||
silenced = 0
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m9mm/compact
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact)
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
|
||||
/obj/item/weapon/gun/projectile/pistol/flash
|
||||
name = "compact signal pistol"
|
||||
@@ -291,6 +300,7 @@
|
||||
load_method = SINGLE_CASING
|
||||
max_shells = 2
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
|
||||
/obj/item/weapon/gun/projectile/luger
|
||||
name = "\improper P08 Luger"
|
||||
@@ -299,9 +309,9 @@
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
|
||||
caliber = "9mm"
|
||||
load_method = MAGAZINE
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/m9mm/compact
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m9mm/compact)
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
|
||||
/obj/item/weapon/gun/projectile/luger/update_icon()
|
||||
..()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 6
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/verb/spin_cylinder()
|
||||
@@ -154,6 +155,7 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 7
|
||||
ammo_type = /obj/item/ammo_casing/cap
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/judge
|
||||
name = "\"The Judge\""
|
||||
@@ -162,10 +164,10 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
caliber = "12g"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
|
||||
max_shells = 5
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
recoil = 2 // ow my fucking hand
|
||||
accuracy = -1 // smooth bore + short barrel = shit accuracy
|
||||
accuracy = -15 // smooth bore + short barrel = shit accuracy
|
||||
ammo_type = /obj/item/ammo_casing/a12g
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun
|
||||
// ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat
|
||||
@@ -176,9 +178,9 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 9
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg'
|
||||
caliber = ".38"
|
||||
ammo_type = /obj/item/ammo_casing/a38
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
var/secondary_max_shells = 1
|
||||
var/secondary_caliber = "12g"
|
||||
var/secondary_ammo_type = /obj/item/ammo_casing/a12g
|
||||
@@ -208,7 +210,6 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
|
||||
if(caliber && secondary_caliber)
|
||||
caliber = secondary_caliber
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
|
||||
if(ammo_type && secondary_ammo_type)
|
||||
ammo_type = secondary_ammo_type
|
||||
@@ -225,7 +226,6 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
|
||||
if(caliber && secondary_caliber)
|
||||
caliber = initial(caliber)
|
||||
fire_sound = initial(fire_sound)
|
||||
|
||||
if(ammo_type && secondary_ammo_type)
|
||||
ammo_type = initial(ammo_type)
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
|
||||
load_method = SINGLE_CASING|SPEEDLOADER
|
||||
ammo_type = /obj/item/ammo_casing/a12g/beanbag
|
||||
projectile_type = /obj/item/projectile/bullet/shotgun
|
||||
handle_casings = HOLD_CASINGS
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
var/recentpump = 0 // to prevent spammage
|
||||
var/action_sound = 'sound/weapons/shotgunpump.ogg'
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
|
||||
name = "sawn-off shotgun"
|
||||
desc = "Omar's coming!"
|
||||
user << "<span class='warning'>You shorten the barrel of \the [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>You shorten the barrel of \the [src]!</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -11,13 +11,14 @@
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
caliber = "14.5mm"
|
||||
recoil = 5 //extra kickback
|
||||
fire_sound = 'sound/weapons/sniper.ogg' // extra boom
|
||||
handle_casings = HOLD_CASINGS
|
||||
load_method = SINGLE_CASING
|
||||
max_shells = 1
|
||||
ammo_type = /obj/item/ammo_casing/a145
|
||||
accuracy = -5
|
||||
scoped_accuracy = 5
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a145
|
||||
accuracy = -75
|
||||
scoped_accuracy = 75
|
||||
// one_handed_penalty = 90
|
||||
var/bolt_open = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/heavysniper/update_icon()
|
||||
@@ -79,10 +80,10 @@
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
caliber = "7.62mm"
|
||||
load_method = MAGAZINE
|
||||
accuracy = -3 //shooting at the hip
|
||||
accuracy = -45 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
// one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
fire_sound = 'sound/weapons/SVD_shot.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/m762svd
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762svd)
|
||||
|
||||
@@ -56,23 +56,23 @@
|
||||
desc = "A vicious alien beam weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive."
|
||||
icon_state = "darkcannon"
|
||||
item_state = "darkcannon"
|
||||
fire_sound = 'sound/weapons/eLuger.ogg'
|
||||
w_class = ITEMSIZE_HUGE
|
||||
charge_cost = 300
|
||||
projectile_type = /obj/item/projectile/beam/stun/darkmatter
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge
|
||||
battery_lock = 1
|
||||
accuracy = 2
|
||||
accuracy = 30
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(2), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300),
|
||||
list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(2), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 600),
|
||||
list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300),
|
||||
list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 600),
|
||||
list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(3, 3, 3, 3, 3, 3, 3, 3, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 300),
|
||||
)
|
||||
|
||||
/obj/item/projectile/beam/stun/darkmatter
|
||||
name = "dark matter wave"
|
||||
icon_state = "darkt"
|
||||
fire_sound = 'sound/weapons/eLuger.ogg'
|
||||
nodamage = 1
|
||||
taser_effect = 1
|
||||
agony = 55
|
||||
@@ -86,6 +86,7 @@
|
||||
/obj/item/projectile/beam/darkmatter
|
||||
name = "dark matter bolt"
|
||||
icon_state = "darkb"
|
||||
fire_sound = 'sound/weapons/eLuger.ogg'
|
||||
damage = 35
|
||||
armor_penetration = 35
|
||||
damage_type = BRUTE
|
||||
@@ -101,6 +102,7 @@
|
||||
/obj/item/projectile/energy/darkmatter
|
||||
name = "dark matter pellet"
|
||||
icon_state = "dark_pellet"
|
||||
fire_sound = 'sound/weapons/eLuger.ogg'
|
||||
damage = 20
|
||||
armor_penetration = 35
|
||||
damage_type = BRUTE
|
||||
@@ -117,7 +119,6 @@
|
||||
desc = "A vicious alien sound weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive."
|
||||
icon_state = "noise"
|
||||
item_state = "noise"
|
||||
fire_sound = 'sound/effects/basscannon.ogg'
|
||||
w_class = ITEMSIZE_HUGE
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge
|
||||
battery_lock = 1
|
||||
@@ -133,6 +134,7 @@
|
||||
/obj/item/projectile/sonic
|
||||
name = "sonic pulse"
|
||||
icon_state = "sound"
|
||||
fire_sound = 'sound/effects/basscannon.ogg'
|
||||
damage = 5
|
||||
armor_penetration = 30
|
||||
damage_type = BRUTE
|
||||
|
||||
@@ -69,6 +69,8 @@
|
||||
var/tracer_type
|
||||
var/impact_type
|
||||
|
||||
var/fire_sound
|
||||
|
||||
var/vacuum_traversal = 1 //Determines if the projectile can exist in vacuum, if false, the projectile will be deleted if it enters vacuum.
|
||||
|
||||
var/datum/plot_vector/trajectory // used to plot the path of the projectile
|
||||
@@ -177,7 +179,7 @@
|
||||
return
|
||||
|
||||
//roll to-hit
|
||||
miss_modifier = max(15*(distance-2) - round(15*accuracy) + miss_modifier + round(15*target_mob.get_evasion()), 0)
|
||||
miss_modifier = max(15*(distance-2) - accuracy + miss_modifier + target_mob.get_evasion(), 0)
|
||||
var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss
|
||||
|
||||
var/result = PROJECTILE_FORCE_MISS
|
||||
@@ -192,7 +194,7 @@
|
||||
|
||||
//hit messages
|
||||
if(silenced)
|
||||
target_mob << "<span class='danger'>You've been hit in the [parse_zone(def_zone)] by \the [src]!</span>"
|
||||
to_chat(target_mob, "<span class='danger'>You've been hit in the [parse_zone(def_zone)] by \the [src]!</span>")
|
||||
else
|
||||
visible_message("<span class='danger'>\The [target_mob] is hit by \the [src] in the [parse_zone(def_zone)]!</span>")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/projectile/beam
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 40
|
||||
damage_type = BURN
|
||||
@@ -21,7 +22,6 @@
|
||||
/obj/item/projectile/beam/practice
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
@@ -32,6 +32,9 @@
|
||||
icon_state = "laser"
|
||||
damage = 15
|
||||
|
||||
/obj/item/projectile/beam/smalllaser
|
||||
damage = 25
|
||||
|
||||
/obj/item/projectile/beam/burstlaser
|
||||
damage = 30
|
||||
armor_penetration = 10
|
||||
@@ -44,6 +47,7 @@
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
fire_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
damage = 60
|
||||
armor_penetration = 30
|
||||
light_range = 3
|
||||
@@ -62,6 +66,7 @@
|
||||
/obj/item/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
icon_state = "xray"
|
||||
fire_sound = 'sound/weapons/eluger.ogg'
|
||||
damage = 25
|
||||
armor_penetration = 50
|
||||
light_color = "#00CC33"
|
||||
@@ -83,8 +88,9 @@
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
icon_state = "u_laser"
|
||||
damage = 50
|
||||
armor_penetration = 30
|
||||
fire_sound='sound/weapons/pulse.ogg'
|
||||
damage = 100 //Badmin toy, don't care
|
||||
armor_penetration = 100
|
||||
light_color = "#0066FF"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_pulse/muzzle
|
||||
@@ -99,6 +105,7 @@
|
||||
/obj/item/projectile/beam/emitter
|
||||
name = "emitter beam"
|
||||
icon_state = "emitter"
|
||||
fire_sound = 'sound/weapons/emitter.ogg'
|
||||
damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm
|
||||
light_color = "#00CC33"
|
||||
|
||||
@@ -109,7 +116,6 @@
|
||||
/obj/item/projectile/beam/lastertag/blue
|
||||
name = "lasertag beam"
|
||||
icon_state = "bluelaser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
no_attack_log = 1
|
||||
damage_type = BURN
|
||||
@@ -130,7 +136,6 @@
|
||||
/obj/item/projectile/beam/lastertag/red
|
||||
name = "lasertag beam"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
no_attack_log = 1
|
||||
damage_type = BURN
|
||||
@@ -147,7 +152,6 @@
|
||||
/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE
|
||||
name = "lasertag beam"
|
||||
icon_state = "omnilaser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
@@ -167,6 +171,7 @@
|
||||
/obj/item/projectile/beam/sniper
|
||||
name = "sniper beam"
|
||||
icon_state = "xray"
|
||||
fire_sound = 'sound/weapons/gauss_shoot.ogg'
|
||||
damage = 50
|
||||
armor_penetration = 10
|
||||
light_color = "#00CC33"
|
||||
@@ -178,6 +183,7 @@
|
||||
/obj/item/projectile/beam/stun
|
||||
name = "stun beam"
|
||||
icon_state = "stun"
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
nodamage = 1
|
||||
taser_effect = 1
|
||||
agony = 40
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/projectile/bullet
|
||||
name = "bullet"
|
||||
icon_state = "bullet"
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
|
||||
damage = 60
|
||||
damage_type = BRUTE
|
||||
nodamage = 0
|
||||
@@ -124,6 +125,7 @@
|
||||
/* short-casing projectiles, like the kind used in pistols or SMGs */
|
||||
|
||||
/obj/item/projectile/bullet/pistol
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg'
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/bullet/pistol/ap
|
||||
@@ -142,6 +144,7 @@
|
||||
armor_penetration = -50
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong //revolvers and matebas
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
|
||||
damage = 60
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
|
||||
@@ -156,6 +159,7 @@
|
||||
|
||||
/obj/item/projectile/bullet/shotgun
|
||||
name = "slug"
|
||||
fire_sound = 'sound/weapons/gunshot/shotgun.ogg'
|
||||
damage = 50
|
||||
armor_penetration = 15
|
||||
|
||||
@@ -171,6 +175,7 @@
|
||||
//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"
|
||||
fire_sound = 'sound/weapons/gunshot/shotgun.ogg'
|
||||
damage = 13
|
||||
pellets = 6
|
||||
range_step = 1
|
||||
@@ -180,6 +185,7 @@
|
||||
//EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used
|
||||
/obj/item/projectile/bullet/shotgun/ion
|
||||
name = "ion slug"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
damage = 15
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
@@ -194,10 +200,12 @@
|
||||
/* "Rifle" rounds */
|
||||
|
||||
/obj/item/projectile/bullet/rifle
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot3.ogg'
|
||||
armor_penetration = 15
|
||||
penetrating = 1
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot2.ogg'
|
||||
damage = 35
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/ap
|
||||
@@ -232,6 +240,7 @@
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145
|
||||
fire_sound = 'sound/weapons/gunshot/sniper.ogg'
|
||||
damage = 80
|
||||
stun = 3
|
||||
weaken = 3
|
||||
@@ -253,11 +262,12 @@
|
||||
|
||||
/obj/item/projectile/bullet/burstbullet
|
||||
name = "exploding bullet"
|
||||
fire_sound = 'sound/effects/Explosion1.ogg'
|
||||
damage = 20
|
||||
embed_chance = 0
|
||||
edge = 1
|
||||
|
||||
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
|
||||
/obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target))
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
@@ -309,6 +319,7 @@
|
||||
/obj/item/projectile/bullet/pistol/cap
|
||||
name = "cap"
|
||||
damage_type = HALLOSS
|
||||
fire_sound = null
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed_chance = 0
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
/obj/item/projectile/energy/flash
|
||||
name = "chemical shell"
|
||||
icon_state = "bullet"
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg'
|
||||
damage = 5
|
||||
kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
var/flash_range = 0
|
||||
@@ -47,6 +48,7 @@
|
||||
|
||||
//blinds people like the flash round, but can also be used for temporary illumination
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
fire_sound = 'sound/weapons/gunshot/shotgun.ogg'
|
||||
damage = 10
|
||||
flash_range = 1
|
||||
brightness = 15
|
||||
@@ -63,6 +65,7 @@
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
taser_effect = 1
|
||||
agony = 40
|
||||
light_range = 2
|
||||
@@ -81,6 +84,7 @@
|
||||
/obj/item/projectile/energy/declone
|
||||
name = "declone"
|
||||
icon_state = "declone"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
nodamage = 1
|
||||
damage_type = CLONE
|
||||
irradiate = 40
|
||||
@@ -106,7 +110,6 @@
|
||||
agony = 40
|
||||
stutter = 10
|
||||
|
||||
|
||||
/obj/item/projectile/energy/bolt/large
|
||||
name = "largebolt"
|
||||
damage = 20
|
||||
@@ -138,6 +141,7 @@
|
||||
/obj/item/projectile/energy/phoron
|
||||
name = "phoron bolt"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 20
|
||||
damage_type = TOX
|
||||
irradiate = 20
|
||||
@@ -148,6 +152,7 @@
|
||||
/obj/item/projectile/energy/plasmastun
|
||||
name = "plasma pulse"
|
||||
icon_state = "plasma_stun"
|
||||
fire_sound = 'sound/weapons/blaster.ogg'
|
||||
armor_penetration = 10
|
||||
kill_count = 4
|
||||
damage = 5
|
||||
@@ -187,6 +192,7 @@
|
||||
/obj/item/projectile/energy/blue_pellet
|
||||
name = "suppressive pellet"
|
||||
icon_state = "blue_pellet"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
damage = 5
|
||||
armor_penetration = 75
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/obj/item/projectile/bullet/magnetic
|
||||
name = "rod"
|
||||
icon_state = "rod"
|
||||
fire_sound = 'sound/weapons/railgun.ogg'
|
||||
damage = 65
|
||||
stun = 1
|
||||
weaken = 1
|
||||
@@ -17,6 +18,7 @@
|
||||
/obj/item/projectile/bullet/magnetic/flechette
|
||||
name = "flechette"
|
||||
icon_state = "flechette"
|
||||
fire_sound = 'sound/weapons/rapidslice.ogg'
|
||||
damage = 20
|
||||
armor_penetration = 100
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/projectile/ion
|
||||
name = "ion bolt"
|
||||
icon_state = "ion"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
@@ -27,12 +28,13 @@
|
||||
edge = 1
|
||||
|
||||
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, -1, 0, 2)
|
||||
return 1
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/temp
|
||||
name = "freeze beam"
|
||||
icon_state = "ice_2"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
@@ -105,6 +107,7 @@
|
||||
/obj/item/projectile/energy/floramut
|
||||
name = "alpha somatoray"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
@@ -148,6 +151,7 @@
|
||||
/obj/item/projectile/energy/floramut/gene
|
||||
name = "gamma somatoray"
|
||||
icon_state = "energy2"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
@@ -157,6 +161,7 @@
|
||||
/obj/item/projectile/energy/florayield
|
||||
name = "beta somatoray"
|
||||
icon_state = "energy2"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
|
||||
@@ -896,7 +896,7 @@
|
||||
on_expired_text = "<span class='notice'>The spores of goo have faded, and you feel your agility returning to what it was before.</span>"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
evasion = 2
|
||||
evasion = 30
|
||||
slowdown = -1
|
||||
attack_speed_percent = 0.75
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
fire_sound = 'sound/weapons/taser2.ogg'
|
||||
charge_cost = 120 // Twice as many shots.
|
||||
projectile_type = /obj/item/projectile/beam/stun/xeno
|
||||
accuracy = 2 // Make it a bit easier to hit the slimes.
|
||||
accuracy = 30 // Make it a bit easier to hit the slimes.
|
||||
description_info = "This gun will stun a slime or other lesser lifeform for about two seconds, if hit with the projectile it fires."
|
||||
description_fluff = "An easy to use weapon designed by NanoTrasen, for NanoTrasen. This weapon is designed to subdue lesser \
|
||||
xeno lifeforms at a distance. It is ineffective at stunning larger lifeforms such as humanoids."
|
||||
|
||||
BIN
sound/weapons/gunshot/gunshot.ogg
Normal file
BIN
sound/weapons/gunshot/gunshot.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/gunshot2.ogg
Normal file
BIN
sound/weapons/gunshot/gunshot2.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/gunshot3.ogg
Normal file
BIN
sound/weapons/gunshot/gunshot3.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/gunshot_pistol.ogg
Normal file
BIN
sound/weapons/gunshot/gunshot_pistol.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/gunshot_smg.ogg
Normal file
BIN
sound/weapons/gunshot/gunshot_smg.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/gunshot_strong.ogg
Normal file
BIN
sound/weapons/gunshot/gunshot_strong.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/shotgun.ogg
Normal file
BIN
sound/weapons/gunshot/shotgun.ogg
Normal file
Binary file not shown.
BIN
sound/weapons/gunshot/sniper.ogg
Normal file
BIN
sound/weapons/gunshot/sniper.ogg
Normal file
Binary file not shown.
Reference in New Issue
Block a user