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:
Anewbe
2018-02-13 01:12:14 -06:00
committed by Atermonera
parent dcf7b73320
commit 534a588a6a
45 changed files with 967 additions and 837 deletions

View File

@@ -26,7 +26,7 @@
on_created_text = "<span class='warning'>You start to glow very brightly!</span>" on_created_text = "<span class='warning'>You start to glow very brightly!</span>"
on_expired_text = "<span class='notice'>Your glow has ended.</span>" on_expired_text = "<span class='notice'>Your glow has ended.</span>"
evasion = -2 evasion = -30
stacks = MODIFIER_STACK_EXTEND stacks = MODIFIER_STACK_EXTEND
/datum/modifier/technomancer/corona/tick() /datum/modifier/technomancer/corona/tick()

View File

@@ -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_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>" on_expired_text = "<span class='warning'>Your repulsion field has expired.</span>"
evasion = 3 evasion = 45
stacks = MODIFIER_STACK_EXTEND stacks = MODIFIER_STACK_EXTEND

View File

@@ -108,8 +108,27 @@
src.loc = null src.loc = null
return ..() return ..()
/obj/item/device /obj/item/proc/update_twohanding()
icon = 'icons/obj/device.dmi' update_held_icon()
/obj/item/proc/is_held_twohanded(mob/living/M)
var/check_hand
if(M.l_hand == src && !M.r_hand)
check_hand = BP_R_HAND //item in left hand, check right hand
else if(M.r_hand == src && !M.l_hand)
check_hand = BP_L_HAND //item in right hand, check left hand
else
return FALSE
//would check is_broken() and is_malfunctioning() here too but is_malfunctioning()
//is probabilistic so we can't do that and it would be unfair to just check one.
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/hand = H.organs_by_name[check_hand]
if(istype(hand) && hand.is_usable())
return TRUE
return FALSE
//Checks if the item is being held by a mob, and if so, updates the held icons //Checks if the item is being held by a mob, and if so, updates the held icons
/obj/item/proc/update_held_icon() /obj/item/proc/update_held_icon()
@@ -656,3 +675,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
// Check if an object should ignite others, like a lit lighter or candle. // Check if an object should ignite others, like a lit lighter or candle.
/obj/item/proc/is_hot() /obj/item/proc/is_hot()
return FALSE return FALSE
// My best guess as to why this is here would be that it does so little. Still, keep it under all the procs, for sanity's sake.
/obj/item/device
icon = 'icons/obj/device.dmi'

View File

@@ -29,7 +29,7 @@
/obj/item/weapon/material/twohanded/update_held_icon() /obj/item/weapon/material/twohanded/update_held_icon()
var/mob/living/M = loc 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 wielded = 1
force = force_wielded force = force_wielded
name = "[base_name] (wielded)" name = "[base_name] (wielded)"

View File

@@ -430,6 +430,7 @@
P.icon = initial(copy_projectile.icon) P.icon = initial(copy_projectile.icon)
P.icon_state = initial(copy_projectile.icon_state) P.icon_state = initial(copy_projectile.icon_state)
P.pass_flags = initial(copy_projectile.pass_flags) P.pass_flags = initial(copy_projectile.pass_flags)
P.fire_sound = initial(copy_projectile.fire_sound)
P.hitscan = initial(copy_projectile.hitscan) P.hitscan = initial(copy_projectile.hitscan)
P.step_delay = initial(copy_projectile.step_delay) P.step_delay = initial(copy_projectile.step_delay)
P.muzzle_type = initial(copy_projectile.muzzle_type) P.muzzle_type = initial(copy_projectile.muzzle_type)
@@ -451,12 +452,15 @@
var/obj/item/weapon/gun/copy = ..() var/obj/item/weapon/gun/copy = ..()
flags_inv = copy.flags_inv flags_inv = copy.flags_inv
if(copy.fire_sound)
fire_sound = copy.fire_sound fire_sound = copy.fire_sound
else
fire_sound = null
fire_sound_text = copy.fire_sound_text fire_sound_text = copy.fire_sound_text
var/obj/item/weapon/gun/energy/E = copy var/obj/item/weapon/gun/G = copy
if(istype(E)) if(istype(G))
copy_projectile = E.projectile_type copy_projectile = G.projectile_type
//charge_meter = E.charge_meter //does not work very well with icon_state changes, ATM //charge_meter = E.charge_meter //does not work very well with icon_state changes, ATM
else else
copy_projectile = null copy_projectile = null

View File

@@ -15,7 +15,7 @@
outgoing_melee_damage_percent = 0.7 // 30% less melee damage. outgoing_melee_damage_percent = 0.7 // 30% less melee damage.
disable_duration_percent = 1.25 // Stuns last 25% longer. disable_duration_percent = 1.25 // Stuns last 25% longer.
slowdown = 1 // Slower. slowdown = 1 // Slower.
evasion = -1 // 15% easier to hit. evasion = -15 // 15% easier to hit.
// Tracks number of deaths, one modifier added per cloning // Tracks number of deaths, one modifier added per cloning
/datum/modifier/cloned /datum/modifier/cloned

View File

@@ -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/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/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/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/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/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/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. var/icon_scale_percent // Makes the holder's icon get scaled up or down.

View File

@@ -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. \ 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." Regardless, you find it quite difficult to land shots where you wanted them to go."
accuracy = -1 accuracy = -15
accuracy_dispersion = 1 accuracy_dispersion = 1
/datum/modifier/trait/high_metabolism /datum/modifier/trait/high_metabolism

View File

@@ -164,12 +164,14 @@ This saves us from having to call add_fingerprint() any time something is put in
else if (W == r_hand) else if (W == r_hand)
r_hand = null r_hand = null
if(l_hand) if(l_hand)
l_hand.update_twohanding()
l_hand.update_held_icon() l_hand.update_held_icon()
update_inv_l_hand() update_inv_l_hand()
update_inv_r_hand() update_inv_r_hand()
else if (W == l_hand) else if (W == l_hand)
l_hand = null l_hand = null
if(r_hand) if(r_hand)
r_hand.update_twohanding()
r_hand.update_held_icon() r_hand.update_held_icon()
update_inv_l_hand() update_inv_l_hand()
update_inv_l_hand() update_inv_l_hand()

View File

@@ -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/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/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/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 var/image/dsoverlay = null //Overlay used for darksight eye adjustments

View File

@@ -15,6 +15,11 @@
/proc/mob_size_difference(var/mob_size_A, var/mob_size_B) /proc/mob_size_difference(var/mob_size_A, var/mob_size_B)
return round(log(2, mob_size_A/mob_size_B), 1) 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) /proc/istiny(A)
if(A && istype(A, /mob/living)) if(A && istype(A, /mob/living))
var/mob/living/L = A var/mob/living/L = A

View File

