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
@@ -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
+20
View File
@@ -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"
+3
View File
@@ -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"
+1 -7
View File
@@ -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)
+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"
@@ -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"