Crazy Fethas Traitor Emporium of Horrors

This commit is contained in:
Aurorablade
2016-04-27 19:09:21 -04:00
parent 09ee3315d4
commit 7a99d8fe74
24 changed files with 569 additions and 109 deletions
@@ -294,3 +294,11 @@
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
projectile_type = "/obj/item/projectile/bullet/reusable/foam_dart/riot"
icon_state = "foamdart_riot"
/obj/item/ammo_casing/shotgun/dart/assassination
desc = "A specialist shotgun dart designed to inncapacitate and kill the target over time, so you can get very far away from your target"
/obj/item/ammo_casing/shotgun/dart/assassination/New()
..()
reagents.add_reagent("neurotoxin", 6)
reagents.add_reagent("lexorin", 6)
+85
View File
@@ -50,6 +50,12 @@
var/burst_size = 1
//Zooming
var/zoomable = FALSE //whether the gun generates a Zoom action on creation
var/zoomed = FALSE //Zoom toggle
var/zoom_amt = 3 //Distance in TURFs to move the user's screen forward (the "zoom" effect)
var/datum/action/toggle_scope_zoom/azoom
proc/ready_to_fire()
if(world.time >= last_fired + fire_delay)
last_fired = world.time
@@ -81,6 +87,20 @@
proj.silenced = silenced
return
/obj/item/weapon/gun/energy/New()
build_zooming()
/obj/item/weapon/gun/pickup(mob/user)
if(azoom)
azoom.Grant(user)
/obj/item/weapon/gun/dropped(mob/user)
zoom(user,FALSE)
if(azoom)
azoom.Remove(user)
/obj/item/weapon/gun/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
if(flag) return //we're placing gun on a table or in backpack
if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy)) return//Shouldnt flag take care of this?
@@ -381,3 +401,68 @@
else
set_light(0)
return
/////////////
// ZOOMING //
/////////////
/datum/action/toggle_scope_zoom
name = "Toggle Scope"
check_flags = AB_CHECK_ALIVE|AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING
button_icon_state = "sniper_zoom"
var/obj/item/weapon/gun/gun = null
/datum/action/toggle_scope_zoom/Trigger()
gun.zoom(owner)
/datum/action/toggle_scope_zoom/IsAvailable()
. = ..()
if(!. && gun)
gun.zoom(owner, FALSE)
/datum/action/toggle_scope_zoom/Remove(mob/living/L)
gun.zoom(L, FALSE)
..()
/obj/item/weapon/gun/proc/zoom(mob/living/user, forced_zoom)
if(!user || !user.client)
return
switch(forced_zoom)
if(FALSE)
zoomed = FALSE
if(TRUE)
zoomed = TRUE
else
zoomed = !zoomed
if(zoomed)
var/_x = 0
var/_y = 0
switch(user.dir)
if(NORTH)
_y = zoom_amt
if(EAST)
_x = zoom_amt
if(SOUTH)
_y = -zoom_amt
if(WEST)
_x = -zoom_amt
user.client.pixel_x = world.icon_size*_x
user.client.pixel_y = world.icon_size*_y
else
user.client.pixel_x = 0
user.client.pixel_y = 0
//Proc, so that gun accessories/scopes/etc. can easily add zooming.
/obj/item/weapon/gun/proc/build_zooming()
if(azoom)
return
if(zoomable)
azoom = new()
azoom.gun = src
@@ -156,41 +156,8 @@ obj/item/weapon/gun/energy/staff/focus
charge_cost = 2500
fire_delay = 50
w_class = 4.0
var/zoom = 0
/obj/item/weapon/gun/energy/sniperrifle/dropped(mob/user)
user.client.view = world.view
/*
This is called from
modules/mob/mob_movement.dm if you move you will be zoomed out
modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
*/
/obj/item/weapon/gun/energy/sniperrifle/verb/zoom()
set category = "Object"
set name = "Use Sniper Scope"
set popup_menu = 0
if(usr.stat || !(istype(usr,/mob/living/carbon/human)))
to_chat(usr, "You are unable to focus down the scope of the rifle.")
return
if(!zoom && usr.get_active_hand() != src)
to_chat(usr, "You are too distracted to look down the scope, perhaps if it was in your active hand this might work better")
return
if(usr.client.view == world.view)
if(usr.hud_used)
usr.hud_used.show_hud(HUD_STYLE_NOHUD)
usr.client.view = 12
zoom = 1
else
usr.client.view = world.view
if(usr.hud_used)
usr.hud_used.show_hud(HUD_STYLE_STANDARD)
zoom = 0
to_chat(usr, "<font color='[zoom?"blue":"red"]'>Zoom mode [zoom?"en":"dis"]abled.</font>")
zoomable = TRUE
zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you.
/obj/item/weapon/gun/energy/kinetic_accelerator
@@ -314,4 +314,30 @@
icon_state = "cshotgun"
origin_tech = "combat=5;materials=2"
mag_type = "/obj/item/ammo_box/magazine/internal/shotcom"
w_class = 5
w_class = 5
//caneshotgun
/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/cane
name = "cane"
desc = "A cane used by a true gentlemen. Or a clown."
icon = 'icons/obj/weapons.dmi'
icon_state = "cane"
item_state = "stick"
sawn_state = SAWN_OFF
w_class = 2
force = 10
can_unsuppress = 0
slot_flags = null
origin_tech = "" // NO GIVAWAYS
mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/improvised"
sawn_desc = "I'm sorry, but why did you saw your cane in the first place?"
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
fire_sound = 'sound/weapons/Gunshot_silenced.ogg'
silenced = 1
needs_permit = 0 //its just a cane beepsky.....
/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/cane/attackby(obj/item/A, mob/user, params)
..()
if(istype(A, /obj/item/stack/cable_coil))
return
@@ -0,0 +1,178 @@
/obj/item/weapon/gun/projectile/sniper_rifle
name = "sniper rifle"
desc = "the kind of gun that will leave you crying for mummy before you even realise your leg's missing"
icon_state = "snipertg"
item_state = "snipertg"
recoil = 2
heavy_weapon = 1
mag_type = "/obj/item/ammo_box/magazine/sniper_rounds"
fire_delay = 40
origin_tech = "combat=8"
can_unsuppress = 1
can_suppress = 1
w_class = 3
zoomable = TRUE
zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you.
slot_flags = SLOT_BACK
/obj/item/weapon/gun/projectile/sniper_rifle/update_icon()
if(magazine)
icon_state = "sniper-mag"
else
icon_state = "snipertg"
/obj/item/weapon/gun/projectile/sniper_rifle/syndicate
name = "syndicate sniper rifle"
desc = "Syndicate flavoured sniper rifle, it packs quite a punch, a punch to your face"
origin_tech = "combat=8;illigal=4"
//Normal Boolets
/obj/item/ammo_box/magazine/sniper_rounds
name = "sniper rounds (.50)"
icon_state = ".50mag"
origin_tech = "combat=6;illigal=2"
ammo_type = /obj/item/ammo_casing/point50
max_ammo = 6
caliber = ".50"
/obj/item/ammo_casing/point50
desc = "A .50 bullet casing."
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/sniper
icon_state = ".50"
/obj/item/ammo_box/magazine/sniper_rounds/update_icon()
if(ammo_count())
icon_state = "[initial(icon_state)]-ammo"
else
icon_state = "[initial(icon_state)]"
/obj/item/projectile/bullet/sniper
damage = 70
stun = 5
weaken = 5
armour_penetration = 50
var/breakthings = TRUE
/obj/item/projectile/bullet/sniper/on_hit(atom/target, blocked = 0, hit_zone)
if((blocked != 100) && (!ismob(target) && breakthings))
target.ex_act(rand(1,2))
return ..()
//Sleepy ammo
/obj/item/ammo_box/magazine/sniper_rounds/soporific
name = "sniper rounds (Zzzzz)"
desc = "Soporific sniper rounds, designed for happy days and dead quiet nights..."
icon_state = "soporific"
origin_tech = "combat=6;illigal=3"
ammo_type = /obj/item/ammo_casing/soporific
max_ammo = 3
caliber = ".50"
icon_state = ".50"
/obj/item/ammo_casing/soporific
desc = "A .50 bullet casing, specialised in sending the target to sleep, instead of hell."
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/sniper/soporific
/obj/item/projectile/bullet/sniper/soporific
nodamage = 1
stun = 0
weaken = 0
armour_penetration = 0
breakthings = FALSE
/obj/item/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = 0, hit_zone)
if((blocked != 100) && istype(target, /mob/living))
var/mob/living/L = target
L.SetSleeping(20)
return ..()
//hemorrhage ammo
/obj/item/ammo_box/magazine/sniper_rounds/haemorrhage
name = "sniper rounds (Bleed)"
desc = "Haemorrhage sniper rounds, leaves your target in a pool of crimson pain"
icon_state = "haemorrhage"
origin_tech = "combat=7;syndicate=5"
ammo_type = /obj/item/ammo_casing/haemorrhage
max_ammo = 5
caliber = ".50"
icon_state = ".50"
/obj/item/ammo_casing/haemorrhage
desc = "A .50 bullet casing, specialised in causing massive bloodloss"
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/sniper/haemorrhage
/obj/item/projectile/bullet/sniper/haemorrhage
damage = 15
stun = 0
weaken = 0
breakthings = FALSE
armour_penetration = 15
/obj/item/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = 0, hit_zone)
if((blocked != 100) && istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/H = target
H.drip(100)
return ..()
//penetrator ammo
/obj/item/ammo_box/magazine/sniper_rounds/penetrator
name = "sniper rounds (penetrator)"
desc = "An extremely powerful round capable of passing straight through cover and anyone unfortunate enough to be behind it."
ammo_type = /obj/item/ammo_casing/penetrator
max_ammo = 5
/obj/item/ammo_casing/penetrator
desc = "A .50 caliber penetrator round casing."
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/sniper/penetrator
icon_state = ".50"
/obj/item/projectile/bullet/sniper/penetrator
icon_state = "gauss"
name = "penetrator round"
damage = 60
forcedodge = 1
stun = 0
weaken = 0
breakthings = FALSE
//Accelerator ammo
/obj/item/ammo_box/magazine/sniper_rounds/accelerator
name = "sniper rounds (accelerator)"
desc = "An advanced round which gains more power the farther it flies."
ammo_type = /obj/item/ammo_casing/accelerator
max_ammo = 5
/obj/item/ammo_casing/accelerator
desc = "A .50 caliber accelerator round casing."
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/sniper/accelerator
icon_state = ".50"
/obj/item/projectile/bullet/sniper/accelerator
icon_state = "gaussweak"
name = "accelerator round"
damage = 5
stun = 0
weaken = 0
breakthings = FALSE
/obj/item/projectile/bullet/sniper/accelerator/Range()
..()
damage += 5
if(damage > 40)
icon_state = "gaussstrong"
breakthings = TRUE
else if(damage > 25)
icon_state = "gauss"