@@ -18,7 +18,7 @@
if(propname == "mode_name") if(propname == "mode_name")
name = propvalue 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 settings[propname] = gun.vars[propname] //better than initial() as it handles list vars like burst_accuracy
else else
settings[propname] = propvalue settings[propname] = propvalue
@@ -61,13 +61,14 @@
var/recoil = 0 //screen shake var/recoil = 0 //screen shake
var/silenced = 0 var/silenced = 0
var/muzzle_flash = 3 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/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/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/list/dispersion = list(0)
var/mode_name = null var/mode_name = null
var/requires_two_hands var/projectile_type = /obj/item/projectile //On ballistics, only used to check for the cham gun
var/wielded_icon = "gun_wielded"
var/wielded_item_state
var/one_handed_penalty = 0 // Penalty applied if someone fires a two-handed gun with one hand. 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/obj/screen/auto_target/auto_target
var/shooting = 0 var/shooting = 0
@@ -104,19 +105,32 @@
verbs -= /obj/item/weapon/gun/verb/give_dna verbs -= /obj/item/weapon/gun/verb/give_dna
verbs -= /obj/item/weapon/gun/verb/allow_dna verbs -= /obj/item/weapon/gun/verb/allow_dna
/obj/item/weapon/gun/update_held_icon() /obj/item/weapon/gun/update_twohanding()
if(requires_two_hands) if(one_handed_penalty)
var/mob/living/M = loc var/mob/living/M = loc
if(istype(M)) 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)" name = "[initial(name)] (wielded)"
item_state = wielded_icon
else else
name = initial(name) name = initial(name)
item_state = initial(item_state) else
update_icon(ignore_inhands=1) // In case item_state is set somewhere 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 //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. //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. //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 verbs -= /obj/item/weapon/gun/verb/allow_dna
else else
user << "<span class='warning'>\The [src] is not accepting modifications at this time.</span>" 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) /obj/item/weapon/gun/emag_act(var/remaining_charges, var/mob/user)
if(dna_lock && attached_lock.controller_lock) 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) /obj/item/weapon/gun/proc/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0)
if(!user || !target) return if(!user || !target) return
if(target.z != user.z) return
add_fingerprint(user) add_fingerprint(user)
@@ -307,12 +323,7 @@
next_fire_time = world.time + shoot_time next_fire_time = world.time + shoot_time
var/held_acc_mod = 0 var/held_twohanded = (user.can_wield_item(src) && src.is_held_twohanded(user))
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)
//actually attempt to shoot //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. 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) handle_click_empty(user)
break break
var/acc = burst_accuracy[min(i, burst_accuracy.len)] + held_acc_mod process_accuracy(projectile, user, target, i, held_twohanded)
var/disp = dispersion[min(i, dispersion.len)] + held_disp_mod
process_accuracy(projectile, user, target, acc, disp)
if(pointblank) if(pointblank)
process_point_blank(projectile, user, target) process_point_blank(projectile, user, target)
@@ -366,10 +375,9 @@
shooting = 0 shooting = 0
*/ */
// We do this down here, so we don't get the message if we fire an empty gun. // 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(user.item_is_in_hands(src) && user.hands_are_full())
if(one_handed_penalty >= 2) if(one_handed_penalty >= 20)
user << "<span class='warning'>You struggle to keep \the [src] pointed at the correct position with just one hand!</span>" to_chat(user, "<span class='warning'>You struggle to keep \the [src] pointed at the correct position with just one hand!</span>")
if(reflex) 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)") 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,26 +491,46 @@
//called after successfully firing //called after successfully firing
/obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0) /obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0)
if(silenced) if(silenced)
playsound(user, fire_sound, 10, 1) if(reflex)
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( user.visible_message(
"<span class='warning'>[user] fires \the [src][pointblank ? " point blank at \the [target]":""][reflex ? " by reflex!":""]</span>", "<span class='reflex_shoot'><b>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""] by reflex!</b></span>",
"<span class='warning'>You fire \the [src][pointblank ? " point blank at \the [target]":""][reflex ? " by reflex!":""]</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]!" "You hear a [fire_sound_text]!"
) )
if(muzzle_flash) if(muzzle_flash)
set_light(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) if(recoil)
spawn() spawn()
shake_camera(user, recoil+1, recoil) shake_camera(user, recoil+1, recoil)
@@ -530,29 +558,37 @@
damage_mult = 1.5 damage_mult = 1.5
P.damage *= damage_mult 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 var/obj/item/projectile/P = projectile
if(!istype(P)) if(!istype(P))
return //default behaviour only applies to true projectiles 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 //Accuracy modifiers
P.accuracy = accuracy + acc_mod 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. // Certain statuses make it harder to aim, blindness especially. Same chances as melee, however guns accuracy uses multiples of 15.
if(user.eye_blind) if(user.eye_blind)
P.accuracy -= 5 P.accuracy -= 75
if(user.eye_blurry) if(user.eye_blurry)
P.accuracy -= 2 P.accuracy -= 30
if(user.confused) if(user.confused)
P.accuracy -= 3 P.accuracy -= 45
//accuracy bonus from aiming //accuracy bonus from aiming
if (aim_targets && (target in aim_targets)) if (aim_targets && (target in aim_targets))
//If you aim at someone beforehead, it'll hit more often. //If you aim at someone beforehead, it'll hit more often.
//Kinda balanced by fact you need like 2 seconds to aim //Kinda balanced by fact you need like 2 seconds to aim
//As opposed to no-delay pew pew //As opposed to no-delay pew pew
P.accuracy += 2 P.accuracy += 30
// Some modifiers make it harder or easier to hit things. // Some modifiers make it harder or easier to hit things.
for(var/datum/modifier/M in user.modifiers) for(var/datum/modifier/M in user.modifiers)
@@ -582,17 +618,24 @@
y_offset = rand(-1,1) y_offset = rand(-1,1)
x_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 if(launched)
/obj/item/weapon/gun/projectile/colt/detective/attack_hand(var/mob/living/user) play_fire_sound(user, P)
if(!unique_reskin && loc == user)
reskin_gun(user) return launched
return
..()
/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. //Suicide handling.
/obj/item/weapon/gun/var/mouthshoot = 0 //To stop people from suiciding twice... >.> /obj/item/weapon/gun/var/mouthshoot = 0 //To stop people from suiciding twice... >.>
/obj/item/weapon/gun/proc/handle_suicide(mob/living/user) /obj/item/weapon/gun/proc/handle_suicide(mob/living/user)
if(!ishuman(user)) if(!ishuman(user))
return return
@@ -607,10 +650,11 @@
var/obj/item/projectile/in_chamber = consume_next_projectile() var/obj/item/projectile/in_chamber = consume_next_projectile()
if (istype(in_chamber)) if (istype(in_chamber))
user.visible_message("<span class = 'warning'>[user] pulls the trigger.</span>") 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) if(silenced)
playsound(user, fire_sound, 10, 1) playsound(user, shot_sound, 10, 1)
else else
playsound(user, fire_sound, 50, 1) playsound(user, shot_sound, 50, 1)
if(istype(in_chamber, /obj/item/projectile/beam/lastertag)) 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>") user.show_message("<span class = 'warning'>You feel rather silly, trying to commit suicide with a toy.</span>")
mouthshoot = 0 mouthshoot = 0
@@ -656,7 +700,7 @@
..() ..()
if(firemodes.len > 1) if(firemodes.len > 1)
var/datum/firemode/current_mode = firemodes[sel_mode] 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) /obj/item/weapon/gun/proc/switch_firemodes(mob/user)
if(firemodes.len <= 1) if(firemodes.len <= 1)
@@ -667,7 +711,7 @@
sel_mode = 1 sel_mode = 1
var/datum/firemode/new_mode = firemodes[sel_mode] var/datum/firemode/new_mode = firemodes[sel_mode]
new_mode.apply_to(src) 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 return new_mode

