Crazy Fethas Traitor Emporium of Horrors
@@ -122,6 +122,15 @@ var/list/uplink_items = list()
|
||||
cost = 5
|
||||
job = list("Clown")
|
||||
|
||||
//mime
|
||||
/datum/uplink_item/job_specific/caneshotgun
|
||||
name = "Cane Shotgun + Assassination Darts"
|
||||
desc = "A specialized, one shell shotgun with a built-in cloaking device to mimic a cane. The shotgun is capable of hiding it's contents and the pin alongside being supressed. Comes with 6 special darts and a preloaded shrapnel round."
|
||||
reference = "MCS"
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/caneshotgun
|
||||
cost = 15
|
||||
job = list("Mime")
|
||||
|
||||
//Chef
|
||||
/datum/uplink_item/jobspecific/specialsauce
|
||||
name = "Chef Excellence's Special Sauce"
|
||||
@@ -238,6 +247,45 @@ var/list/uplink_items = list()
|
||||
cost = 12
|
||||
job = list("Research Director")
|
||||
|
||||
//Librarian
|
||||
/datum/uplink_item/jobspecific/etwenty
|
||||
name = "The E20"
|
||||
desc = "A seemingly innocent die, those who are not afraid to roll for attack will find it's effects quite explosive. Has a four second timer."
|
||||
reference = "ETW"
|
||||
item = /obj/item/weapon/dice/d20/e20
|
||||
cost = 3
|
||||
job = list("Librarian")
|
||||
|
||||
|
||||
//Botanist
|
||||
/datum/uplink_item/jobspecific/ambrosiacruciatus
|
||||
name = "Ambrosia Cruciatus Seeds"
|
||||
desc = "Part of the notorious Ambrosia family, this species is nearly indistinguishable from Ambrosia Vulgaris- but its' branches contain a revolting toxin. Eight units are enough to drive victims insane."
|
||||
reference = "BRO"
|
||||
item = /obj/item/seeds/ambrosiavulgarisseed/cruciatus
|
||||
cost = 2
|
||||
job = list("Botanist")
|
||||
|
||||
|
||||
//Chemist
|
||||
|
||||
/datum/uplink_item/jobspecific/antisocial
|
||||
name = "Explosive Hug Chemical"
|
||||
desc = "30 units of Bicarodyne, a chemical that causes a devastating explosion when exposed to endorphins released in the body by a hug. Metabolizes quite slowly."
|
||||
reference = "HUG"
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/explosive_hug //Had to be put in a box because it didn't play well with reagent creation
|
||||
cost = 4
|
||||
job = list("Chemist", "Chief Medical Officer")
|
||||
|
||||
//Atmos Tech
|
||||
/datum/uplink_item/jobspecific/contortionist
|
||||
name = "Contortionist's Jumpsuit"
|
||||
desc = "A highly flexible jumpsuit that will help you navigate the ventilation loops of the station internally. Comes with pockets and ID slot, but can't be used without stripping off most gear, including backpack, belt, helmet, and exosuit. Free hands are also necessary to crawl around inside."
|
||||
reference = "AIRJ"
|
||||
item = /obj/item/clothing/under/contortionist
|
||||
cost = 6
|
||||
job = list("Atmospheric Technician")
|
||||
|
||||
//Stimulants
|
||||
|
||||
/datum/uplink_item/jobspecific/stims
|
||||
@@ -448,6 +496,15 @@ var/list/uplink_items = list()
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
cost = 12
|
||||
|
||||
/datum/uplink_item/dangerous/sniper
|
||||
name = "Sniper Rifle"
|
||||
desc = "Ranged fury, syndicate style. guaranteed to cause shock and awe or your TC back!"
|
||||
item = /obj/item/weapon/gun/projectile/sniper_rifle/syndicate
|
||||
cost = 16
|
||||
reference = "SNIPE"
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
surplus = 25
|
||||
|
||||
// Ammunition
|
||||
|
||||
/datum/uplink_item/ammo
|
||||
@@ -541,6 +598,36 @@ var/list/uplink_items = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
surplus = 0
|
||||
|
||||
/datum/uplink_item/ammo/sniper
|
||||
name = "Sniper Magazine - .50"
|
||||
desc = "An additional 6-round .50 magazine for use in the syndicate sniper rifle."
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds
|
||||
cost = 4 //70dmg rounds are no joke
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/sniper/soporific
|
||||
name = "Sniper Magazine - Soporific Rounds"
|
||||
desc = "A 3-round magazine of soporific ammo designed for use in the syndicate sniper rifle, put your enemies to sleep today!"
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds/soporific
|
||||
cost = 6
|
||||
|
||||
/datum/uplink_item/ammo/sniper/haemorrhage
|
||||
name = "Sniper Magazine - Haemorrhage Rounds"
|
||||
desc = "A 5-round magazine of haemorrhage ammo designed for use in the syndicate sniper rifle, causes heavy bleeding in the target."
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage
|
||||
|
||||
/datum/uplink_item/ammo/sniper/penetrator
|
||||
name = "Sniper Magazine - Penetrator Rounds"
|
||||
desc = "A 5-round magazine of penetrator ammo designed for use in the syndicate sniper rifle. Can pierce walls and multiple enemies."
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/ammo/sniper/accelerator
|
||||
name = "Sniper Magazine - Accelerator Rounds"
|
||||
desc = "A 5-round magazine of accelerator ammo designed for use in the syndicate sniper rifle. The shot is weak at close range, but gains more power the farther it flies."
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds/accelerator
|
||||
cost = 4
|
||||
|
||||
// STEALTHY WEAPONS
|
||||
|
||||
/datum/uplink_item/stealthy_weapons
|
||||
|
||||
@@ -282,6 +282,7 @@
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/toy/crayon/mime(H), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/cane(H), slot_in_backpack)
|
||||
if(H.mind)
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
|
||||
|
||||
@@ -53,6 +53,9 @@
|
||||
icon_state = "d20"
|
||||
sides = 20
|
||||
|
||||
/obj/item/weapon/dice/d20/e20
|
||||
var/triggered = 0
|
||||
|
||||
/obj/item/weapon/dice/attack_self(mob/user as mob)
|
||||
diceroll(user)
|
||||
|
||||
@@ -84,6 +87,27 @@
|
||||
H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg")))
|
||||
H.Weaken(3)
|
||||
*///ew.
|
||||
|
||||
|
||||
/obj/item/weapon/dice/d20/e20/diceroll(mob/user as mob, thrown)
|
||||
if(triggered) return
|
||||
..()
|
||||
if(result == 1)
|
||||
to_chat(user, "<span class='danger'>Rocks fall, you die.</span>")
|
||||
user.gib()
|
||||
else
|
||||
triggered = 1
|
||||
visible_message("<span class='notice'>You hear a quiet click.</span>")
|
||||
spawn(40)
|
||||
var/cap = 0
|
||||
if(result > MAX_EX_LIGHT_RANGE && result != 20)
|
||||
cap = 1
|
||||
result = min(result, MAX_EX_LIGHT_RANGE) //Apply the bombcap
|
||||
else if(result == 20) //Roll a nat 20, screw the bombcap
|
||||
result = 24
|
||||
var/turf/epicenter = get_turf(src)
|
||||
explosion(epicenter, round(result*0.25), round(result*0.5), round(result), round(result*1.5), 1, cap)
|
||||
|
||||
/obj/item/weapon/dice/update_icon()
|
||||
overlays.Cut()
|
||||
overlays += "[src.icon_state][src.result]"
|
||||
|
||||
@@ -172,4 +172,27 @@
|
||||
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
|
||||
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
|
||||
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/caneshotgun
|
||||
name = "cane gun kit"
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/caneshotgun/New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
|
||||
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
|
||||
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
|
||||
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
|
||||
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
|
||||
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
|
||||
new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/cane(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/explosive_hug
|
||||
name = "box"
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/explosive_hug/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/antisocial(src)
|
||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
return
|
||||
@@ -683,3 +683,19 @@
|
||||
icon_state = "noble_clothes"
|
||||
item_color = "noble_clothes"
|
||||
item_state = "noble_clothes"
|
||||
|
||||
/obj/item/clothing/under/contortionist
|
||||
name = "Contortionist's Jumpsuit"
|
||||
desc = "A light jumpsuit useful for squeezing through narrow vents."
|
||||
icon_state = "atmos"
|
||||
item_state = "atmos_suit"
|
||||
item_color = "atmos"
|
||||
|
||||
/obj/item/clothing/under/contortionist/proc/check_clothing(mob/user as mob)
|
||||
//Allowed to wear: glasses, shoes, gloves, pockets, mask, and jumpsuit (obviously)
|
||||
var/list/slot_must_be_empty = list(slot_back,slot_handcuffed,slot_legcuffed,slot_l_hand,slot_r_hand,slot_belt,slot_head,slot_wear_suit)
|
||||
for(var/slot_id in slot_must_be_empty)
|
||||
if(user.get_item_by_slot(slot_id))
|
||||
user << "<span class='warning'>You can't fit inside while wearing that \the [user.get_item_by_slot(slot_id)].</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -367,6 +367,26 @@
|
||||
..()
|
||||
set_trait(TRAIT_RARITY,40)
|
||||
|
||||
/datum/seed/ambrosia/cruciatus
|
||||
name = "ambrosia"
|
||||
seed_name = "ambrosia vulgaris"
|
||||
display_name = "ambrosia vulgaris"
|
||||
mutants = null
|
||||
chems = list("plantmatter" = list(1), "thc" = list(1,8), "silver_sulfadiazine" = list(1,8,1), "styptic_powder" = list(1,10,1), "bath salts" = list(10))
|
||||
kitchen_tag = "ambrosia"
|
||||
preset_icon = "ambrosiavulgaris"
|
||||
|
||||
/datum/seed/ambrosia/cruciatus/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
set_trait(TRAIT_YIELD,6)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"ambrosia")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#9FAD55")
|
||||
set_trait(TRAIT_PLANT_ICON,"ambrosia")
|
||||
|
||||
//Tobacco/varieties
|
||||
/datum/seed/tobacco
|
||||
name = "tobacco"
|
||||
|
||||
@@ -221,6 +221,9 @@ var/global/list/plant_seed_sprites = list()
|
||||
/obj/item/seeds/ambrosiadeusseed
|
||||
seed_type = "ambrosiadeus"
|
||||
|
||||
/obj/item/seeds/ambrosiavulgarisseed/cruciatus
|
||||
seed_type = "ambrosia"
|
||||
|
||||
/obj/item/seeds/whitebeetseed
|
||||
seed_type = "whitebeet"
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
winset(src, "mapwindow.map", "icon-size=[src.reset_stretch]")
|
||||
viewingCanvas = 0
|
||||
mob.reset_view()
|
||||
if(mob.hud_used)
|
||||
if(mob.hud_used)
|
||||
mob.hud_used.show_hud(HUD_STYLE_STANDARD)
|
||||
|
||||
if(mob.control_object) Move_object(direct)
|
||||
@@ -181,12 +181,6 @@
|
||||
if(L.incorporeal_move)//Move though walls
|
||||
Process_Incorpmove(direct)
|
||||
return
|
||||
if(mob.client)
|
||||
if(mob.client.view != world.view)
|
||||
if(locate(/obj/item/weapon/gun/energy/sniperrifle, mob.contents)) // If mob moves while zoomed in with sniper rifle, unzoom them.
|
||||
var/obj/item/weapon/gun/energy/sniperrifle/s = locate() in mob
|
||||
if(s.zoom)
|
||||
s.zoom()
|
||||
|
||||
if(Process_Grab()) return
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
@@ -1,76 +1,88 @@
|
||||
//Anything for harm or hostile intents go here (explosions, EMPs, thermite, mutagen)
|
||||
/datum/chemical_reaction
|
||||
/datum/chemical_reaction/explosion_potassium
|
||||
name = "Explosion"
|
||||
id = "explosion_potassium"
|
||||
result = null
|
||||
required_reagents = list("water" = 1, "potassium" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "The mixture explodes!"
|
||||
|
||||
explosion_potassium
|
||||
name = "Explosion"
|
||||
id = "explosion_potassium"
|
||||
result = null
|
||||
required_reagents = list("water" = 1, "potassium" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "The mixture explodes!"
|
||||
/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/datum/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
|
||||
e.start()
|
||||
holder.clear_reagents()
|
||||
return
|
||||
|
||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/datum/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
|
||||
e.start()
|
||||
holder.clear_reagents()
|
||||
return
|
||||
/datum/chemical_reaction/emp_pulse
|
||||
name = "EMP Pulse"
|
||||
id = "emp_pulse"
|
||||
result = null
|
||||
required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
|
||||
result_amount = 2
|
||||
|
||||
emp_pulse
|
||||
name = "EMP Pulse"
|
||||
id = "emp_pulse"
|
||||
result = null
|
||||
required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
|
||||
result_amount = 2
|
||||
/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
|
||||
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
|
||||
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
|
||||
holder.clear_reagents()
|
||||
return
|
||||
|
||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
|
||||
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
|
||||
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
|
||||
holder.clear_reagents()
|
||||
return
|
||||
/datum/chemical_reaction/mutagen
|
||||
name = "Unstable mutagen"
|
||||
id = "mutagen"
|
||||
result = "mutagen"
|
||||
required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The substance turns neon green and bubbles unnervingly."
|
||||
|
||||
mutagen
|
||||
name = "Unstable mutagen"
|
||||
id = "mutagen"
|
||||
result = "mutagen"
|
||||
required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The substance turns neon green and bubbles unnervingly."
|
||||
/datum/chemical_reaction/thermite
|
||||
name = "Thermite"
|
||||
id = "thermite"
|
||||
result = "thermite"
|
||||
required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
thermite
|
||||
name = "Thermite"
|
||||
id = "thermite"
|
||||
result = "thermite"
|
||||
required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
/datum/chemical_reaction/glycerol
|
||||
name = "Glycerol"
|
||||
id = "glycerol"
|
||||
result = "glycerol"
|
||||
required_reagents = list("cornoil" = 3, "sacid" = 1)
|
||||
result_amount = 1
|
||||
|
||||
glycerol
|
||||
name = "Glycerol"
|
||||
id = "glycerol"
|
||||
result = "glycerol"
|
||||
required_reagents = list("cornoil" = 3, "sacid" = 1)
|
||||
result_amount = 1
|
||||
/datum/chemical_reaction/nitroglycerin
|
||||
name = "Nitroglycerin"
|
||||
id = "nitroglycerin"
|
||||
result = "nitroglycerin"
|
||||
required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
|
||||
result_amount = 2
|
||||
|
||||
nitroglycerin
|
||||
name = "Nitroglycerin"
|
||||
id = "nitroglycerin"
|
||||
result = "nitroglycerin"
|
||||
required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
|
||||
result_amount = 2
|
||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/datum/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
|
||||
e.start()
|
||||
/datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/datum/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(round(created_volume/2, 1), holder.my_atom, 0, 0)
|
||||
e.start()
|
||||
|
||||
holder.clear_reagents()
|
||||
return
|
||||
holder.clear_reagents()
|
||||
return
|
||||
|
||||
condensedcapsaicin
|
||||
name = "Condensed Capsaicin"
|
||||
id = "condensedcapsaicin"
|
||||
result = "condensedcapsaicin"
|
||||
required_reagents = list("capsaicin" = 2)
|
||||
required_catalysts = list("plasma" = 5)
|
||||
result_amount = 1
|
||||
/datum/chemical_reaction/condensedcapsaicin
|
||||
name = "Condensed Capsaicin"
|
||||
id = "condensedcapsaicin"
|
||||
result = "condensedcapsaicin"
|
||||
required_reagents = list("capsaicin" = 2)
|
||||
required_catalysts = list("plasma" = 5)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/explosion_bicarodyne
|
||||
name = "Explosion"
|
||||
id = "explosion_bicarodyne"
|
||||
result = null
|
||||
required_reagents = list("bicarodyne" = 1, "sal_acid" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/explosion_bicarodyne/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/datum/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(created_volume, holder.my_atom, 0, 0)
|
||||
e.start()
|
||||
return
|
||||
@@ -394,6 +394,13 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/bicarodyne
|
||||
name = "Bicarodyne"
|
||||
id = "bicarodyne"
|
||||
description = "Not to be confused with the old chemical Bicaridine, Bicarodyne is a volatile chemical that reacts violently in the presence of most human endorphins."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
metabolization_rate = 0.01
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/datum/reagent/condensedcapsaicin
|
||||
|
||||
@@ -301,6 +301,14 @@
|
||||
..()
|
||||
reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","sarin","histamine","venom","cyanide","spidereggs","nanomachines"), 40)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/antisocial
|
||||
desc = "It has a skull and heart on the bottle..what?"
|
||||
possible_transfer_amounts = list(5,10,15,25,30)
|
||||
volume = 30
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("bicarodyne", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/plasma
|
||||
name = "plasma dust bottle"
|
||||
|
||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 30 KiB |
@@ -1775,6 +1775,7 @@
|
||||
#include "code\modules\projectiles\guns\projectile\revolver.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\rocket.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\shotgun.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\sniper.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\toy.dm"
|
||||
#include "code\modules\projectiles\projectile\beams.dm"
|
||||
#include "code\modules\projectiles\projectile\bullets.dm"
|
||||
|
||||