Commiting what i've got so far for the new traitor items

This commit is contained in:
d3athrow
2013-09-06 23:24:23 -05:00
parent a95b639402
commit 165c8ab75d
19 changed files with 274 additions and 26 deletions

View File

@@ -571,6 +571,7 @@
#include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\wires.dm"
#include "code\game\objects\items\weapons\grenades\chem_grenade.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
#include "code\game\objects\items\weapons\grenades\clowngrenade.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm" #include "code\game\objects\items\weapons\grenades\flashbang.dm"
#include "code\game\objects\items\weapons\grenades\grenade.dm" #include "code\game\objects\items\weapons\grenades\grenade.dm"

View File

@@ -32,7 +32,8 @@
spawn(0) spawn(0)
var/obj/effect/expl_particles/expl = new /obj/effect/expl_particles(src.location) var/obj/effect/expl_particles/expl = new /obj/effect/expl_particles(src.location)
var/direct = pick(alldirs) var/direct = pick(alldirs)
for(i=0, i<pick(1;25,2;50,3,4;200), i++) var/a = 0
for(a=0, a<pick(1;25,2;50,3,4;200), a++)
sleep(1) sleep(1)
step(expl,direct) step(expl,direct)

View File

@@ -1,6 +1,6 @@
var/list/uplink_items = list() var/list/uplink_items = list()
/proc/get_uplink_items() /proc/get_uplink_items(var/job = null)
// If not already initialized.. // If not already initialized..
if(!uplink_items.len) if(!uplink_items.len)
@@ -25,7 +25,6 @@ var/list/uplink_items = list()
uplink_items[I.category] += I uplink_items[I.category] += I
for(var/datum/uplink_item/I in last) for(var/datum/uplink_item/I in last)
if(!uplink_items[I.category]) if(!uplink_items[I.category])
uplink_items[I.category] = list() uplink_items[I.category] = list()
@@ -45,6 +44,7 @@ var/list/uplink_items = list()
var/last = 0 // Appear last var/last = 0 // Appear last
var/abstract = 0 var/abstract = 0
var/list/gamemodes = list() // Empty list means it is in all the gamemodes. Otherwise place the gamemode name here. var/list/gamemodes = list() // Empty list means it is in all the gamemodes. Otherwise place the gamemode name here.
var/job = null
/datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/device/uplink/U) /datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/device/uplink/U)
U.uses -= max(cost, 0) U.uses -= max(cost, 0)
@@ -297,6 +297,42 @@ var/list/uplink_items = list()
item = /obj/item/weapon/storage/box/syndie_kit/imp_compress item = /obj/item/weapon/storage/box/syndie_kit/imp_compress
cost = 4 cost = 4
//Work in Progress, job specific antag tools
/datum/uplink_item/jobspecific
category = "Job Specific Tools"
//Clown
/datum/uplink_item/jobspecific/clowngrenade
name = "1 Banana Grenade"
desc = "A grenade that explodes into HONK! brand banana peels that are genetically modified to be extra slippery and extrude caustic acid when stepped on"
item = /obj/item/weapon/grenade/clown_grenade
cost = 4
job = "Clown"
//Detective
/datum/uplink_item/jobspecific/evidenceforger
name = "Evidence Forger"
desc = "An evidence scanner that allows you forge evidence by setting the output before scanning the item."
item = /obj/item/device/detective_scanner/forger
cost = 3
job = "Detective"
/datum/uplink_item/jobspecific/conversionkit
name = "Conversion Kit Bundle"
desc = "A bundle that comes with a professional revolver conversion kit and 1 box of .357 ammo. The kit allows you to convert your revolver to fire lethal rounds or vice versa, modification is nearly perfect and will not result in catastrophic failure."
item = /obj/item/weapon/storage/box/syndie_kit/conversion
cost = 6
job = "Detective"
//Chef
/datum/uplink_item/jobspecific/conversionkit
name = "Chef Excellence's Special Sauce"
desc = "A custom made sauce made from the toxin glands of 1000 space carp, if somebody ingests enough they'll be dead in 3 minutes or less guaranteed."
item = /obj/item/weapon/reagent_containers/food/condiment/syndisauce
cost = 2
job = "Chef"
// POINTLESS BADASSERY // POINTLESS BADASSERY
/datum/uplink_item/badass /datum/uplink_item/badass