View File

@@ -7,8 +7,10 @@
var/obj/item/weapon/cell/power_supply //What type of power cell this uses 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/charge_cost = 240 //How much energy is needed to fire.
var/cell_type = /obj/item/weapon/cell/device/weapon 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/modifystate
var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge

View File

@@ -4,7 +4,7 @@
switch between standard fire and a more efficent but weaker 'suppressive' fire." switch between standard fire and a more efficent but weaker 'suppressive' fire."
icon_state = "laser" icon_state = "laser"
item_state = "laser" item_state = "laser"
fire_sound = 'sound/weapons/Laser.ogg' wielded_item_state = "laser-wielded"
fire_delay = 8 fire_delay = 8
slot_flags = SLOT_BELT|SLOT_BACK slot_flags = SLOT_BELT|SLOT_BACK
w_class = ITEMSIZE_LARGE w_class = ITEMSIZE_LARGE
@@ -12,8 +12,7 @@
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
matter = list(DEFAULT_WALL_MATERIAL = 2000) matter = list(DEFAULT_WALL_MATERIAL = 2000)
projectile_type = /obj/item/projectile/beam/midlaser projectile_type = /obj/item/projectile/beam/midlaser
// requires_two_hands = 1 // one_handed_penalty = 30
one_handed_penalty = 2
firemodes = list( firemodes = list(
list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240), 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 /obj/item/weapon/gun/energy/laser/mounted
self_recharge = 1 self_recharge = 1
use_external_power = 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 /obj/item/weapon/gun/energy/laser/practice
name = "practice laser carbine" name = "practice laser carbine"
@@ -43,7 +42,6 @@
icon_state = "retro" icon_state = "retro"
item_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." 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 slot_flags = SLOT_BELT
w_class = ITEMSIZE_NORMAL w_class = ITEMSIZE_NORMAL
projectile_type = /obj/item/projectile/beam projectile_type = /obj/item/projectile/beam
@@ -79,7 +77,6 @@
item_state = "caplaser" 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." desc = "A rare weapon, handcrafted by a now defunct specialty manufacturer on Luna for a small fortune. It's certainly aged well."
force = 5 force = 5
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
w_class = ITEMSIZE_NORMAL w_class = ITEMSIZE_NORMAL
projectile_type = /obj/item/projectile/beam 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!" flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
icon_state = "lasercannon" icon_state = "lasercannon"
item_state = null item_state = null
fire_sound = 'sound/weapons/lasercannonfire.ogg'
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
slot_flags = SLOT_BELT|SLOT_BACK slot_flags = SLOT_BELT|SLOT_BACK
projectile_type = /obj/item/projectile/beam/heavylaser/cannon projectile_type = /obj/item/projectile/beam/heavylaser/cannon
battery_lock = 1 battery_lock = 1
fire_delay = 20 fire_delay = 20
w_class = ITEMSIZE_LARGE w_class = ITEMSIZE_LARGE
// requires_two_hands = 1 // one_handed_penalty = 90 // The thing's heavy and huge.
one_handed_penalty = 6 // The thing's heavy and huge.
accuracy = 3 accuracy = 3
charge_cost = 600 charge_cost = 600
@@ -113,7 +108,7 @@
use_external_power = 1 use_external_power = 1
recharge_time = 10 recharge_time = 10
accuracy = 0 // Mounted cannons are just fine the way they are. 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 projectile_type = /obj/item/projectile/beam/heavylaser
charge_cost = 400 charge_cost = 400
fire_delay = 20 fire_delay = 20
@@ -124,7 +119,6 @@
standard photonic beams, resulting in an effective 'anti-armor' energy weapon." standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
icon_state = "xray" icon_state = "xray"
item_state = "xray" item_state = "xray"
fire_sound = 'sound/weapons/eluger.ogg'
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2) origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
projectile_type = /obj/item/projectile/beam/xray projectile_type = /obj/item/projectile/beam/xray
charge_cost = 200 charge_cost = 200
@@ -145,10 +139,10 @@
fire_delay = 35 fire_delay = 35
force = 10 force = 10
w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. 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 scoped_accuracy = 0
// requires_two_hands = 1 // 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() /obj/item/weapon/gun/energy/sniperrifle/verb/scope()
set category = "Object" set category = "Object"
@@ -165,7 +159,6 @@
desc = "Standard issue weapon of the Imperial Guard" desc = "Standard issue weapon of the Imperial Guard"
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2) origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
matter = list(DEFAULT_WALL_MATERIAL = 2000) matter = list(DEFAULT_WALL_MATERIAL = 2000)
fire_sound = 'sound/weapons/Laser.ogg'
projectile_type = /obj/item/projectile/beam/lastertag/blue projectile_type = /obj/item/projectile/beam/lastertag/blue
cell_type = /obj/item/weapon/cell/device/weapon/recharge cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1 battery_lock = 1

View File

@@ -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." 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" icon_state = "energystun100"
item_state = null //so the human update icon uses the icon_state instead. 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. fire_delay = 10 // Handguns should be inferior to two-handed weapons.
projectile_type = /obj/item/projectile/beam/stun/med projectile_type = /obj/item/projectile/beam/stun/med
@@ -11,8 +10,8 @@
modifystate = "energystun" modifystate = "energystun"
firemodes = list( 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="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", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", charge_cost = 480),
) )
/obj/item/weapon/gun/energy/gun/mounted /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." 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 icon_state = "fm-2tstun100" //May resprite this to be more rifley
item_state = null //so the human update icon uses the icon_state instead. item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
charge_cost = 100 charge_cost = 100
force = 8 force = 8
w_class = ITEMSIZE_LARGE //Probably gonna make it a rifle sooner or later w_class = ITEMSIZE_LARGE //Probably gonna make it a rifle sooner or later
@@ -37,13 +35,13 @@
modifystate = "fm-2tstun" modifystate = "fm-2tstun"
// requires_two_hands = 1 // requires_two_hands = 1
one_handed_penalty = 2 // one_handed_penalty = 30
firemodes = list( 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=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", fire_sound='sound/weapons/Taser.ogg'), 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", fire_sound='sound/weapons/Laser.ogg', charge_cost = 200), 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", fire_sound='sound/weapons/Laser.ogg'), 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 /obj/item/weapon/gun/energy/gun/nuclear
@@ -61,9 +59,9 @@
modifystate = null modifystate = null
// requires_two_hands = 1 // 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( 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="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", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", charge_cost = 480),
) )

View File

