Possible fix for highlander

TS Fix

Law Maker Incendiary Fix

Possible Lawgiver burstfire fix

Lawgiver Changes:
Fix Rapid Fire
Add Armor Piercing
Add Pellets

Lawgiver:
Nerf incendiary bullets

Blow up the users weapon arm if his dna doesnt match
Added a proper soundeffect

Added Changelog.
Closes #71, Closes #327

Make the lawgiver emagable and change stun to a beam

Added crowdcontrol mode to the lawgiver

Final Tweaks to the lawgiver

Updated .gitignore to inclode the .atom-build.json

Fixed indentation
Fixed blowing up the wrong hand if the user switch hands after the killswitch has been triggered
This commit is contained in:
Werner
2016-05-27 22:28:55 +02:00
parent f34fa32690
commit a424b71a4b
11 changed files with 230 additions and 88 deletions
+165 -78
View File
@@ -1,94 +1,181 @@
/obj/item/weapon/gun/energy/lawgiver
name = "Lawgiver Mk II"
desc = "A highly advanced firearm for the modern police force. It has multiple voice-activated firing modes."
icon_state = "lawgiver"
item_state = "gun"
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
fire_delay = 3
recoil = 1
projectile_type = /obj/item/projectile/bullet/pistol
origin_tech = "combat=6;magnets=5"
projectile_type=/obj/item/projectile/bullet/pistol
fire_sound='sound/weapons/Gunshot_smg.ogg'
sel_mode = 1
desc = "A highly advanced firearm for the modern police force. It has multiple voice-activated firing modes."
var/dna = null//dna-locking the firearm
var/emagged = 0 //if the gun is emagged or not
var/owner_name = null //Name of the (initial) owner
var/message = null //Message that should be played to the user
var/message_delay = 100 //Delay of the message_delay
var/message_enabled = 0 //If playing the message should be enabled
var/message_disable = 0 //If the loop should be stopped
var/default_desc = "A highly advanced firearm for the modern police force. It has multiple voice-activated firing modes."
var/ammomode = 0
var/dna //dna-locking the firearm
firemodes = list(
list(
name="singleshot",
charge_cost=50,
fire_delay=3,
recoil=1
),
list(
name="rapidfire",
charge_cost=150,
fire_delay=3,
recoil=1,
burst=3,
move_delay=4,
accuracy = list(0,-1,-1,-2,-2),
dispersion = list(0.0, 0.6, 1.0)
),
list(
name="highex",
charge_cost=300,
fire_delay=6,
recoil=3
),
list(
name="stun",
charge_cost=50,
fire_delay=4,
recoil=0
),
list(
name="hotshot",
charge_cost=200,
fire_delay=4,
recoil=3
),
list(
name="armorpiercing",
charge_cost=300,
fire_delay=6,
recoil=3
),
list(
name="pellets",
charge_cost=300,
fire_delay=6,
recoil=3
),
)
proc/hear(message, source as mob)
/obj/item/weapon/gun/energy/lawgiver/proc/play_message()
while (message_enabled && !message_disable) //Shut down command issued. Inform user that boardcasting has been stopped
usr.audible_message("<span class='warning'>[usr]'s [src.name] broadcasts: [message]</span>","")
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
sleep(message_delay)
usr << "\red Broadcasting Message disabled"
message_enabled = 0
message_disable = 0
/obj/item/weapon/gun/energy/lawgiver/attack_self(mob/living/carbon/user as mob)
if(dna != null)
return
else
src.dna = user.dna.unique_enzymes
src.owner_name = user.real_name
user << "\blue You feel your palm heat up as the gun reads your DNA profile."
desc += "<br>Linked to: [user.real_name]"
return
/obj/item/weapon/gun/energy/lawgiver/attack_self(mob/user)
if(dna != null)
return
else
src.dna = user.dna.unique_enzymes
user << "\blue You feel your palm heat up as the gun reads your DNA profile."
desc += "<br>Linked to: [user.real_name]"
Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0)
if(src.dna != user.dna.unique_enzymes)
/obj/item/weapon/gun/energy/lawgiver/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0)
if(src.dna != user.dna.unique_enzymes && !emagged)
if(istype(user, /mob/living/carbon/human))
//Save the users active hand
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/LA = H.get_organ("l_arm")
var/obj/item/organ/external/RA = H.get_organ("r_arm")
var/active_hand = H.hand
playsound(user, 'sound/weapons/lawgiver_idfail.ogg', 40, 1)
user << "\red You hear a soft beep from the gun and 'ID FAIL' flashes across the screen."
playsound(user, 'sound/weapons/smg_empty_alarm.ogg', 40, 1)
user << "<span class='danger'>[src] blows up in your face!</span>"
explosion(get_turf(user), 0, 0, 1, rand(1,2))
user << "<span class='danger'>You feel a tiny prick in your hand!</span>"
user.drop_item()
qdel(src)
return 0
//Blow up Unauthorized Users Hand
sleep(60)
if(active_hand)
LA.droplimb(0,DROPLIMB_BLUNT)
else
RA.droplimb(0,DROPLIMB_BLUNT)
return 0
..()
/obj/item/weapon/gun/energy/lawgiver/proc/Emag(mob/user as mob)
usr << "<span class='warning'>You short out [src]'s id check</span>"
emagged = 1
return 1
/obj/item/weapon/gun/energy/lawgiver/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/card/emag) && !emagged)
Emag(user)
else
..()
hear_talk(mob/living/M in range(0,src), msg)
/obj/item/weapon/gun/energy/lawgiver/hear_talk(mob/living/M in range(0,src), msg)
if( (src.dna==usr.dna.unique_enzymes || emagged) && (src in usr.contents))
hear(msg)
return
return
hear(var/msg)
var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = ""," " = "")
msg = sanitize_old(msg, replacechars)
if(findtext(msg,"singleshot") && (src.dna==usr.dna.unique_enzymes) && (src in usr.contents))
ammomode = 0
charge_cost = 50
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
usr << "\red [src.name] is now set to single shot mode."
projectile_type = /obj/item/projectile/bullet/pistol
fire_delay = 3
burst_delay = 0
recoil = 1
else if(findtext(msg,"rapidfire") && (src.dna==usr.dna.unique_enzymes) && (src in usr.contents))
ammomode = 1
charge_cost = 50
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
usr << "\red [src.name] is now set to rapid fire mode."
projectile_type = /obj/item/projectile/bullet/pistol
fire_delay = 1
burst_delay = 0
recoil = 2
else if(findtext(msg,"highex") && (src.dna==usr.dna.unique_enzymes) && (src in usr.contents))
ammomode = 2
charge_cost = 200
fire_sound = 'sound/effects/Explosion1.ogg'
usr << "\red [src.name] is now set to high explosive mode."
projectile_type = /obj/item/projectile/bullet/gyro/law
fire_delay = 6
burst_delay = 0
recoil = 3
else if(findtext(msg,"stun") && (src.dna==usr.dna.unique_enzymes) && (src in usr.contents))
ammomode = 3
charge_cost = 50
fire_sound = 'sound/weapons/Taser.ogg'
usr << "\red [src.name] is now set to stun mode."
projectile_type = /obj/item/projectile/energy/electrode
fire_delay = 4
burst_delay = 0
recoil = 0
else if(findtext(msg,"hotshot") && (src.dna==usr.dna.unique_enzymes) && (src in usr.contents))
ammomode = 4
charge_cost = 200
fire_sound = 'sound/weapons/lasercannonfire.ogg'
usr << "\red [src.name] is now set to incendiary mode."
projectile_type = /obj/item/projectile/bullet/shotgun
fire_delay = 6
burst_delay = 0
recoil = 1
else
/obj/item/weapon/gun/energy/lawgiver/proc/hear(var/msg)
var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = ""," " = "")
msg = sanitize_old(msg, replacechars)
/* Firing Modes*/
if(findtext(msg,"single"))
sel_mode = 1
projectile_type=/obj/item/projectile/bullet/pistol
fire_sound='sound/weapons/Gunshot_smg.ogg'
usr << "\red [src.name] is now set to single shot mode."
else if(findtext(msg,"rapidfire"))
sel_mode = 2
projectile_type=/obj/item/projectile/bullet/pistol
fire_sound='sound/weapons/Gunshot_smg.ogg'
usr << "\red [src.name] is now set to rapid fire mode."
else if(findtext(msg,"highex") || findtext(msg,"grenade"))
sel_mode = 3
projectile_type=/obj/item/projectile/bullet/gyro/law
fire_sound='sound/effects/Explosion1.ogg'
usr << "\red [src.name] is now set to high explosive mode."
else if(findtext(msg,"stun"))
sel_mode = 4
projectile_type=/obj/item/projectile/beam/stun
fire_sound='sound/weapons/Taser.ogg'
usr << "\red [src.name] is now set to stun mode."
else if(findtext(msg,"hotshot") || findtext(msg,"incendiary"))
sel_mode = 5
projectile_type=/obj/item/projectile/bullet/shotgun/incendiary
fire_sound='sound/weapons/Gunshot.ogg'
usr << "\red [src.name] is now set to incendiary mode."
else if(findtext(msg,"armorpiercing") || findtext(msg,"execution"))
sel_mode = 6
projectile_type=/obj/item/projectile/bullet/rifle/a556
fire_sound='sound/weapons/Gunshot.ogg'
usr << "\red [src.name] is now set to armorpiercing mode."
else if(findtext(msg,"pellets"))
sel_mode = 7
projectile_type=/obj/item/projectile/bullet/pellet/shotgun
fire_sound='sound/weapons/Gunshot.ogg'
usr << "\red [src.name] is now set to pellet mode."
/* Other Stuff */
else if(findtext(msg,"reset") && (findtext(msg,"user") || findtext(msg,"dna")))
dna = null
desc = default_desc
usr << "\red [src.name]´s owner has been reset. Do not attempt to fire [src.name] without rebinding a new owner"
else if((findtext(msg,"disable") || findtext(msg,"deactivate")) && findtext(msg,"crowdcontrol"))
message_disable = 1
usr << "\red [src.name]´s crowdcontrol deactivation sequence started"
else if((findtext(msg,"enable") || findtext(msg,"activate")) && findtext(msg,"crowdcontrol"))
if(message_enabled) //Check if a message is already broadcasting -> abort
usr << "\red [src.name] is already broadcasting a message."
return
usr << "\red [src.name]´s crowdcontrol activation sequence started"
message = "Citizens stay calm. Stand back from the crimescense. Interference with the crimescene carries an automatice brig sentence."
message_enabled = 1
message_disable = 0
play_message()
else
return
+2 -1
View File
@@ -56,6 +56,7 @@
var/eyeblur = 0
var/drowsy = 0
var/agony = 0
var/incinerate = 0
var/embed = 0 // whether or not the projectile can embed itself in the mob
var/hitscan = 0 // whether the projectile should be hitscan
@@ -77,7 +78,7 @@
if(!isliving(target)) return 0
if(isanimal(target)) return 0
var/mob/living/L = target
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked) // add in AGONY!
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, incinerate, blocked) // add in AGONY!
return 1
//called when the projectile stops flying because it collided with something
@@ -130,6 +130,15 @@
embed = 0
sharp = 0
/obj/item/projectile/bullet/shotgun/incendiary
name = "incendiary"
check_armour = "melee"
damage = 5
agony = 0
embed = 0
sharp = 0
incinerate = 10
//Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance.
//Overall less damage than slugs in exchange for more damage at very close range and more embedding
/obj/item/projectile/bullet/pellet/shotgun