View File

@@ -520,7 +520,7 @@
item_state = "" item_state = ""
throw_speed = 4 throw_speed = 4
throw_range = 20 throw_range = 20
/*unused
/obj/item/weapon/camera_bug/attack_self(mob/usr as mob) /obj/item/weapon/camera_bug/attack_self(mob/usr as mob)
var/list/cameras = new/list() var/list/cameras = new/list()
for (var/obj/machinery/camera/C in cameranet.cameras) for (var/obj/machinery/camera/C in cameranet.cameras)
@@ -545,7 +545,7 @@
if (usr.stat == 2) return if (usr.stat == 2) return
usr.client.eye = target usr.client.eye = target
*/
/obj/item/weapon/syntiflesh /obj/item/weapon/syntiflesh
name = "syntiflesh" name = "syntiflesh"

View File

@@ -678,9 +678,10 @@
if(!(usr)) //BS12 EDIT if(!(usr)) //BS12 EDIT
return return
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain))|| !isMoMMI(usr))//Is humanoid, and is not a brain if(!istype(usr, /mob/living/carbon) && !isMoMMI(usr))//Is not a carbon being or MoMMI
usr << "\red You can't pick things up!" usr << "You can't pick things up!"
return if(istype(usr, /mob/living/carbon/brain))//Is a brain
usr << "You can't pick things up!"
if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained
usr << "\red You can't pick things up!" usr << "\red You can't pick things up!"
return return

View File

@@ -13,6 +13,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/list/purchase_log = list() var/list/purchase_log = list()
var/show_description = null var/show_description = null
var/active = 0 var/active = 0
var/job = null
/obj/item/device/uplink/New() /obj/item/device/uplink/New()
..() ..()
@@ -20,8 +21,9 @@ A list of items and costs is stored under the datum of every game mode, alongsid
uses = ticker.mode.uplink_uses uses = ticker.mode.uplink_uses
//Let's build a menu! //Let's build a menu!
/obj/item/device/uplink/proc/generate_menu() /obj/item/device/uplink/proc/generate_menu(mob/user as mob)
if(!job)
job = user.job
var/dat = "<B>[src.welcome]</B><BR>" var/dat = "<B>[src.welcome]</B><BR>"
// AUTOFIXED BY fix_string_idiocy.py // AUTOFIXED BY fix_string_idiocy.py
@@ -45,8 +47,15 @@ A list of items and costs is stored under the datum of every game mode, alongsid
// Loop through items in category // Loop through items in category
for(var/datum/uplink_item/item in buyable_items[category]) for(var/datum/uplink_item/item in buyable_items[category])
i++ i++
var/cost_text = "" var/cost_text = ""
var/desc = "[item.desc]" var/desc = "[item.desc]"
if(item.job)
if(item.job != job)
world.log << "Skipping job item that doesn't match"
continue
else
world.log << "Found matching job item"
if(item.cost > 0) if(item.cost > 0)
cost_text = "([item.cost])" cost_text = "([item.cost])"
if(item.cost <= uses) if(item.cost <= uses)
@@ -71,7 +80,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
/obj/item/device/uplink/interact(mob/user as mob) /obj/item/device/uplink/interact(mob/user as mob)
var/dat = "<body link='yellow' alink='white' bgcolor='#601414'><font color='white'>" var/dat = "<body link='yellow' alink='white' bgcolor='#601414'><font color='white'>"
dat += src.generate_menu() dat += src.generate_menu(user)
// AUTOFIXED BY fix_string_idiocy.py // AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\game\objects\items\devices\uplinks.dm:72: dat += "<A href='byond://?src=\ref[src];lock=1'>Lock</a>" // C:\Users\Rob\Documents\Projects\vgstation13\code\game\objects\items\devices\uplinks.dm:72: dat += "<A href='byond://?src=\ref[src];lock=1'>Lock</a>"

View File

