mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Commiting what i've got so far for the new traitor items
This commit is contained in:
@@ -571,6 +571,7 @@
|
||||
#include "code\game\objects\items\weapons\weaponry.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\clowngrenade.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\grenade.dm"
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
spawn(0)
|
||||
var/obj/effect/expl_particles/expl = new /obj/effect/expl_particles(src.location)
|
||||
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)
|
||||
step(expl,direct)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var/list/uplink_items = list()
|
||||
|
||||
/proc/get_uplink_items()
|
||||
/proc/get_uplink_items(var/job = null)
|
||||
// If not already initialized..
|
||||
if(!uplink_items.len)
|
||||
|
||||
@@ -25,7 +25,6 @@ var/list/uplink_items = list()
|
||||
uplink_items[I.category] += I
|
||||
|
||||
for(var/datum/uplink_item/I in last)
|
||||
|
||||
if(!uplink_items[I.category])
|
||||
uplink_items[I.category] = list()
|
||||
|
||||
@@ -45,6 +44,7 @@ var/list/uplink_items = list()
|
||||
var/last = 0 // Appear last
|
||||
var/abstract = 0
|
||||
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)
|
||||
U.uses -= max(cost, 0)
|
||||
@@ -297,6 +297,42 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/imp_compress
|
||||
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
|
||||
|
||||
/datum/uplink_item/badass
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
item_state = ""
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
/*unused
|
||||
/obj/item/weapon/camera_bug/attack_self(mob/usr as mob)
|
||||
var/list/cameras = new/list()
|
||||
for (var/obj/machinery/camera/C in cameranet.cameras)
|
||||
@@ -545,7 +545,7 @@
|
||||
if (usr.stat == 2) return
|
||||
|
||||
usr.client.eye = target
|
||||
|
||||
*/
|
||||
|
||||
/obj/item/weapon/syntiflesh
|
||||
name = "syntiflesh"
|
||||
|
||||
@@ -678,9 +678,10 @@
|
||||
|
||||
if(!(usr)) //BS12 EDIT
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain))|| !isMoMMI(usr))//Is humanoid, and is not a brain
|
||||
usr << "\red You can't pick things up!"
|
||||
return
|
||||
if(!istype(usr, /mob/living/carbon) && !isMoMMI(usr))//Is not a carbon being or MoMMI
|
||||
usr << "You can't pick things up!"
|
||||
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
|
||||
usr << "\red You can't pick things up!"
|
||||
return
|
||||
|
||||
@@ -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/show_description = null
|
||||
var/active = 0
|
||||
var/job = null
|
||||
|
||||
/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
|
||||
|
||||
//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>"
|
||||
|
||||
// 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
|
||||
for(var/datum/uplink_item/item in buyable_items[category])
|
||||
i++
|
||||
|
||||
var/cost_text = ""
|
||||
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)
|
||||
cost_text = "([item.cost])"
|
||||
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)
|
||||
|
||||
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
|
||||
// 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>"
|
||||
|
||||
96
code/game/objects/items/weapons/grenades/clowngrenade.dm
Normal file
96
code/game/objects/items/weapons/grenades/clowngrenade.dm
Normal 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 ..()
|
||||
@@ -178,7 +178,7 @@
|
||||
* Bucher's cleaver
|
||||
*/
|
||||
/obj/item/weapon/butch
|
||||
name = "butcher's Cleaver"
|
||||
name = "Butcher's Cleaver"
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "butch"
|
||||
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"
|
||||
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)
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
return ..()
|
||||
|
||||
@@ -124,4 +124,13 @@
|
||||
..()
|
||||
new /obj/item/device/handtv(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
|
||||
@@ -9,6 +9,7 @@
|
||||
* Wirecutters
|
||||
* Welding Tool
|
||||
* Crowbar
|
||||
* Revolver Conversion Kit(made sense)
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -460,3 +461,25 @@
|
||||
user << "Nothing to fix!"
|
||||
else
|
||||
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()
|
||||
|
||||
@@ -228,13 +228,14 @@
|
||||
if(istype(used_weapon,/obj/item/weapon))
|
||||
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) ) )
|
||||
organ.implants += W
|
||||
visible_message("<span class='danger'>\The [W] sticks in the wound!</span>")
|
||||
W.add_blood(src)
|
||||
if(ismob(W.loc))
|
||||
var/mob/living/H = W.loc
|
||||
H.drop_item()
|
||||
W.loc = src
|
||||
if(!istype(W, /obj/item/weapon/butch/meatcleaver))
|
||||
organ.implants += W
|
||||
visible_message("<span class='danger'>\The [W] sticks in the wound!</span>")
|
||||
W.add_blood(src)
|
||||
if(ismob(W.loc))
|
||||
var/mob/living/H = W.loc
|
||||
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.
|
||||
if(prob(75) && damagetype == BRUTE)
|
||||
|
||||
@@ -116,10 +116,24 @@ emp_act
|
||||
var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, src)
|
||||
if(user == src) // Attacking yourself can't miss
|
||||
target_zone = user.zone_sel.selecting
|
||||
if(!target_zone)
|
||||
if(!target_zone && !src.stat)
|
||||
visible_message("\red <B>[user] misses [src] with \the [I]!")
|
||||
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)
|
||||
if (!affecting)
|
||||
return
|
||||
|
||||
@@ -55,3 +55,5 @@
|
||||
var/xylophone = 0 //For the spoooooooky xylophone cooldown
|
||||
|
||||
var/mob/remoteview_target = null
|
||||
|
||||
var/meatleft = 3 //For chef item
|
||||
@@ -35,4 +35,6 @@
|
||||
var/cameraFollow = null
|
||||
|
||||
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.
|
||||
@@ -6,12 +6,12 @@
|
||||
caliber = "38"
|
||||
origin_tech = "combat=2;materials=2"
|
||||
ammo_type = "/obj/item/ammo_casing/c38"
|
||||
|
||||
var/perfect = 0
|
||||
|
||||
special_check(var/mob/living/carbon/human/M)
|
||||
if(caliber == initial(caliber))
|
||||
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.take_organ_damage(0,20)
|
||||
M.drop_item()
|
||||
@@ -38,8 +38,14 @@
|
||||
return 1
|
||||
|
||||
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")
|
||||
user << "<span class='notice'>You begin to reinforce the barrel of [src].</span>"
|
||||
if(loaded.len)
|
||||
@@ -54,6 +60,8 @@
|
||||
caliber = "357"
|
||||
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>"
|
||||
if(CK && istype(CK))
|
||||
perfect = 1
|
||||
else
|
||||
user << "<span class='notice'>You begin to revert the modifications to [src].</span>"
|
||||
if(loaded.len)
|
||||
@@ -68,6 +76,7 @@
|
||||
caliber = "38"
|
||||
desc = initial(desc)
|
||||
user << "<span class='warning'>You remove the modifications on [src]! Now it will fire .38 rounds.</span>"
|
||||
perfect = 0
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -363,6 +363,29 @@ datum
|
||||
..()
|
||||
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
|
||||
name = "Mint Toxin"
|
||||
id = "minttoxin"
|
||||
|
||||
@@ -126,6 +126,9 @@
|
||||
if("sugar")
|
||||
name = "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
|
||||
name = "Misc Condiment Bottle"
|
||||
if (reagents.reagent_list.len==1)
|
||||
@@ -172,4 +175,13 @@
|
||||
volume = 20
|
||||
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 |
Reference in New Issue
Block a user