mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-21 15:51:31 +00:00
Dual wielding!
This commit is contained in:
@@ -106,9 +106,10 @@
|
|||||||
#define SAWN_INTACT 0
|
#define SAWN_INTACT 0
|
||||||
#define SAWN_OFF 1
|
#define SAWN_OFF 1
|
||||||
|
|
||||||
#define WEAPON_LIGHT 0
|
#define WEAPON_DUAL_WIELD 0
|
||||||
#define WEAPON_MEDIUM 1
|
#define WEAPON_LIGHT 1
|
||||||
#define WEAPON_HEAVY 2
|
#define WEAPON_MEDIUM 2
|
||||||
|
#define WEAPON_HEAVY 3
|
||||||
|
|
||||||
#define EXPLODE_NONE 0 //Don't even ask me why we need this.
|
#define EXPLODE_NONE 0 //Don't even ask me why we need this.
|
||||||
#define EXPLODE_DEVASTATE 1
|
#define EXPLODE_DEVASTATE 1
|
||||||
|
|||||||
@@ -88,6 +88,7 @@
|
|||||||
var/obj/item/gun/energy/E = charging
|
var/obj/item/gun/energy/E = charging
|
||||||
if(E.power_supply.charge < E.power_supply.maxcharge)
|
if(E.power_supply.charge < E.power_supply.maxcharge)
|
||||||
E.power_supply.give(E.power_supply.chargerate)
|
E.power_supply.give(E.power_supply.chargerate)
|
||||||
|
E.on_recharge()
|
||||||
use_power(250)
|
use_power(250)
|
||||||
using_power = TRUE
|
using_power = TRUE
|
||||||
|
|
||||||
|
|||||||
@@ -203,6 +203,7 @@
|
|||||||
if(D.power_supply.charge < D.power_supply.maxcharge)
|
if(D.power_supply.charge < D.power_supply.maxcharge)
|
||||||
var/obj/item/ammo_casing/energy/E = D.ammo_type[D.select]
|
var/obj/item/ammo_casing/energy/E = D.ammo_type[D.select]
|
||||||
D.power_supply.give(E.e_cost)
|
D.power_supply.give(E.e_cost)
|
||||||
|
D.on_recharge()
|
||||||
D.update_icon()
|
D.update_icon()
|
||||||
else
|
else
|
||||||
D.charge_tick = 0
|
D.charge_tick = 0
|
||||||
|
|||||||
@@ -103,12 +103,6 @@
|
|||||||
else
|
else
|
||||||
user.visible_message("<span class='danger'>[user] fires [src]!</span>", "<span class='danger'>You fire [src]!</span>", "You hear \a [fire_sound_text]!")
|
user.visible_message("<span class='danger'>[user] fires [src]!</span>", "<span class='danger'>You fire [src]!</span>", "You hear \a [fire_sound_text]!")
|
||||||
|
|
||||||
if(weapon_weight >= WEAPON_MEDIUM)
|
|
||||||
if(user.get_inactive_hand())
|
|
||||||
if(prob(15))
|
|
||||||
if(user.drop_item())
|
|
||||||
user.visible_message("<span class='danger'>[src] flies out of [user]'s hands!</span>", "<span class='userdanger'>[src] kicks out of your grip!</span>")
|
|
||||||
|
|
||||||
/obj/item/gun/emp_act(severity)
|
/obj/item/gun/emp_act(severity)
|
||||||
for(var/obj/O in contents)
|
for(var/obj/O in contents)
|
||||||
O.emp_act(severity)
|
O.emp_act(severity)
|
||||||
@@ -153,7 +147,21 @@
|
|||||||
to_chat(user, "<span class='userdanger'>You need both hands free to fire \the [src]!</span>")
|
to_chat(user, "<span class='userdanger'>You need both hands free to fire \the [src]!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
process_fire(target,user,1,params)
|
//DUAL WIELDING
|
||||||
|
var/bonus_spread = 0
|
||||||
|
var/loop_counter = 0
|
||||||
|
if(ishuman(user) && user.a_intent == INTENT_HARM)
|
||||||
|
var/mob/living/carbon/human/H = user
|
||||||
|
for(var/obj/item/gun/G in get_both_hands(H))
|
||||||
|
if(G == src || G.weapon_weight >= WEAPON_MEDIUM)
|
||||||
|
continue
|
||||||
|
else if(G.can_trigger_gun(user))
|
||||||
|
bonus_spread += 24 * G.weapon_weight
|
||||||
|
loop_counter++
|
||||||
|
spawn(loop_counter)
|
||||||
|
G.process_fire(target,user,1,params, null, bonus_spread)
|
||||||
|
|
||||||
|
process_fire(target,user,1,params, null, bonus_spread)
|
||||||
|
|
||||||
/obj/item/gun/proc/can_trigger_gun(mob/living/user)
|
/obj/item/gun/proc/can_trigger_gun(mob/living/user)
|
||||||
if(!user.can_use_guns(src))
|
if(!user.can_use_guns(src))
|
||||||
@@ -166,17 +174,17 @@
|
|||||||
obj/item/gun/proc/newshot()
|
obj/item/gun/proc/newshot()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override)
|
/obj/item/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override, bonus_spread = 0)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
|
|
||||||
if(semicd)
|
if(semicd)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(weapon_weight)
|
var/sprd = 0
|
||||||
if(user.get_inactive_hand())
|
var/randomized_gun_spread = 0
|
||||||
recoil = 4 //one-handed kick
|
if(spread)
|
||||||
else
|
randomized_gun_spread = rand(0,spread)
|
||||||
recoil = initial(recoil)
|
var/randomized_bonus_spread = rand(0, bonus_spread)
|
||||||
|
|
||||||
if(burst_size > 1)
|
if(burst_size > 1)
|
||||||
firing_burst = 1
|
firing_burst = 1
|
||||||
@@ -187,11 +195,10 @@ obj/item/gun/proc/newshot()
|
|||||||
if( i>1 && !(src in get_both_hands(user))) //for burst firing
|
if( i>1 && !(src in get_both_hands(user))) //for burst firing
|
||||||
break
|
break
|
||||||
if(chambered)
|
if(chambered)
|
||||||
var/sprd = 0
|
|
||||||
if(randomspread)
|
if(randomspread)
|
||||||
sprd = round((rand() - 0.5) * spread)
|
sprd = round((rand() - 0.5) * (randomized_gun_spread + randomized_bonus_spread))
|
||||||
else
|
else
|
||||||
sprd = round((i / burst_size - 0.5) * spread)
|
sprd = round((i / burst_size - 0.5) * (randomized_gun_spread + randomized_bonus_spread))
|
||||||
if(!chambered.fire(target, user, params, ,suppressed, zone_override, sprd))
|
if(!chambered.fire(target, user, params, ,suppressed, zone_override, sprd))
|
||||||
shoot_with_empty_chamber(user)
|
shoot_with_empty_chamber(user)
|
||||||
break
|
break
|
||||||
@@ -209,7 +216,8 @@ obj/item/gun/proc/newshot()
|
|||||||
firing_burst = 0
|
firing_burst = 0
|
||||||
else
|
else
|
||||||
if(chambered)
|
if(chambered)
|
||||||
if(!chambered.fire(target, user, params, , suppressed, zone_override, spread))
|
sprd = round((pick(1,-1)) * (randomized_gun_spread + randomized_bonus_spread))
|
||||||
|
if(!chambered.fire(target, user, params, , suppressed, zone_override, sprd))
|
||||||
shoot_with_empty_chamber(user)
|
shoot_with_empty_chamber(user)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -21,6 +21,12 @@
|
|||||||
|
|
||||||
/obj/item/gun/energy/emp_act(severity)
|
/obj/item/gun/energy/emp_act(severity)
|
||||||
power_supply.use(round(power_supply.charge / severity))
|
power_supply.use(round(power_supply.charge / severity))
|
||||||
|
if(chambered)//phil235
|
||||||
|
if(chambered.BB)
|
||||||
|
qdel(chambered.BB)
|
||||||
|
chambered.BB = null
|
||||||
|
chambered = null
|
||||||
|
newshot() //phil235
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/gun/energy/get_cell()
|
/obj/item/gun/energy/get_cell()
|
||||||
@@ -34,6 +40,7 @@
|
|||||||
power_supply = new(src)
|
power_supply = new(src)
|
||||||
power_supply.give(power_supply.maxcharge)
|
power_supply.give(power_supply.maxcharge)
|
||||||
update_ammo_types()
|
update_ammo_types()
|
||||||
|
on_recharge()
|
||||||
if(selfcharge)
|
if(selfcharge)
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
update_icon()
|
update_icon()
|
||||||
@@ -67,8 +74,12 @@
|
|||||||
if(!external || !external.use(E.e_cost)) //Take power from the borg...
|
if(!external || !external.use(E.e_cost)) //Take power from the borg...
|
||||||
return //Note, uses /10 because of shitty mods to the cell system
|
return //Note, uses /10 because of shitty mods to the cell system
|
||||||
power_supply.give(100) //... to recharge the shot
|
power_supply.give(100) //... to recharge the shot
|
||||||
|
on_recharge()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
/obj/item/gun/energy/proc/on_recharge()
|
||||||
|
newshot()
|
||||||
|
|
||||||
/obj/item/gun/energy/attack_self(mob/living/user as mob)
|
/obj/item/gun/energy/attack_self(mob/living/user as mob)
|
||||||
if(ammo_type.len > 1)
|
if(ammo_type.len > 1)
|
||||||
select_fire(user)
|
select_fire(user)
|
||||||
@@ -78,10 +89,6 @@
|
|||||||
H.update_inv_l_hand()
|
H.update_inv_l_hand()
|
||||||
H.update_inv_r_hand()
|
H.update_inv_r_hand()
|
||||||
|
|
||||||
/obj/item/gun/energy/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, params)
|
|
||||||
newshot() //prepare a new shot
|
|
||||||
..()
|
|
||||||
|
|
||||||
/obj/item/gun/energy/can_shoot()
|
/obj/item/gun/energy/can_shoot()
|
||||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
||||||
return power_supply.charge >= shot.e_cost
|
return power_supply.charge >= shot.e_cost
|
||||||
@@ -89,18 +96,20 @@
|
|||||||
/obj/item/gun/energy/newshot()
|
/obj/item/gun/energy/newshot()
|
||||||
if(!ammo_type || !power_supply)
|
if(!ammo_type || !power_supply)
|
||||||
return
|
return
|
||||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
if(!chambered)
|
||||||
if(power_supply.charge >= shot.e_cost) //if there's enough power in the power_supply cell...
|
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
||||||
chambered = shot //...prepare a new shot based on the current ammo type selected
|
if(power_supply.charge >= shot.e_cost) //if there's enough power in the power_supply cell...
|
||||||
chambered.newshot()
|
chambered = shot //...prepare a new shot based on the current ammo type selected
|
||||||
return
|
if(!chambered.BB)
|
||||||
|
chambered.newshot()
|
||||||
|
|
||||||
/obj/item/gun/energy/process_chamber()
|
/obj/item/gun/energy/process_chamber()
|
||||||
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
|
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
|
||||||
var/obj/item/ammo_casing/energy/shot = chambered
|
var/obj/item/ammo_casing/energy/shot = chambered
|
||||||
power_supply.use(shot.e_cost)//... drain the power_supply cell
|
power_supply.use(shot.e_cost)//... drain the power_supply cell
|
||||||
|
robocharge()
|
||||||
chambered = null //either way, released the prepared shot
|
chambered = null //either way, released the prepared shot
|
||||||
return
|
newshot()
|
||||||
|
|
||||||
/obj/item/gun/energy/proc/select_fire(mob/living/user)
|
/obj/item/gun/energy/proc/select_fire(mob/living/user)
|
||||||
select++
|
select++
|
||||||
@@ -111,6 +120,12 @@
|
|||||||
fire_delay = shot.delay
|
fire_delay = shot.delay
|
||||||
if(shot.select_name)
|
if(shot.select_name)
|
||||||
to_chat(user, "<span class='notice'>[src] is now set to [shot.select_name].</span>")
|
to_chat(user, "<span class='notice'>[src] is now set to [shot.select_name].</span>")
|
||||||
|
if(chambered)//phil235
|
||||||
|
if(chambered.BB)
|
||||||
|
qdel(chambered.BB)
|
||||||
|
chambered.BB = null
|
||||||
|
chambered = null
|
||||||
|
newshot()
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,7 @@
|
|||||||
|
|
||||||
/obj/item/gun/energy/kinetic_accelerator/proc/reload()
|
/obj/item/gun/energy/kinetic_accelerator/proc/reload()
|
||||||
power_supply.give(500)
|
power_supply.give(500)
|
||||||
|
on_recharge()
|
||||||
if(!suppressed)
|
if(!suppressed)
|
||||||
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
||||||
else if(isliving(loc))
|
else if(isliving(loc))
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
slot_flags = null
|
slot_flags = null
|
||||||
w_class = WEIGHT_CLASS_HUGE
|
w_class = WEIGHT_CLASS_HUGE
|
||||||
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
|
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
|
||||||
weapon_weight = WEAPON_MEDIUM
|
weapon_weight = WEAPON_HEAVY
|
||||||
can_flashlight = 0
|
can_flashlight = 0
|
||||||
trigger_guard = TRIGGER_GUARD_NONE
|
trigger_guard = TRIGGER_GUARD_NONE
|
||||||
ammo_x_offset = 2
|
ammo_x_offset = 2
|
||||||
|
|||||||
@@ -168,11 +168,13 @@
|
|||||||
var/obj/item/stack/sheet/S = A
|
var/obj/item/stack/sheet/S = A
|
||||||
S.use(1)
|
S.use(1)
|
||||||
power_supply.give(1000)
|
power_supply.give(1000)
|
||||||
|
on_recharge()
|
||||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||||
else if(istype(A, /obj/item/stack/ore/plasma))
|
else if(istype(A, /obj/item/stack/ore/plasma))
|
||||||
var/obj/item/stack/ore/S = A
|
var/obj/item/stack/ore/S = A
|
||||||
S.use(1)
|
S.use(1)
|
||||||
power_supply.give(500)
|
power_supply.give(500)
|
||||||
|
on_recharge()
|
||||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
@@ -251,10 +253,6 @@
|
|||||||
/obj/item/gun/energy/printer/emp_act()
|
/obj/item/gun/energy/printer/emp_act()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/gun/energy/printer/newshot()
|
|
||||||
..()
|
|
||||||
robocharge()
|
|
||||||
|
|
||||||
// Instakill Lasers //
|
// Instakill Lasers //
|
||||||
/obj/item/gun/energy/laser/instakill
|
/obj/item/gun/energy/laser/instakill
|
||||||
name = "instakill rifle"
|
name = "instakill rifle"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
slot_flags = 0
|
slot_flags = 0
|
||||||
origin_tech = "combat=6;engineering=3;syndicate=6"
|
origin_tech = "combat=6;engineering=3;syndicate=6"
|
||||||
mag_type = /obj/item/ammo_box/magazine/mm556x45
|
mag_type = /obj/item/ammo_box/magazine/mm556x45
|
||||||
weapon_weight = WEAPON_MEDIUM
|
weapon_weight = WEAPON_HEAVY
|
||||||
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
|
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
|
||||||
magin_sound = 'sound/weapons/gun_interactions/lmg_magin.ogg'
|
magin_sound = 'sound/weapons/gun_interactions/lmg_magin.ogg'
|
||||||
magout_sound = 'sound/weapons/gun_interactions/lmg_magout.ogg'
|
magout_sound = 'sound/weapons/gun_interactions/lmg_magout.ogg'
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
mag_type = /obj/item/ammo_box/magazine/internal/shot
|
mag_type = /obj/item/ammo_box/magazine/internal/shot
|
||||||
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
|
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
|
||||||
var/recentpump = 0 // to prevent spammage
|
var/recentpump = 0 // to prevent spammage
|
||||||
|
weapon_weight = WEAPON_MEDIUM
|
||||||
|
|
||||||
/obj/item/gun/projectile/shotgun/attackby(obj/item/A, mob/user, params)
|
/obj/item/gun/projectile/shotgun/attackby(obj/item/A, mob/user, params)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
icon_state = "sniper"
|
icon_state = "sniper"
|
||||||
item_state = "sniper"
|
item_state = "sniper"
|
||||||
recoil = 2
|
recoil = 2
|
||||||
weapon_weight = WEAPON_MEDIUM
|
weapon_weight = WEAPON_HEAVY
|
||||||
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
|
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
|
||||||
fire_sound = 'sound/weapons/gunshots/gunshot_sniper.ogg'
|
fire_sound = 'sound/weapons/gunshots/gunshot_sniper.ogg'
|
||||||
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
|
magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg'
|
||||||
|
|||||||
Reference in New Issue
Block a user