@@ -0,0 +1,96 @@
/obj/item/weapon/grenade/clown_grenade
name = "Banana Grenade"
desc = "HONK! brand Bananas. In a special applicator for rapid slipping of wide areas."
icon_state = "chemg"
item_state = "flashbang"
w_class = 2.0
force = 2.0
var/stage = 0
var/state = 0
var/path = 0
var/affected_area = 2
New()
icon_state = initial(icon_state) +"_locked"
prime()
..()
playsound(src.loc, 'sound/items/bikehorn.ogg', 25, -3)
/*
for(var/turf/simulated/floor/T in view(affected_area, src.loc))
if(prob(75))
banana(T)
*/
var/i = 0
var/number = 0
for(var/direction in alldirs)
for(i = 0; i < 2; i++)
number++
var/obj/item/weapon/bananapeel/traitorpeel/peel = new /obj/item/weapon/bananapeel/traitorpeel(get_turf(src.loc))
/* var/direction = pick(alldirs)
var/spaces = pick(1;150, 2)
var/a = 0
for(a = 0; a < spaces; a++)
step(peel,direction)*/
var/a = 1
if(number & 2)
for(a = 1; a <= 2; a++)
sleep(1)
step(peel,direction)
else
sleep(1)
step(peel,direction)
del(src)
return
proc/banana(turf/T as turf)
if(!T || !istype(T))
return
if(locate(/obj/structure/grille) in T)
return
if(locate(/obj/structure/window) in T)
return
new /obj/item/weapon/bananapeel/traitorpeel(T)
/obj/item/weapon/bananapeel/traitorpeel
name = "banana peel"
desc = "A peel from a banana."
icon = 'icons/obj/items.dmi'
icon_state = "banana_peel"
item_state = "banana_peel"
w_class = 1.0
throwforce = 0
throw_speed = 4
throw_range = 20
HasEntered(AM as mob|obj)
var/burned = rand(2,5)
if(istype(AM, /mob/living))
var/mob/living/M = AM
if(ishuman(M))
if(isobj(M:shoes))
if(M:shoes.flags&NOSLIP)
return
else
M << "\red Your feet feel like they're on fire!"
M.take_overall_damage(0, max(0, (burned - 2)))
if(!istype(M, /mob/living/carbon/slime))
M.stop_pulling()
step(M, M.dir)
spawn(1) step(M, M.dir)
spawn(2) step(M, M.dir)
spawn(3) step(M, M.dir)
spawn(4) step(M, M.dir)
M.take_organ_damage(2) // Was 5 -- TLE
M << "\blue You slipped on \the [name]!"
playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
M.Weaken(10)
M.take_overall_damage(0, burned)
throw_impact(atom/hit_atom)
var/burned = rand(1,3)
if(istype(hit_atom ,/mob/living))
var/mob/living/M = hit_atom
M.take_organ_damage(0, burned)
return ..()

View File

@@ -178,7 +178,7 @@
* Bucher's cleaver * Bucher's cleaver
*/ */
/obj/item/weapon/butch /obj/item/weapon/butch
name = "butcher's Cleaver" name = "Butcher's Cleaver"
icon = 'icons/obj/kitchen.dmi' icon = 'icons/obj/kitchen.dmi'
icon_state = "butch" icon_state = "butch"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products." desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
@@ -192,6 +192,15 @@
origin_tech = "materials=1" origin_tech = "materials=1"
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/butch/meatcleaver
name = "Meat Cleaver"
icon_state = "mcleaver"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
force = 25.0
throwforce = 15.0
/obj/item/weapon/butch/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) /obj/item/weapon/butch/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..() return ..()

View File

@@ -124,4 +124,13 @@
..() ..()
new /obj/item/device/handtv(src) new /obj/item/device/handtv(src)
new /obj/item/weapon/storage/box/surveillance(src) new /obj/item/weapon/storage/box/surveillance(src)
return
/obj/item/weapon/storage/box/syndie_kit/conversion
name = "box (CK)"
/obj/item/weapon/storage/box/syndie_kit/conversion/New()
..()
new /obj/item/weapon/conversion_kit(src)
new /obj/item/ammo_magazine/a357(src)
return return

View File