@@ -5,15 +5,14 @@
item_state = null //so the human update icon uses the icon_state instead. item_state = null //so the human update icon uses the icon_state instead.
slot_flags = SLOT_BELT|SLOT_BACK slot_flags = SLOT_BELT|SLOT_BACK
force = 10 force = 10
fire_sound='sound/weapons/Laser.ogg'
projectile_type = /obj/item/projectile/beam projectile_type = /obj/item/projectile/beam
charge_cost = 120 charge_cost = 120
sel_mode = 2 sel_mode = 2
firemodes = list( 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="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_sound='sound/weapons/Laser.ogg', 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_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost = 240), 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 /obj/item/weapon/gun/energy/pulse_rifle/mounted
@@ -39,7 +38,7 @@
charge_cost = 240 charge_cost = 240
firemodes = list( 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="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_sound='sound/weapons/Laser.ogg', 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_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost = 480), list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 480),
) )

View File

@@ -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." 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" icon_state = "ionrifle"
item_state = "ionrifle" item_state = "ionrifle"
fire_sound = 'sound/weapons/Laser.ogg'
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
w_class = ITEMSIZE_LARGE w_class = ITEMSIZE_LARGE
force = 10 force = 10
@@ -202,12 +201,12 @@ obj/item/weapon/gun/energy/staff/focus
projectile_type = /obj/item/projectile/energy/blue_pellet projectile_type = /obj/item/projectile/energy/blue_pellet
cell_type = /obj/item/weapon/cell/device/weapon/recharge cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1 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. burst_delay = 1 // Burst faster than average.
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6) origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6)
firemodes = list( firemodes = list(
list(mode_name="single shot", burst = 1, burst_accuracy = list(5), dispersion = list(0), charge_cost = 24), 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(5,5,5,5,5), dispersion = list(1,1,1,1,1)), 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(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="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)),
) )

View File

@@ -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." 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" icon_state = "taser"
item_state = null //so the human update icon uses the icon_state instead. 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 projectile_type = /obj/item/projectile/beam/stun
/obj/item/weapon/gun/energy/taser/mounted /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." 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" icon_state = "stunrevolver"
item_state = "stunrevolver" item_state = "stunrevolver"
fire_sound = 'sound/weapons/Gunshot.ogg'
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
projectile_type = /obj/item/projectile/energy/electrode/strong projectile_type = /obj/item/projectile/energy/electrode/strong
charge_cost = 300 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." 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" icon_state = "plasma_stun"
item_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) origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3)
fire_delay = 20 fire_delay = 20
charge_cost = 600 charge_cost = 600

View File

@@ -4,7 +4,7 @@
icon_state = "coilgun" icon_state = "coilgun"
item_state = "coilgun" item_state = "coilgun"
icon = 'icons/obj/railgun.dmi' 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) origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_MAGNET = 4)
w_class = ITEMSIZE_LARGE w_class = ITEMSIZE_LARGE
@@ -15,7 +15,7 @@
var/obj/item/loaded // Currently loaded object, for retrieval/unloading. var/obj/item/loaded // Currently loaded object, for retrieval/unloading.
var/load_type = /obj/item/stack/rods // Type of stack to load with. 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_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. var/power_per_tick // Capacitor charge per process(). Updated based on capacitor rating.

View File

@@ -11,6 +11,8 @@
w_class = ITEMSIZE_HUGE w_class = ITEMSIZE_HUGE
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
loaded = /obj/item/weapon/rcd_ammo/large 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_cell_type = /obj/item/weapon/cell/hyper
var/initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv var/initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv
@@ -59,7 +61,9 @@
initial_cell_type = /obj/item/weapon/cell/infinite initial_cell_type = /obj/item/weapon/cell/infinite
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/super initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/super
fire_delay = 0
slowdown = 2
slowdown_held = 3 slowdown_held = 3
slowdown_worn = 2 slowdown_worn = 2
@@ -67,9 +71,9 @@
w_class = ITEMSIZE_NO_CONTAINER w_class = ITEMSIZE_NO_CONTAINER
firemodes = list( 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="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=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), 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=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)), 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) /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." 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" icon_state = "flechette_gun"
item_state = "z8carbine" item_state = "z8carbine"
initial_cell_type = /obj/item/weapon/cell/hyper initial_cell_type = /obj/item/weapon/cell/hyper
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv
fire_delay = 0
slot_flags = SLOT_BACK slot_flags = SLOT_BACK
slowdown = 0
slowdown_held = 0 slowdown_held = 0
slowdown_worn = 0 slowdown_worn = 0
power_cost = 100 power_cost = 100
load_type = /obj/item/weapon/magnetic_ammo load_type = /obj/item/weapon/magnetic_ammo
projectile_type = /obj/item/projectile/bullet/magnetic/flechette projectile_type = /obj/item/projectile/bullet/magnetic/flechette
@@ -95,6 +106,6 @@
empty_sound = 'sound/weapons/smg_empty_alarm.ogg' empty_sound = 'sound/weapons/smg_empty_alarm.ogg'
firemodes = list( 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="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=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), 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)),
) )

View File

@@ -10,6 +10,7 @@
w_class = ITEMSIZE_NORMAL w_class = ITEMSIZE_NORMAL
matter = list(DEFAULT_WALL_MATERIAL = 1000) matter = list(DEFAULT_WALL_MATERIAL = 1000)
recoil = 1 recoil = 1
projectile_type = /obj/item/projectile/bullet/pistol/strong //Only used for Cham Guns
var/caliber = ".357" //determines which casings will fit var/caliber = ".357" //determines which casings will fit
var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled

View File

