mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-27 23:27:34 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into explosive
Conflicts: code/modules/mob/living/carbon/carbon.dm code/modules/mob/living/carbon/carbon_defines.dm code/modules/mob/living/carbon/human/life.dm code/modules/reagents/Chemistry-Goon-420BlazeIt.dm code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm
This commit is contained in:
@@ -816,6 +816,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
|
||||
for(var/mob/M in player_list)
|
||||
if(isobserver(M) && M.client && (M.client.prefs.toggles & CHAT_GHOSTPDA))
|
||||
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>")
|
||||
|
||||
if (!P.silent)
|
||||
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
@@ -837,9 +840,23 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
else
|
||||
U << "<span class='notice'>ERROR: Server isn't responding.</span>"
|
||||
|
||||
/obj/item/device/pda/AltClick()
|
||||
..()
|
||||
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
if(can_use(usr))
|
||||
if(id)
|
||||
remove_id()
|
||||
else
|
||||
usr << "<span class='notice'>This PDA does not have an ID in it.</span>"
|
||||
else
|
||||
usr << "<span class='notice'>You cannot do this while restrained.</span>"
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_id()
|
||||
set category = "Object"
|
||||
set name = "Remove id"
|
||||
set name = "Eject ID"
|
||||
set src in usr
|
||||
|
||||
if(issilicon(usr))
|
||||
@@ -856,7 +873,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_pen()
|
||||
set category = "Object"
|
||||
set name = "Remove pen"
|
||||
set name = "Remove Pen"
|
||||
set src in usr
|
||||
|
||||
if(issilicon(usr))
|
||||
|
||||
@@ -36,7 +36,7 @@ MASS SPECTROMETER
|
||||
|
||||
/obj/item/device/t_scanner/proc/scan()
|
||||
|
||||
for(var/turf/T in range(1, src.loc) )
|
||||
for(var/turf/T in range(2, src.loc) )
|
||||
|
||||
if(!T.intact)
|
||||
continue
|
||||
|
||||
@@ -119,23 +119,13 @@
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
if (!multiplier ||(multiplier <= 0)) //href protection
|
||||
return
|
||||
if (src.get_amount() < R.req_amount*multiplier)
|
||||
if (R.req_amount*multiplier>1)
|
||||
usr << "<span class='danger'>You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!</span>"
|
||||
else
|
||||
usr << "<span class='danger'>You haven't got enough [src] to build \the [R.title]!</span>"
|
||||
return
|
||||
if (R.one_per_turf && (locate(R.result_type) in usr.loc))
|
||||
usr << "<span class='danger'>There is another [R.title] here!</span>"
|
||||
return
|
||||
if (R.on_floor && !istype(usr.loc, /turf/simulated/floor))
|
||||
usr << "<span class='danger'>\The [R.title] must be constructed on the floor!</span>"
|
||||
if(!building_checks(R, multiplier))
|
||||
return
|
||||
if (R.time)
|
||||
usr << "<span class='notice'>Building [R.title] ...</span>"
|
||||
if (!do_after(usr, R.time))
|
||||
return
|
||||
if (src.get_amount() < R.req_amount*multiplier)
|
||||
if(!building_checks(R, multiplier))
|
||||
return
|
||||
|
||||
var/atom/O = new R.result_type( usr.loc )
|
||||
@@ -167,6 +157,21 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/stack/proc/building_checks(datum/stack_recipe/R, multiplier)
|
||||
if (src.get_amount() < R.req_amount*multiplier)
|
||||
if (R.req_amount*multiplier>1)
|
||||
usr << "<span class='danger'>You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!</span>"
|
||||
else
|
||||
usr << "<span class='danger'>You haven't got enough [src] to build \the [R.title]!</span>"
|
||||
return 0
|
||||
if (R.one_per_turf && (locate(R.result_type) in usr.loc))
|
||||
usr << "<span class='danger'>There is another [R.title] here!</span>"
|
||||
return 0
|
||||
if (R.on_floor && !istype(usr.loc, /turf/simulated/floor))
|
||||
usr << "<span class='danger'>\The [R.title] must be constructed on the floor!</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/stack/proc/use(var/used) // return 0 = borked; return 1 = had enough
|
||||
if (is_cyborg)
|
||||
return source.use_charge(used * cost)
|
||||
|
||||
@@ -686,7 +686,43 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/toy/owl
|
||||
name = "owl action figure"
|
||||
desc = "An action figure modeled after 'The Owl', defender of justice."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "owlprize"
|
||||
w_class = 2.0
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/owl/attack_self(mob/user)
|
||||
if(!cooldown) //for the sanity of everyone
|
||||
var/message = pick("You won't get away this time, Griffin!", "Stop right there, criminal!", "Hoot! Hoot!", "I am the night!")
|
||||
user << "<span class='notice'>You pull the string on the [src].</span>"
|
||||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||||
src.loc.visible_message("<span class='danger'>\icon[src] [message]</span>")
|
||||
cooldown = 1
|
||||
spawn(30) cooldown = 0
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/toy/griffin
|
||||
name = "griffin action figure"
|
||||
desc = "An action figure modeled after 'The Griffin', criminal mastermind."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "griffinprize"
|
||||
w_class = 2.0
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/griffin/attack_self(mob/user)
|
||||
if(!cooldown) //for the sanity of everyone
|
||||
var/message = pick("You can't stop me, Owl!", "My plan is flawless! The vault is mine!", "Caaaawwww!", "You will never catch me!")
|
||||
user << "<span class='notice'>You pull the string on the [src].</span>"
|
||||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||||
src.loc.visible_message("<span class='danger'>\icon[src] [message]</span>")
|
||||
cooldown = 1
|
||||
spawn(30) cooldown = 0
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
icon_state = "syndi_cakes"
|
||||
|
||||
/obj/item/trash/waffles
|
||||
name = "waffles"
|
||||
name = "waffles tray"
|
||||
icon_state = "waffles"
|
||||
|
||||
/obj/item/trash/plate
|
||||
|
||||
@@ -439,6 +439,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
attack_verb = null
|
||||
var/lit = 0
|
||||
|
||||
/obj/item/weapon/lighter/grayscale
|
||||
name = "cheap lighter"
|
||||
desc ="A cheap-as-free lighter."
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "lighter-off"
|
||||
item_state = "lighter-off"
|
||||
icon_on = "lighter-on"
|
||||
icon_off = "lighter-off"
|
||||
|
||||
/obj/item/weapon/lighter/grayscale/New()
|
||||
var/icon/overlay = new /icon('icons/obj/cigarettes.dmi',"lighter-overlay")
|
||||
overlay.ColorTone(color2hex(randomColor(1)))
|
||||
overlays += overlay
|
||||
|
||||
/obj/item/weapon/lighter/zippo
|
||||
name = "\improper Zippo lighter"
|
||||
desc = "The zippo."
|
||||
@@ -447,6 +461,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_on = "zippoon"
|
||||
icon_off = "zippo"
|
||||
|
||||
/obj/item/weapon/lighter/update_icon()
|
||||
icon_state = lit ? icon_on : icon_off
|
||||
|
||||
/obj/item/weapon/lighter/random
|
||||
New()
|
||||
var/color = pick("r","c","y","g")
|
||||
@@ -458,8 +475,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(user.r_hand == src || user.l_hand == src)
|
||||
if(!lit)
|
||||
lit = 1
|
||||
icon_state = icon_on
|
||||
item_state = icon_on
|
||||
update_icon()
|
||||
force = 5
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/items/welder.ogg'
|
||||
@@ -478,8 +494,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
SSobj.processing |= src
|
||||
else
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
update_icon()
|
||||
hitsound = "swing_hit"
|
||||
force = 0
|
||||
attack_verb = null //human_defense.dm takes care of it
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
/obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user)
|
||||
if(!target.handcuffed)
|
||||
user.drop_item()
|
||||
//target.throw_alert("handcuffed", src) // Can't do this because escaping cuffs isn't standardized. Also zipties.
|
||||
if(trashtype)
|
||||
target.handcuffed = new trashtype(target)
|
||||
qdel(src)
|
||||
|
||||
@@ -168,11 +168,12 @@
|
||||
|
||||
/obj/item/weapon/implant/loyalty/implanted(mob/target)
|
||||
..()
|
||||
if(target.mind in ticker.mode.head_revolutionaries)
|
||||
if((target.mind in ticker.mode.head_revolutionaries) || (target.mind in ticker.mode.A_bosses) || (target.mind in ticker.mode.B_bosses))
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
|
||||
return 0
|
||||
if(target.mind in ticker.mode.revolutionaries)
|
||||
if((target.mind in ticker.mode.revolutionaries) || (target.mind in ticker.mode.A_gangsters) || (target.mind in ticker.mode.B_gangsters))
|
||||
ticker.mode.remove_revolutionary(target.mind)
|
||||
ticker.mode.remove_gangster(target.mind, exclude_bosses=0)
|
||||
target << "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>"
|
||||
return 1
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
name = "potato battery"
|
||||
desc = "A rechargable starch based power cell."
|
||||
origin_tech = "powerstorage=1"
|
||||
icon = 'icons/obj/power.dmi' //'icons/obj/harvest.dmi'
|
||||
icon = 'icons/obj/power.dmi' //'icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "potato_cell" //"potato_battery"
|
||||
charge = 100
|
||||
maxcharge = 300
|
||||
|
||||
@@ -124,6 +124,37 @@
|
||||
icon_state = "engiepack"
|
||||
item_state = "engiepack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/botany
|
||||
name = "botany backpack"
|
||||
desc = "It's a backpack made of all-natural fibers."
|
||||
icon_state = "botpack"
|
||||
item_state = "botpack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/chemistry
|
||||
name = "chemistry backpack"
|
||||
desc = "A backpack specially designed to repel stains and hazardous liquids."
|
||||
icon_state = "chempack"
|
||||
item_state = "chempack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/genetics
|
||||
name = "genetics backpack"
|
||||
desc = "A bag designed to be super tough, just in case someone hulks out on you."
|
||||
icon_state = "genepack"
|
||||
item_state = "genepack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/science
|
||||
name = "science backpack"
|
||||
desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma."
|
||||
icon_state = "toxpack"
|
||||
item_state = "toxpack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/virology
|
||||
name = "virology backpack"
|
||||
desc = "A backpack made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey."
|
||||
icon_state = "viropack"
|
||||
item_state = "viropack"
|
||||
|
||||
|
||||
/*
|
||||
* Satchel Types
|
||||
*/
|
||||
@@ -158,21 +189,31 @@
|
||||
name = "virologist satchel"
|
||||
desc = "A sterile satchel with virologist colours."
|
||||
icon_state = "satchel-vir"
|
||||
item_state = "satchel-vir"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_chem
|
||||
name = "chemist satchel"
|
||||
desc = "A sterile satchel with chemist colours."
|
||||
icon_state = "satchel-chem"
|
||||
item_state = "satchel-chem"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_gen
|
||||
name = "geneticist satchel"
|
||||
desc = "A sterile satchel with geneticist colours."
|
||||
icon_state = "satchel-gen"
|
||||
item_state = "satchel-gen"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_tox
|
||||
name = "scientist satchel"
|
||||
desc = "Useful for holding research materials."
|
||||
icon_state = "satchel-tox"
|
||||
item_state = "satchel-tox"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_hyd
|
||||
name = "botanist satchel"
|
||||
desc = "A satchel made of all natural fibers."
|
||||
icon_state = "satchel-hyd"
|
||||
item_state = "satchel-hyd"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_sec
|
||||
name = "security satchel"
|
||||
@@ -180,11 +221,6 @@
|
||||
icon_state = "satchel-sec"
|
||||
item_state = "securitypack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_hyd
|
||||
name = "hydroponics satchel"
|
||||
desc = "A green satchel for plant related work."
|
||||
icon_state = "satchel_hyd"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_cap
|
||||
name = "captain's satchel"
|
||||
desc = "An exclusive satchel for Nanotrasen officers."
|
||||
|
||||
@@ -79,6 +79,14 @@
|
||||
max_w_class = 3
|
||||
can_hold = list(/obj/item/weapon/ore)
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/holding //miners, your messiah has arrived
|
||||
name = "mining satchel of holding"
|
||||
desc = "A revolution in convenience, this satchel allows for infinite ore storage. It's been outfitted with anti-malfunction safety measures."
|
||||
storage_slots = INFINITY
|
||||
max_combined_w_class = INFINITY
|
||||
origin_tech = "bluespace=3"
|
||||
icon_state = "satchel_bspace"
|
||||
|
||||
|
||||
// -----------------------------
|
||||
// Plant bag
|
||||
@@ -86,7 +94,7 @@
|
||||
|
||||
/obj/item/weapon/storage/bag/plants
|
||||
name = "plant bag"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "plantbag"
|
||||
storage_slots = 50; //the number of plant pieces it can carry.
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/item/weapon/watertank
|
||||
name = "backpack water tank"
|
||||
desc = "A S.U.N.S.H.I.N.E. brand watertank backpack with nozzle to water plants."
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "waterbackpack"
|
||||
item_state = "waterbackpack"
|
||||
w_class = 4.0
|
||||
@@ -106,7 +106,7 @@
|
||||
/obj/item/weapon/reagent_containers/spray/mister
|
||||
name = "water mister"
|
||||
desc = "A mister nozzle attached to a water tank."
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "mister"
|
||||
item_state = "mister"
|
||||
w_class = 4.0
|
||||
@@ -165,7 +165,7 @@
|
||||
/obj/item/weapon/reagent_containers/spray/mister/janitor
|
||||
name = "janitor spray nozzle"
|
||||
desc = "A janitorial spray nozzle attached to a watertank, designed to clean up large messes."
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "misterjani"
|
||||
item_state = "misterjani"
|
||||
amount_per_transfer_from_this = 5
|
||||
@@ -203,7 +203,7 @@
|
||||
/obj/item/weapon/extinguisher/mini/nozzle
|
||||
name = "extinguisher nozzle"
|
||||
desc = "A heavy duty nozzle attached to a firefighter's backpack tank."
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "atmos_nozzle"
|
||||
item_state = "nozzleatmos"
|
||||
safety = 0
|
||||
@@ -290,7 +290,7 @@
|
||||
if(!Adj|| !istype(target, /turf))
|
||||
return
|
||||
if(metal_synthesis_cooldown < 5)
|
||||
var/obj/effect/effect/foam/F = new /obj/effect/effect/foam(get_turf(target), 1)
|
||||
var/obj/effect/effect/foam/metal/F = new /obj/effect/effect/foam/metal(get_turf(target))
|
||||
F.amount = 0
|
||||
metal_synthesis_cooldown++
|
||||
spawn(100)
|
||||
|
||||
Reference in New Issue
Block a user