mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Bomberman Update
- Added a new trait to cameras: Hardened. Hardened is a modifier to the chance a camera will be affected by an EMP. By default, all cameras are affected 100% of the time by a full strength EMP. Will add some hardening to existing cameras once some pending map changes get finished. - New R&D Invention: LARGE GRENADES. You can now put basically any container (except blender jugs) into it and they affect a larger area. Want a 100 x 100 unit grenade? You now can! The basic casings are made in a protolathe (Materials 3, Combat 3). Unless you've developed them a lot, you'll occasionally get duds (which just spits out the beakers). Duds can be deconstructed in the DA to improve reliability. - On a related note, an unintended side effect of making large beakers hold more has been fixed. - Constructible frames, after the circuit board has been inserted, can be right-click/examined to reveal what parts it needs to be finished. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1146 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -4,8 +4,8 @@
|
||||
|
||||
///////////////////////////////Grenades
|
||||
/obj/item/weapon/chem_grenade
|
||||
name = "metal casing"
|
||||
icon_state = "chemg1"
|
||||
name = "grenade"
|
||||
icon_state = "chemg"
|
||||
icon = 'chemical.dmi'
|
||||
item_state = "flashbang"
|
||||
w_class = 2.0
|
||||
@@ -13,10 +13,12 @@
|
||||
var/stage = 0
|
||||
var/state = 0
|
||||
var/list/beakers = new/list()
|
||||
var/list/allowed_containers = list("/obj/item/weapon/reagent_containers/glass/beaker", "/obj/item/weapon/reagent_containers/glass/dispenser")
|
||||
var/list/disallowed_container = "/obj/item/weapon/reagent_containers/glass/large"
|
||||
var/affected_area = 3
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
|
||||
|
||||
New()
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
reagents = R
|
||||
@@ -27,54 +29,65 @@
|
||||
user << "\blue You add [W] to the metal casing."
|
||||
playsound(src.loc, 'Screwdriver2.ogg', 25, -3)
|
||||
del(W) //Okay so we're not really adding anything here. cheating.
|
||||
icon_state = "chemg2"
|
||||
name = "unsecured grenade"
|
||||
icon_state = initial(icon_state)+"_ass"
|
||||
stage = 1
|
||||
else if(istype(W,/obj/item/weapon/screwdriver) && stage == 1)
|
||||
if(beakers.len)
|
||||
user << "\blue You lock the assembly."
|
||||
playsound(src.loc, 'Screwdriver.ogg', 25, -3)
|
||||
name = "grenade"
|
||||
icon_state = "chemg3"
|
||||
icon_state = initial(icon_state)+"_locked"
|
||||
stage = 2
|
||||
else
|
||||
user << "\red You need to add at least one beaker before locking the assembly."
|
||||
else if ((istype(W,/obj/item/weapon/reagent_containers/glass/beaker) || istype(W, /obj/item/weapon/reagent_containers/glass/dispenser)) && stage == 1)
|
||||
if(beakers.len == 2)
|
||||
user << "\red The grenade can not hold more containers."
|
||||
return
|
||||
else
|
||||
if(W.reagents.total_volume)
|
||||
user << "\blue You add \the [W] to the assembly."
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
beakers += W
|
||||
else
|
||||
var/found = 0
|
||||
for(var/container_type in allowed_containers)
|
||||
if(istype(W, text2path(container_type)))
|
||||
found = 1
|
||||
break
|
||||
if(disallowed_container)
|
||||
if(istype(W, disallowed_container))
|
||||
return
|
||||
if(found)
|
||||
if(beakers.len == 2)
|
||||
user << "\red The grenade can not hold more containers."
|
||||
return
|
||||
else
|
||||
user << "\red \the [W] is empty."
|
||||
if(W.reagents.total_volume)
|
||||
user << "\blue You add \the [W] to the assembly."
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
beakers += W
|
||||
else
|
||||
user << "\red \the [W] is empty."
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
||||
if (istype(target, /obj/item/weapon/storage)) return ..()
|
||||
if (!src.state && stage == 2)
|
||||
if (!src.state && stage == 2 && !crit_fail)
|
||||
user << "\red You prime the grenade! 3 seconds!"
|
||||
message_admins("[key_name_admin(user)] used a chemistry grenade ([src.name]).")
|
||||
src.state = 1
|
||||
src.icon_state = "chemg4"
|
||||
src.icon_state = initial(icon_state)+"_armed"
|
||||
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
|
||||
spawn(30)
|
||||
explode()
|
||||
user.drop_item()
|
||||
var/t = (isturf(target) ? target : target.loc)
|
||||
walk_towards(src, t, 3)
|
||||
else if(crit_fail)
|
||||
user << "\red This grenade is a dud and unusable!"
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if (!src.state && stage == 2)
|
||||
if (!src.state && stage == 2 && !crit_fail)
|
||||
user << "\red You prime the grenade! 3 seconds!"
|
||||
message_admins("[key_name_admin(user)] used a chemistry grenade ([src.name]).")
|
||||
src.state = 1
|
||||
src.icon_state = "chemg4"
|
||||
src.icon_state = initial(icon_state)+"_armed"
|
||||
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
|
||||
spawn(30)
|
||||
explode()
|
||||
else if(crit_fail)
|
||||
user << "\red This grenade is a dud and unusable!"
|
||||
|
||||
attack_hand()
|
||||
walk(src,0)
|
||||
@@ -84,46 +97,59 @@
|
||||
|
||||
proc
|
||||
explode()
|
||||
var/has_reagents = 0
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
|
||||
if(G.reagents.total_volume) has_reagents = 1
|
||||
if(reliability)
|
||||
var/has_reagents = 0
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
|
||||
if(G.reagents.total_volume) has_reagents = 1
|
||||
|
||||
if(!has_reagents)
|
||||
playsound(src.loc, 'Screwdriver2.ogg', 50, 1)
|
||||
state = 0
|
||||
return
|
||||
if(!has_reagents)
|
||||
playsound(src.loc, 'Screwdriver2.ogg', 50, 1)
|
||||
state = 0
|
||||
return
|
||||
|
||||
playsound(src.loc, 'bamf.ogg', 50, 1)
|
||||
playsound(src.loc, 'bamf.ogg', 50, 1)
|
||||
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
|
||||
if(src.reagents.total_volume) //The possible reactions didnt use up all reagents.
|
||||
var/datum/effects/system/steam_spread/steam = new /datum/effects/system/steam_spread()
|
||||
steam.set_up(10, 0, get_turf(src))
|
||||
steam.attach(src)
|
||||
steam.start()
|
||||
if(src.reagents.total_volume) //The possible reactions didnt use up all reagents.
|
||||
var/datum/effects/system/steam_spread/steam = new /datum/effects/system/steam_spread()
|
||||
steam.set_up(10, 0, get_turf(src))
|
||||
steam.attach(src)
|
||||
steam.start()
|
||||
|
||||
for(var/atom/A in view(3, src.loc))
|
||||
if( A == src ) continue
|
||||
src.reagents.reaction(A, 1, 10)
|
||||
for(var/atom/A in view(affected_area, src.loc))
|
||||
if( A == src ) continue
|
||||
src.reagents.reaction(A, 1, 10)
|
||||
|
||||
|
||||
invisibility = 100 //Why am i doing this?
|
||||
spawn(50) //To make sure all reagents can work
|
||||
del(src) //correctly before deleting the grenade.
|
||||
invisibility = 100 //Why am i doing this?
|
||||
spawn(50) //To make sure all reagents can work
|
||||
del(src) //correctly before deleting the grenade.
|
||||
else
|
||||
icon_state = initial(icon_state) + "_locked"
|
||||
crit_fail = 1
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
|
||||
G.loc = get_turf(src.loc)
|
||||
|
||||
/obj/item/weapon/chem_grenade/large
|
||||
name = "Large Chem Grenade"
|
||||
desc = "An oversized grenade that affects a larger area."
|
||||
icon_state = "large_grenade"
|
||||
allowed_containers = list("/obj/item/weapon/reagent_containers/glass")
|
||||
disallowed_container = "/obj/item/weapon/reagent_containers/glass/blender_jug"
|
||||
origin_tech = "combat=3;materials=3"
|
||||
affected_area = 4
|
||||
|
||||
/obj/item/weapon/chem_grenade/metalfoam
|
||||
name = "Metal-Foam Grenade"
|
||||
desc = "Used for emergency sealing of air breaches."
|
||||
icon_state = "chemg3"
|
||||
stage = 2
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/B2 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("aluminium", 30)
|
||||
B2.reagents.add_reagent("foaming_agent", 10)
|
||||
@@ -131,17 +157,17 @@
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
icon_state = "chemg_locked"
|
||||
|
||||
/obj/item/weapon/chem_grenade/incendiary
|
||||
name = "Incendiary Grenade"
|
||||
desc = "Used for clearing rooms of living things."
|
||||
icon_state = "chemg3"
|
||||
stage = 2
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/B2 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("aluminium", 25)
|
||||
B2.reagents.add_reagent("plasma", 25)
|
||||
@@ -149,17 +175,17 @@
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
icon_state = "chemg_locked"
|
||||
|
||||
/obj/item/weapon/chem_grenade/cleaner
|
||||
name = "Cleaner Grenade"
|
||||
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
|
||||
icon_state = "chemg3"
|
||||
stage = 2
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/B2 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("fluorosurfactant", 30)
|
||||
B2.reagents.add_reagent("water", 10)
|
||||
@@ -167,6 +193,7 @@
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
icon_state = "chemg_locked"
|
||||
/*
|
||||
/obj/item/weapon/chem_grenade/poo
|
||||
name = "poo grenade"
|
||||
|
||||
@@ -64,11 +64,11 @@
|
||||
anchored = 1.0
|
||||
var/invuln = null
|
||||
var/bugged = 0
|
||||
var/hardened = 0
|
||||
use_power = 2
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 10
|
||||
|
||||
|
||||
/obj/machinery/dispenser
|
||||
desc = "A simple yet bulky one-way storage device for gas tanks. Holds 10 plasma and 10 oxygen tanks."
|
||||
name = "Tank Storage Unit"
|
||||
|
||||
@@ -232,24 +232,25 @@
|
||||
return
|
||||
|
||||
/obj/machinery/camera/emp_act(severity)
|
||||
icon_state = "cameraemp"
|
||||
network = null //Not the best way but it will do. I think.
|
||||
spawn(900)
|
||||
network = initial(network)
|
||||
icon_state = initial(icon_state)
|
||||
for(var/mob/living/silicon/ai/O in world)
|
||||
if (O.current == src)
|
||||
O.cancel_camera()
|
||||
O << "Your connection to the camera has been lost."
|
||||
for(var/mob/O in world)
|
||||
if (istype(O.machine, /obj/machinery/computer/security))
|
||||
var/obj/machinery/computer/security/S = O.machine
|
||||
if (S.current == src)
|
||||
O.machine = null
|
||||
S.current = null
|
||||
O.reset_view(null)
|
||||
O << "The screen bursts into static."
|
||||
..()
|
||||
if(prob(100/(hardened + severity)))
|
||||
icon_state = "cameraemp"
|
||||
network = null //Not the best way but it will do. I think.
|
||||
spawn(900)
|
||||
network = initial(network)
|
||||
icon_state = initial(icon_state)
|
||||
for(var/mob/living/silicon/ai/O in world)
|
||||
if (O.current == src)
|
||||
O.cancel_camera()
|
||||
O << "Your connection to the camera has been lost."
|
||||
for(var/mob/O in world)
|
||||
if (istype(O.machine, /obj/machinery/computer/security))
|
||||
var/obj/machinery/computer/security/S = O.machine
|
||||
if (S.current == src)
|
||||
O.machine = null
|
||||
S.current = null
|
||||
O.reset_view(null)
|
||||
O << "The screen bursts into static."
|
||||
..()
|
||||
|
||||
/obj/machinery/camera/ex_act(severity)
|
||||
if(src.invuln)
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
list/req_components = null
|
||||
powernet = null
|
||||
list/records = null
|
||||
frame_desc = null
|
||||
|
||||
/obj/item/weapon/circuitboard/security
|
||||
name = "Circuit board (Security)"
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
list/req_components = null
|
||||
state = 1
|
||||
|
||||
/*
|
||||
To Do: Add deconstruct code to constructable machines. A marvelous idea, I know.
|
||||
*/
|
||||
|
||||
/obj/machinery/constructable_frame/machine_frame
|
||||
attackby(obj/item/P as obj, mob/user as mob)
|
||||
if(P.crit_fail)
|
||||
@@ -52,6 +48,7 @@ To Do: Add deconstruct code to constructable machines. A marvelous idea, I know.
|
||||
req_components = circuit.req_components.Copy()
|
||||
for(var/A in circuit.req_components)
|
||||
req_components[A] = circuit.req_components[A]
|
||||
if(circuit.frame_desc) desc = circuit.frame_desc
|
||||
else
|
||||
user << "\red This frame does not accept circuit boards of this type!"
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
@@ -74,6 +71,7 @@ To Do: Add deconstruct code to constructable machines. A marvelous idea, I know.
|
||||
user << "\blue You remove the circuit board and other components."
|
||||
for(var/obj/item/weapon/W in components)
|
||||
W.loc = src.loc
|
||||
desc = initial(desc)
|
||||
req_components = null
|
||||
components = null
|
||||
icon_state = "box_1"
|
||||
@@ -128,6 +126,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
|
||||
board_type = "machine"
|
||||
origin_tech = "magnets=2;materials=2"
|
||||
frame_desc = "Requires 2 Scanning Modules, 1 Manipulator, and 1 Micro-Laser."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -138,6 +137,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/autolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = "materials=3"
|
||||
frame_desc = "Requires 3 Matter Bins, 1 Manipulator, and 1 Console Screen."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 3,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -148,6 +148,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/r_n_d/protolathe"
|
||||
board_type = "machine"
|
||||
origin_tech = "materials=2"
|
||||
frame_desc = "Requires 2 Matter Bins, 2 Manipulators, and 2 Beakers."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
@@ -159,6 +160,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
|
||||
board_type = "machine"
|
||||
origin_tech = "materials=2;programming=2"
|
||||
frame_desc = "Requires 1 Matter Bin, 1 Manipulator, and 2 Beakers."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
@@ -169,6 +171,7 @@ to destroy them and players will be able to make replacements.
|
||||
build_path = "/obj/machinery/power/port_gen/pacman"
|
||||
board_type = "machine"
|
||||
origin_tech = "powerstorage=3;plasmatech=3"
|
||||
frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
@@ -188,6 +191,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
build_path = "/obj/machinery/r_n_d/server"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3"
|
||||
frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/cable_coil" = 2,
|
||||
"/obj/item/weapon/stock_parts/scanning_module" = 1)
|
||||
@@ -775,7 +775,15 @@ datum
|
||||
reliability_base = 76
|
||||
build_path = "/obj/item/weapon/gun/energy/general/nuclear"
|
||||
|
||||
|
||||
large_grenade
|
||||
name = "Large Grenade"
|
||||
desc = "A grenade that affects a larger area and use larger containers."
|
||||
id = "large_Grenade"
|
||||
req_tech = list("combat" = 3, "materials" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 3000)
|
||||
reliability_base = 79
|
||||
build_path = "/obj/item/weapon/chem_grenade/large"
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Test///////////////////
|
||||
|
||||
@@ -189,7 +189,7 @@ When thinking about new stuff, check here to see if there are any slots unfilled
|
||||
//SYNDICATE
|
||||
1 | Sleepypen
|
||||
2 | TYRANT Module, Emag
|
||||
3 | Cloaking Device, Powre Sink
|
||||
3 | Cloaking Device, Power Sink
|
||||
4 |
|
||||
5 |
|
||||
6 |
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 476 B |
Reference in New Issue
Block a user