@@ -9,16 +9,16 @@
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
ammo_type = /obj/item/ammo_casing/a9mm ammo_type = /obj/item/ammo_casing/a9mm
projectile_type = /obj/item/projectile/bullet/pistol
multi_aim = 1 multi_aim = 1
burst_delay = 2 burst_delay = 2
// requires_two_hands = 1 // one_handed_penalty = 15
one_handed_penalty = 1
firemodes = list( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), 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="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,-1,-1,-2,-2), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)), // 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 /obj/item/weapon/gun/projectile/automatic/c20r
@@ -35,11 +35,11 @@
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m10mm magazine_type = /obj/item/ammo_magazine/m10mm
allowed_magazines = list(/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 = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
// requires_two_hands = 1 // one_handed_penalty = 15
one_handed_penalty = 2
/obj/item/weapon/gun/projectile/automatic/c20r/update_icon() /obj/item/weapon/gun/projectile/automatic/c20r/update_icon()
..() ..()
@@ -62,13 +62,14 @@
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m545 magazine_type = /obj/item/ammo_magazine/m545
allowed_magazines = list(/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( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), 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="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,-1,-2,-2,-3), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)), // 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) /obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
@@ -93,6 +94,7 @@
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m9mmt/rubber magazine_type = /obj/item/ammo_magazine/m9mmt/rubber
allowed_magazines = list(/obj/item/ammo_magazine/m9mmt) 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() /obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
..() ..()
@@ -116,15 +118,16 @@
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m762 magazine_type = /obj/item/ammo_magazine/m762
allowed_magazines = list(/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 = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
one_handed_penalty = 4 // one_handed_penalty = 60
burst_delay = 4 burst_delay = 4
firemodes = list( 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="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) 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 load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m545saw magazine_type = /obj/item/ammo_magazine/m545saw
allowed_magazines = list(/obj/item/ammo_magazine/m545saw, /obj/item/ammo_magazine/m545) 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 var/cover_open = 0
@@ -203,8 +207,8 @@
firemodes = list( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), 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="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,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)), 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) /obj/item/weapon/gun/projectile/automatic/l6_saw/special_check(mob/user)
@@ -260,19 +264,19 @@
w_class = ITEMSIZE_LARGE w_class = ITEMSIZE_LARGE
force = 10 force = 10
caliber = "12g" caliber = "12g"
fire_sound = 'sound/weapons/shotgun.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK slot_flags = SLOT_BACK
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m12gdrum magazine_type = /obj/item/ammo_magazine/m12gdrum
allowed_magazines = list(/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( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0), 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="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,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)), // 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() /obj/item/weapon/gun/projectile/automatic/as24/update_icon()
@@ -296,7 +300,7 @@
firemodes = list( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0), 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() /obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon()
@@ -322,7 +326,7 @@
firemodes = list( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0), 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() /obj/item/weapon/gun/projectile/automatic/p90/update_icon()
@@ -342,7 +346,7 @@
firemodes = list( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0), 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() /obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
@@ -363,12 +367,13 @@
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m762 magazine_type = /obj/item/ammo_magazine/m762
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m) 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( firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), 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) /obj/item/weapon/gun/projectile/automatic/bullpup/update_icon(var/ignore_inhands)
@@ -379,4 +384,5 @@
icon_state = "bullpup" icon_state = "bullpup"
else else
item_state = "bullpup-empty" item_state = "bullpup-empty"
if(!ignore_inhands) update_held_icon() if(!ignore_inhands)
update_held_icon()

View File

@@ -37,7 +37,7 @@
icon_state = "sawnrifle" icon_state = "sawnrifle"
w_class = ITEMSIZE_NORMAL w_class = ITEMSIZE_NORMAL
recoil = 2 // Owch recoil = 2 // Owch
accuracy = -1 // You know damn well why. accuracy = -15 // You know damn well why.
item_state = "gun" item_state = "gun"
slot_flags &= ~SLOT_BACK //you can't sling it on your back 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. 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.

View File

@@ -8,6 +8,7 @@
handle_casings = HOLD_CASINGS handle_casings = HOLD_CASINGS
max_shells = 1 max_shells = 1
ammo_type = /obj/item/ammo_casing/a357 ammo_type = /obj/item/ammo_casing/a357
projectile_type = /obj/item/projectile/bullet/pistol/strong
var/retracted_bolt = 0 var/retracted_bolt = 0
load_method = SINGLE_CASING load_method = SINGLE_CASING

View File

@@ -4,10 +4,10 @@
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds." desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
magazine_type = /obj/item/ammo_magazine/m45 magazine_type = /obj/item/ammo_magazine/m45
allowed_magazines = list(/obj/item/ammo_magazine/m45) allowed_magazines = list(/obj/item/ammo_magazine/m45)
projectile_type = /obj/item/projectile/bullet/pistol/medium
icon_state = "colt" icon_state = "colt"
caliber = ".45" caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/gunshot3.ogg'
load_method = MAGAZINE load_method = MAGAZINE
/obj/item/weapon/gun/projectile/colt/update_icon() /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." M << "Your gun is now sprited as [choice]. Say hello to your new friend."
return 1 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 /obj/item/weapon/gun/projectile/sec
name = ".45 pistol" 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." 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" icon_state = "secguncomp"
magazine_type = /obj/item/ammo_magazine/m45/rubber magazine_type = /obj/item/ammo_magazine/m45/rubber
projectile_type = /obj/item/projectile/bullet/pistol/medium
caliber = ".45" caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/gunshot3.ogg'
load_method = MAGAZINE load_method = MAGAZINE
/obj/item/weapon/gun/projectile/sec/update_icon() /obj/item/weapon/gun/projectile/sec/update_icon()
@@ -114,6 +122,7 @@
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m45 magazine_type = /obj/item/ammo_magazine/m45
allowed_magazines = list(/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 /obj/item/weapon/gun/projectile/deagle
name = "desert eagle" name = "desert eagle"
@@ -195,10 +204,10 @@
caliber = "9mm" caliber = "9mm"
silenced = 0 silenced = 0
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2) origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
fire_sound = 'sound/weapons/gunshot3.ogg'
load_method = MAGAZINE load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m9mm/compact magazine_type = /obj/item/ammo_magazine/m9mm/compact
allowed_magazines = list(/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 /obj/item/weapon/gun/projectile/pistol/flash
name = "compact signal pistol" name = "compact signal pistol"
@@ -291,6 +300,7 @@
load_method = SINGLE_CASING load_method = SINGLE_CASING
max_shells = 2 max_shells = 2
ammo_type = /obj/item/ammo_casing/a357 ammo_type = /obj/item/ammo_casing/a357
projectile_type = /obj/item/projectile/bullet/pistol/strong
/obj/item/weapon/gun/projectile/luger /obj/item/weapon/gun/projectile/luger
name = "\improper P08 Luger" name = "\improper P08 Luger"
@@ -299,9 +309,9 @@
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
caliber = "9mm" caliber = "9mm"
load_method = MAGAZINE load_method = MAGAZINE
fire_sound = 'sound/weapons/gunshot3.ogg'
magazine_type = /obj/item/ammo_magazine/m9mm/compact magazine_type = /obj/item/ammo_magazine/m9mm/compact
allowed_magazines = list(/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() /obj/item/weapon/gun/projectile/luger/update_icon()
..() ..()

View File

@@ -8,6 +8,7 @@
handle_casings = CYCLE_CASINGS handle_casings = CYCLE_CASINGS
max_shells = 6 max_shells = 6
ammo_type = /obj/item/ammo_casing/a357 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 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() /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 handle_casings = CYCLE_CASINGS
max_shells = 7 max_shells = 7
ammo_type = /obj/item/ammo_casing/cap ammo_type = /obj/item/ammo_casing/cap
projectile_type = /obj/item/projectile/bullet/pistol/strong
/obj/item/weapon/gun/projectile/revolver/judge /obj/item/weapon/gun/projectile/revolver/judge
name = "\"The Judge\"" name = "\"The Judge\""
@@ -162,10 +164,10 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
caliber = "12g" caliber = "12g"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4) origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
max_shells = 5 max_shells = 5
fire_sound = 'sound/weapons/shotgun.ogg'
recoil = 2 // ow my fucking hand 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 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. // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
/obj/item/weapon/gun/projectile/revolver/lemat /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) origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS handle_casings = CYCLE_CASINGS
max_shells = 9 max_shells = 9
fire_sound = 'sound/weapons/gunshot3.ogg'
caliber = ".38" caliber = ".38"
ammo_type = /obj/item/ammo_casing/a38 ammo_type = /obj/item/ammo_casing/a38
projectile_type = /obj/item/projectile/bullet/pistol
var/secondary_max_shells = 1 var/secondary_max_shells = 1
var/secondary_caliber = "12g" var/secondary_caliber = "12g"
var/secondary_ammo_type = /obj/item/ammo_casing/a12g 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) if(caliber && secondary_caliber)
caliber = secondary_caliber caliber = secondary_caliber
fire_sound = 'sound/weapons/shotgun.ogg'
if(ammo_type && secondary_ammo_type) if(ammo_type && secondary_ammo_type)
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) if(caliber && secondary_caliber)
caliber = initial(caliber) caliber = initial(caliber)
fire_sound = initial(fire_sound)
if(ammo_type && secondary_ammo_type) if(ammo_type && secondary_ammo_type)
ammo_type = initial(ammo_type) ammo_type = initial(ammo_type)

View File

@@ -12,8 +12,8 @@
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2) origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
load_method = SINGLE_CASING|SPEEDLOADER load_method = SINGLE_CASING|SPEEDLOADER
ammo_type = /obj/item/ammo_casing/a12g/beanbag ammo_type = /obj/item/ammo_casing/a12g/beanbag
projectile_type = /obj/item/projectile/bullet/shotgun
handle_casings = HOLD_CASINGS handle_casings = HOLD_CASINGS
fire_sound = 'sound/weapons/shotgun.ogg'
var/recentpump = 0 // to prevent spammage var/recentpump = 0 // to prevent spammage
var/action_sound = 'sound/weapons/shotgunpump.ogg' 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. 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" name = "sawn-off shotgun"
desc = "Omar's coming!" 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 else
..() ..()