@@ -9,6 +9,7 @@
* Wirecutters * Wirecutters
* Welding Tool * Welding Tool
* Crowbar * Crowbar
* Revolver Conversion Kit(made sense)
*/ */
/* /*
@@ -460,3 +461,25 @@
user << "Nothing to fix!" user << "Nothing to fix!"
else else
return ..() return ..()
/obj/item/weapon/conversion_kit
name = "\improper Revolver Conversion Kit"
desc = "A professional conversion kit used to convert any knock off revolver into the real deal capable of shooting lethal .357 rounds without the possibility of catastrophic failure"
icon = 'icons/obj/weapons.dmi'
icon_state = "kit"
flags = FPRINT | TABLEPASS | CONDUCT
w_class = 2.0
origin_tech = "combat=2"
var/open = 0
New()
..()
update_icon()
update_icon()
icon_state = "[initial(icon_state)]_[open]"
attack_self(mob/user as mob)
open = !open
user << "\blue You [open?"open" : "close"] the conversion kit."
update_icon()

View File

@@ -228,13 +228,14 @@
if(istype(used_weapon,/obj/item/weapon)) if(istype(used_weapon,/obj/item/weapon))
var/obj/item/weapon/W = used_weapon //Sharp objects will always embed if they do enough damage. var/obj/item/weapon/W = used_weapon //Sharp objects will always embed if they do enough damage.
if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) ) if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) )
organ.implants += W if(!istype(W, /obj/item/weapon/butch/meatcleaver))
visible_message("<span class='danger'>\The [W] sticks in the wound!</span>") organ.implants += W
W.add_blood(src) visible_message("<span class='danger'>\The [W] sticks in the wound!</span>")
if(ismob(W.loc)) W.add_blood(src)
var/mob/living/H = W.loc if(ismob(W.loc))
H.drop_item() var/mob/living/H = W.loc
W.loc = src H.drop_item()
W.loc = src
else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel. else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel.
if(prob(75) && damagetype == BRUTE) if(prob(75) && damagetype == BRUTE)

View File

@@ -116,10 +116,24 @@ emp_act
var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, src) var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, src)
if(user == src) // Attacking yourself can't miss if(user == src) // Attacking yourself can't miss
target_zone = user.zone_sel.selecting target_zone = user.zone_sel.selecting
if(!target_zone) if(!target_zone && !src.stat)
visible_message("\red <B>[user] misses [src] with \the [I]!") visible_message("\red <B>[user] misses [src] with \the [I]!")
return return
if(istype(I, /obj/item/weapon/butch/meatcleaver) && src.stat == DEAD && user.a_intent == "hurt")
var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(src.loc))
newmeat.name = src.real_name + newmeat.name
newmeat.subjectname = src.real_name
newmeat.subjectjob = src.job
newmeat.reagents.add_reagent ("nutriment", (src.nutrition / 15) / 3)
src.reagents.trans_to (newmeat, round ((src.reagents.total_volume) / 3, 1))
src.loc.add_blood(src)
--src.meatleft
user << "\red You hack off a chunk of meat from [src.name]"
if(!src.meatleft)
src.attack_log += "\[[time_stamp()]\] Was chopped up into meat by <b>[user]/[user.ckey]</b>"
user.attack_log += "\[[time_stamp()]\] Chopped up <b>[src]/[src.ckey]</b> into meat</b>"
msg_admin_attack("[user.name] ([user.ckey]) chopped up [src] ([src.ckey]) into meat (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
del(src)
var/datum/organ/external/affecting = get_organ(target_zone) var/datum/organ/external/affecting = get_organ(target_zone)
if (!affecting) if (!affecting)
return return

View File

@@ -55,3 +55,5 @@
var/xylophone = 0 //For the spoooooooky xylophone cooldown var/xylophone = 0 //For the spoooooooky xylophone cooldown
var/mob/remoteview_target = null var/mob/remoteview_target = null
var/meatleft = 3 //For chef item

View File

@@ -35,4 +35,6 @@
var/cameraFollow = null var/cameraFollow = null
var/tod = null // Time of death var/tod = null // Time of death
var/update_slimes = 1 var/update_slimes = 1
var/specialsauce = 0 //Has this person consumed enough special sauce? IF so they're a ticking time bomb of death.

View File

@@ -6,12 +6,12 @@
caliber = "38" caliber = "38"
origin_tech = "combat=2;materials=2" origin_tech = "combat=2;materials=2"
ammo_type = "/obj/item/ammo_casing/c38" ammo_type = "/obj/item/ammo_casing/c38"
var/perfect = 0
special_check(var/mob/living/carbon/human/M) special_check(var/mob/living/carbon/human/M)
if(caliber == initial(caliber)) if(caliber == initial(caliber))
return 1 return 1
if(prob(70 - (loaded.len * 10))) //minimum probability of 10, maximum of 60 if(!perfect && prob(70 - (loaded.len * 10))) //minimum probability of 10, maximum of 60
M << "<span class='danger'>[src] blows up in your face.</span>" M << "<span class='danger'>[src] blows up in your face.</span>"
M.take_organ_damage(0,20) M.take_organ_damage(0,20)
M.drop_item() M.drop_item()
@@ -38,8 +38,14 @@
return 1 return 1
attackby(var/obj/item/A as obj, mob/user as mob) attackby(var/obj/item/A as obj, mob/user as mob)
var/obj/item/weapon/conversion_kit/CK
..() ..()
if(istype(A, /obj/item/weapon/screwdriver)) if(isscrewdriver(A) || istype(A, /obj/item/weapon/conversion_kit))
if(istype(A, /obj/item/weapon/conversion_kit))
CK = A
if(!CK.open)
user << "<span class='notice'>This [CK.name] is useless unless you open it first. </span>"
return
if(caliber == "38") if(caliber == "38")
user << "<span class='notice'>You begin to reinforce the barrel of [src].</span>" user << "<span class='notice'>You begin to reinforce the barrel of [src].</span>"
if(loaded.len) if(loaded.len)
@@ -54,6 +60,8 @@
caliber = "357" caliber = "357"
desc = "The barrel and chamber assembly seems to have been modified." desc = "The barrel and chamber assembly seems to have been modified."
user << "<span class='warning'>You reinforce the barrel of [src]! Now it will fire .357 rounds.</span>" user << "<span class='warning'>You reinforce the barrel of [src]! Now it will fire .357 rounds.</span>"
if(CK && istype(CK))
perfect = 1
else else
user << "<span class='notice'>You begin to revert the modifications to [src].</span>" user << "<span class='notice'>You begin to revert the modifications to [src].</span>"
if(loaded.len) if(loaded.len)
@@ -68,6 +76,7 @@
caliber = "38" caliber = "38"
desc = initial(desc) desc = initial(desc)
user << "<span class='warning'>You remove the modifications on [src]! Now it will fire .38 rounds.</span>" user << "<span class='warning'>You remove the modifications on [src]! Now it will fire .38 rounds.</span>"
perfect = 0

View File

@@ -363,6 +363,29 @@ datum
..() ..()
return return
chefspecial
// Quiet and lethal, needs atleast 4 units in the person before they'll die
name = "Chef's Special"
id = "chefspecial"
description = "An extremely toxic chemical that will surely end in death."
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
custom_metabolism = 0.39
on_mob_life(var/mob/living/M as mob)
var/random = rand(150,180)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
if(0 to 5)
..()
if(data >= random)
if(M.stat != DEAD)
M.death(0)
M.attack_log += "\[[time_stamp()]\]<font color='red'>Died a quick and painless death by <font color='green'>Chef Excellence's Special Sauce</font>.</font>"
data++
return
minttoxin minttoxin
name = "Mint Toxin" name = "Mint Toxin"
id = "minttoxin" id = "minttoxin"

View File

@@ -126,6 +126,9 @@
if("sugar") if("sugar")
name = "Sugar" name = "Sugar"
desc = "Tastey space sugar!" desc = "Tastey space sugar!"
if("chefspecial")
name = "Chef Excellence's Special Sauce"
desc = "A potent sauce distilled from the toxin glands of 1000 Space Carp."
else else
name = "Misc Condiment Bottle" name = "Misc Condiment Bottle"
if (reagents.reagent_list.len==1) if (reagents.reagent_list.len==1)
@@ -172,4 +175,13 @@
volume = 20 volume = 20
New() New()
..() ..()
reagents.add_reagent("blackpepper", 20) reagents.add_reagent("blackpepper", 20)
/obj/item/weapon/reagent_containers/food/condiment/syndisauce
name = "Chef Excellence's Special Sauce"
desc = "A potent sauce distilled from the toxin glands of 1000 Space Carp with an extra touch of LSD because why not?"
amount_per_transfer_from_this = 1
volume = 20
New()
..()
reagents.add_reagent("chefspecial", 20)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 32 KiB