View File

@@ -11,13 +11,14 @@
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
caliber = "14.5mm" caliber = "14.5mm"
recoil = 5 //extra kickback recoil = 5 //extra kickback
fire_sound = 'sound/weapons/sniper.ogg' // extra boom
handle_casings = HOLD_CASINGS handle_casings = HOLD_CASINGS
load_method = SINGLE_CASING load_method = SINGLE_CASING
max_shells = 1 max_shells = 1
ammo_type = /obj/item/ammo_casing/a145 ammo_type = /obj/item/ammo_casing/a145
accuracy = -5 projectile_type = /obj/item/projectile/bullet/rifle/a145
scoped_accuracy = 5 accuracy = -75
scoped_accuracy = 75
// one_handed_penalty = 90
var/bolt_open = 0 var/bolt_open = 0
/obj/item/weapon/gun/projectile/heavysniper/update_icon() /obj/item/weapon/gun/projectile/heavysniper/update_icon()
@@ -79,10 +80,10 @@
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
caliber = "7.62mm" caliber = "7.62mm"
load_method = MAGAZINE load_method = MAGAZINE
accuracy = -3 //shooting at the hip accuracy = -45 //shooting at the hip
scoped_accuracy = 0 scoped_accuracy = 0
// requires_two_hands = 1 // 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' fire_sound = 'sound/weapons/SVD_shot.ogg'
magazine_type = /obj/item/ammo_magazine/m762svd magazine_type = /obj/item/ammo_magazine/m762svd
allowed_magazines = list(/obj/item/ammo_magazine/m762svd) allowed_magazines = list(/obj/item/ammo_magazine/m762svd)

View File

@@ -56,23 +56,23 @@
desc = "A vicious alien beam weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive." desc = "A vicious alien beam weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive."
icon_state = "darkcannon" icon_state = "darkcannon"
item_state = "darkcannon" item_state = "darkcannon"
fire_sound = 'sound/weapons/eLuger.ogg'
w_class = ITEMSIZE_HUGE w_class = ITEMSIZE_HUGE
charge_cost = 300 charge_cost = 300
projectile_type = /obj/item/projectile/beam/stun/darkmatter projectile_type = /obj/item/projectile/beam/stun/darkmatter
cell_type = /obj/item/weapon/cell/device/weapon/recharge cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1 battery_lock = 1
accuracy = 2 accuracy = 30
firemodes = list( 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="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(2), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 600), 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), 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 /obj/item/projectile/beam/stun/darkmatter
name = "dark matter wave" name = "dark matter wave"
icon_state = "darkt" icon_state = "darkt"
fire_sound = 'sound/weapons/eLuger.ogg'
nodamage = 1 nodamage = 1
taser_effect = 1 taser_effect = 1
agony = 55 agony = 55
@@ -86,6 +86,7 @@
/obj/item/projectile/beam/darkmatter /obj/item/projectile/beam/darkmatter
name = "dark matter bolt" name = "dark matter bolt"
icon_state = "darkb" icon_state = "darkb"
fire_sound = 'sound/weapons/eLuger.ogg'
damage = 35 damage = 35
armor_penetration = 35 armor_penetration = 35
damage_type = BRUTE damage_type = BRUTE
@@ -101,6 +102,7 @@
/obj/item/projectile/energy/darkmatter /obj/item/projectile/energy/darkmatter
name = "dark matter pellet" name = "dark matter pellet"
icon_state = "dark_pellet" icon_state = "dark_pellet"
fire_sound = 'sound/weapons/eLuger.ogg'
damage = 20 damage = 20
armor_penetration = 35 armor_penetration = 35
damage_type = BRUTE 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." desc = "A vicious alien sound weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive."
icon_state = "noise" icon_state = "noise"
item_state = "noise" item_state = "noise"
fire_sound = 'sound/effects/basscannon.ogg'
w_class = ITEMSIZE_HUGE w_class = ITEMSIZE_HUGE
cell_type = /obj/item/weapon/cell/device/weapon/recharge cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1 battery_lock = 1
@@ -133,6 +134,7 @@
/obj/item/projectile/sonic /obj/item/projectile/sonic
name = "sonic pulse" name = "sonic pulse"
icon_state = "sound" icon_state = "sound"
fire_sound = 'sound/effects/basscannon.ogg'
damage = 5 damage = 5
armor_penetration = 30 armor_penetration = 30
damage_type = BRUTE damage_type = BRUTE

View File

@@ -69,6 +69,8 @@
var/tracer_type var/tracer_type
var/impact_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/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 var/datum/plot_vector/trajectory // used to plot the path of the projectile
@@ -177,7 +179,7 @@
return return
//roll to-hit //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/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 var/result = PROJECTILE_FORCE_MISS
@@ -192,7 +194,7 @@
//hit messages //hit messages
if(silenced) 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 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 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

View File

@@ -1,6 +1,7 @@
/obj/item/projectile/beam /obj/item/projectile/beam
name = "laser" name = "laser"
icon_state = "laser" icon_state = "laser"
fire_sound = 'sound/weapons/Laser.ogg'
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 40 damage = 40
damage_type = BURN damage_type = BURN
@@ -21,7 +22,6 @@
/obj/item/projectile/beam/practice /obj/item/projectile/beam/practice
name = "laser" name = "laser"
icon_state = "laser" icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0 damage = 0
damage_type = BURN damage_type = BURN
check_armour = "laser" check_armour = "laser"
@@ -32,6 +32,9 @@
icon_state = "laser" icon_state = "laser"
damage = 15 damage = 15
/obj/item/projectile/beam/smalllaser
damage = 25
/obj/item/projectile/beam/burstlaser /obj/item/projectile/beam/burstlaser
damage = 30 damage = 30
armor_penetration = 10 armor_penetration = 10
@@ -44,6 +47,7 @@
/obj/item/projectile/beam/heavylaser /obj/item/projectile/beam/heavylaser
name = "heavy laser" name = "heavy laser"
icon_state = "heavylaser" icon_state = "heavylaser"
fire_sound = 'sound/weapons/lasercannonfire.ogg'
damage = 60 damage = 60
armor_penetration = 30 armor_penetration = 30
light_range = 3 light_range = 3
@@ -62,6 +66,7 @@
/obj/item/projectile/beam/xray /obj/item/projectile/beam/xray
name = "xray beam" name = "xray beam"
icon_state = "xray" icon_state = "xray"
fire_sound = 'sound/weapons/eluger.ogg'
damage = 25 damage = 25
armor_penetration = 50 armor_penetration = 50
light_color = "#00CC33" light_color = "#00CC33"
@@ -83,8 +88,9 @@
/obj/item/projectile/beam/pulse /obj/item/projectile/beam/pulse
name = "pulse" name = "pulse"
icon_state = "u_laser" icon_state = "u_laser"
damage = 50 fire_sound='sound/weapons/pulse.ogg'
armor_penetration = 30 damage = 100 //Badmin toy, don't care
armor_penetration = 100
light_color = "#0066FF" light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/laser_pulse/muzzle muzzle_type = /obj/effect/projectile/laser_pulse/muzzle
@@ -99,6 +105,7 @@
/obj/item/projectile/beam/emitter /obj/item/projectile/beam/emitter
name = "emitter beam" name = "emitter beam"
icon_state = "emitter" icon_state = "emitter"
fire_sound = 'sound/weapons/emitter.ogg'
damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm
light_color = "#00CC33" light_color = "#00CC33"
@@ -109,7 +116,6 @@
/obj/item/projectile/beam/lastertag/blue /obj/item/projectile/beam/lastertag/blue
name = "lasertag beam" name = "lasertag beam"
icon_state = "bluelaser" icon_state = "bluelaser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0 damage = 0
no_attack_log = 1 no_attack_log = 1
damage_type = BURN damage_type = BURN
@@ -130,7 +136,6 @@
/obj/item/projectile/beam/lastertag/red /obj/item/projectile/beam/lastertag/red
name = "lasertag beam" name = "lasertag beam"
icon_state = "laser" icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0 damage = 0
no_attack_log = 1 no_attack_log = 1
damage_type = BURN damage_type = BURN
@@ -147,7 +152,6 @@
/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE /obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE
name = "lasertag beam" name = "lasertag beam"
icon_state = "omnilaser" icon_state = "omnilaser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0 damage = 0
damage_type = BURN damage_type = BURN
check_armour = "laser" check_armour = "laser"
@@ -167,6 +171,7 @@
/obj/item/projectile/beam/sniper /obj/item/projectile/beam/sniper
name = "sniper beam" name = "sniper beam"
icon_state = "xray" icon_state = "xray"
fire_sound = 'sound/weapons/gauss_shoot.ogg'
damage = 50 damage = 50
armor_penetration = 10 armor_penetration = 10
light_color = "#00CC33" light_color = "#00CC33"
@@ -178,6 +183,7 @@
/obj/item/projectile/beam/stun /obj/item/projectile/beam/stun
name = "stun beam" name = "stun beam"
icon_state = "stun" icon_state = "stun"
fire_sound = 'sound/weapons/Taser.ogg'
nodamage = 1 nodamage = 1
taser_effect = 1 taser_effect = 1
agony = 40 agony = 40

View File

@@ -1,6 +1,7 @@
/obj/item/projectile/bullet /obj/item/projectile/bullet
name = "bullet" name = "bullet"
icon_state = "bullet" icon_state = "bullet"
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
damage = 60 damage = 60
damage_type = BRUTE damage_type = BRUTE
nodamage = 0 nodamage = 0
@@ -124,6 +125,7 @@
/* short-casing projectiles, like the kind used in pistols or SMGs */ /* short-casing projectiles, like the kind used in pistols or SMGs */
/obj/item/projectile/bullet/pistol /obj/item/projectile/bullet/pistol
fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg'
damage = 20 damage = 20
/obj/item/projectile/bullet/pistol/ap /obj/item/projectile/bullet/pistol/ap
@@ -142,6 +144,7 @@
armor_penetration = -50 armor_penetration = -50
/obj/item/projectile/bullet/pistol/strong //revolvers and matebas /obj/item/projectile/bullet/pistol/strong //revolvers and matebas
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
damage = 60 damage = 60
/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets /obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
@@ -156,6 +159,7 @@
/obj/item/projectile/bullet/shotgun /obj/item/projectile/bullet/shotgun
name = "slug" name = "slug"
fire_sound = 'sound/weapons/gunshot/shotgun.ogg'
damage = 50 damage = 50
armor_penetration = 15 armor_penetration = 15
@@ -171,6 +175,7 @@
//Overall less damage than slugs in exchange for more damage at very close range and more embedding //Overall less damage than slugs in exchange for more damage at very close range and more embedding
/obj/item/projectile/bullet/pellet/shotgun /obj/item/projectile/bullet/pellet/shotgun
name = "shrapnel" name = "shrapnel"
fire_sound = 'sound/weapons/gunshot/shotgun.ogg'
damage = 13 damage = 13
pellets = 6 pellets = 6
range_step = 1 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 //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 /obj/item/projectile/bullet/shotgun/ion
name = "ion slug" name = "ion slug"
fire_sound = 'sound/weapons/Laser.ogg'
damage = 15 damage = 15
embed_chance = 0 embed_chance = 0
sharp = 0 sharp = 0
@@ -194,10 +200,12 @@
/* "Rifle" rounds */ /* "Rifle" rounds */
/obj/item/projectile/bullet/rifle /obj/item/projectile/bullet/rifle
fire_sound = 'sound/weapons/gunshot/gunshot3.ogg'
armor_penetration = 15 armor_penetration = 15
penetrating = 1 penetrating = 1
/obj/item/projectile/bullet/rifle/a762 /obj/item/projectile/bullet/rifle/a762
fire_sound = 'sound/weapons/gunshot/gunshot2.ogg'
damage = 35 damage = 35
/obj/item/projectile/bullet/rifle/a762/ap /obj/item/projectile/bullet/rifle/a762/ap
@@ -232,6 +240,7 @@
SA_vulnerability = SA_ANIMAL SA_vulnerability = SA_ANIMAL
/obj/item/projectile/bullet/rifle/a145 /obj/item/projectile/bullet/rifle/a145
fire_sound = 'sound/weapons/gunshot/sniper.ogg'
damage = 80 damage = 80
stun = 3 stun = 3
weaken = 3 weaken = 3
@@ -253,11 +262,12 @@
/obj/item/projectile/bullet/burstbullet /obj/item/projectile/bullet/burstbullet
name = "exploding bullet" name = "exploding bullet"
fire_sound = 'sound/effects/Explosion1.ogg'
damage = 20 damage = 20
embed_chance = 0 embed_chance = 0
edge = 1 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)) if(isturf(target))
explosion(target, -1, 0, 2) explosion(target, -1, 0, 2)
..() ..()
@@ -309,6 +319,7 @@
/obj/item/projectile/bullet/pistol/cap /obj/item/projectile/bullet/pistol/cap
name = "cap" name = "cap"
damage_type = HALLOSS damage_type = HALLOSS
fire_sound = null
damage = 0 damage = 0
nodamage = 1 nodamage = 1
embed_chance = 0 embed_chance = 0

View File

@@ -10,6 +10,7 @@
/obj/item/projectile/energy/flash /obj/item/projectile/energy/flash
name = "chemical shell" name = "chemical shell"
icon_state = "bullet" icon_state = "bullet"
fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg'
damage = 5 damage = 5
kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes. kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
var/flash_range = 0 var/flash_range = 0
@@ -47,6 +48,7 @@
//blinds people like the flash round, but can also be used for temporary illumination //blinds people like the flash round, but can also be used for temporary illumination
/obj/item/projectile/energy/flash/flare /obj/item/projectile/energy/flash/flare
fire_sound = 'sound/weapons/gunshot/shotgun.ogg'
damage = 10 damage = 10
flash_range = 1 flash_range = 1
brightness = 15 brightness = 15
@@ -63,6 +65,7 @@
/obj/item/projectile/energy/electrode /obj/item/projectile/energy/electrode
name = "electrode" name = "electrode"
icon_state = "spark" icon_state = "spark"
fire_sound = 'sound/weapons/Gunshot.ogg'
taser_effect = 1 taser_effect = 1
agony = 40 agony = 40
light_range = 2 light_range = 2
@@ -81,6 +84,7 @@
/obj/item/projectile/energy/declone /obj/item/projectile/energy/declone
name = "declone" name = "declone"
icon_state = "declone" icon_state = "declone"
fire_sound = 'sound/weapons/pulse3.ogg'
nodamage = 1 nodamage = 1
damage_type = CLONE damage_type = CLONE
irradiate = 40 irradiate = 40
@@ -106,7 +110,6 @@
agony = 40 agony = 40
stutter = 10 stutter = 10
/obj/item/projectile/energy/bolt/large /obj/item/projectile/energy/bolt/large
name = "largebolt" name = "largebolt"
damage = 20 damage = 20
@@ -138,6 +141,7 @@
/obj/item/projectile/energy/phoron /obj/item/projectile/energy/phoron
name = "phoron bolt" name = "phoron bolt"
icon_state = "energy" icon_state = "energy"
fire_sound = 'sound/effects/stealthoff.ogg'
damage = 20 damage = 20
damage_type = TOX damage_type = TOX
irradiate = 20 irradiate = 20
@@ -148,6 +152,7 @@
/obj/item/projectile/energy/plasmastun /obj/item/projectile/energy/plasmastun
name = "plasma pulse" name = "plasma pulse"
icon_state = "plasma_stun" icon_state = "plasma_stun"
fire_sound = 'sound/weapons/blaster.ogg'
armor_penetration = 10 armor_penetration = 10
kill_count = 4 kill_count = 4
damage = 5 damage = 5
@@ -187,6 +192,7 @@
/obj/item/projectile/energy/blue_pellet /obj/item/projectile/energy/blue_pellet
name = "suppressive pellet" name = "suppressive pellet"
icon_state = "blue_pellet" icon_state = "blue_pellet"
fire_sound = 'sound/weapons/Laser.ogg'
damage = 5 damage = 5
armor_penetration = 75 armor_penetration = 75
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE

View File

@@ -2,6 +2,7 @@
/obj/item/projectile/bullet/magnetic /obj/item/projectile/bullet/magnetic
name = "rod" name = "rod"
icon_state = "rod" icon_state = "rod"
fire_sound = 'sound/weapons/railgun.ogg'
damage = 65 damage = 65
stun = 1 stun = 1
weaken = 1 weaken = 1
@@ -17,6 +18,7 @@
/obj/item/projectile/bullet/magnetic/flechette /obj/item/projectile/bullet/magnetic/flechette
name = "flechette" name = "flechette"
icon_state = "flechette" icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 20 damage = 20
armor_penetration = 100 armor_penetration = 100

View File

@@ -1,6 +1,7 @@
/obj/item/projectile/ion /obj/item/projectile/ion
name = "ion bolt" name = "ion bolt"
icon_state = "ion" icon_state = "ion"
fire_sound = 'sound/weapons/Laser.ogg'
damage = 0 damage = 0
damage_type = BURN damage_type = BURN
nodamage = 1 nodamage = 1
@@ -28,11 +29,12 @@
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) /obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
explosion(target, -1, 0, 2) explosion(target, -1, 0, 2)
return 1 ..()
/obj/item/projectile/temp /obj/item/projectile/temp
name = "freeze beam" name = "freeze beam"
icon_state = "ice_2" icon_state = "ice_2"
fire_sound = 'sound/weapons/pulse3.ogg'
damage = 0 damage = 0
damage_type = BURN damage_type = BURN
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
@@ -105,6 +107,7 @@
/obj/item/projectile/energy/floramut /obj/item/projectile/energy/floramut
name = "alpha somatoray" name = "alpha somatoray"
icon_state = "energy" icon_state = "energy"
fire_sound = 'sound/effects/stealthoff.ogg'
damage = 0 damage = 0
damage_type = TOX damage_type = TOX
nodamage = 1 nodamage = 1
@@ -148,6 +151,7 @@
/obj/item/projectile/energy/floramut/gene /obj/item/projectile/energy/floramut/gene
name = "gamma somatoray" name = "gamma somatoray"
icon_state = "energy2" icon_state = "energy2"
fire_sound = 'sound/effects/stealthoff.ogg'
damage = 0 damage = 0
damage_type = TOX damage_type = TOX
nodamage = 1 nodamage = 1
@@ -157,6 +161,7 @@
/obj/item/projectile/energy/florayield /obj/item/projectile/energy/florayield
name = "beta somatoray" name = "beta somatoray"
icon_state = "energy2" icon_state = "energy2"
fire_sound = 'sound/effects/stealthoff.ogg'
damage = 0 damage = 0
damage_type = TOX damage_type = TOX
nodamage = 1 nodamage = 1

View File

@@ -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>" 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 stacks = MODIFIER_STACK_EXTEND
evasion = 2 evasion = 30
slowdown = -1 slowdown = -1
attack_speed_percent = 0.75 attack_speed_percent = 0.75

View File

@@ -60,7 +60,7 @@
fire_sound = 'sound/weapons/taser2.ogg' fire_sound = 'sound/weapons/taser2.ogg'
charge_cost = 120 // Twice as many shots. charge_cost = 120 // Twice as many shots.
projectile_type = /obj/item/projectile/beam/stun/xeno 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_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 \ 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." xeno lifeforms at a distance. It is ineffective at stunning larger lifeforms such as humanoids."

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.