mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 12:41:09 +01:00
first pass of cleaning up construction.dm + merge from upstream
This commit is contained in:
@@ -6,6 +6,10 @@
|
||||
zone = "chest"
|
||||
slot = "parasite_egg"
|
||||
|
||||
/obj/item/organ/internal/body_egg/on_find(mob/living/finder)
|
||||
..()
|
||||
finder << "<span class='warning'>You found an unknown alien organism in [owner]'s [zone]!</span>"
|
||||
|
||||
/obj/item/organ/internal/body_egg/New(loc)
|
||||
if(iscarbon(loc))
|
||||
src.Insert(loc)
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
var/timer_set = 0
|
||||
var/primed = 0
|
||||
var/disarmed = 0
|
||||
var/wires = list("orange", "green", "blue", "yellow", "aqua", "purple")
|
||||
var/correct_wire
|
||||
var/armer //Used for admin purposes
|
||||
var/datum/wires/pizza_bomb/wires
|
||||
|
||||
/obj/item/device/pizza_bomb/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is opening [src]! It looks like \he's hungry and looking for pizza.</span>")
|
||||
@@ -44,16 +43,10 @@
|
||||
desc = "A box suited for pizzas."
|
||||
return
|
||||
if(!primed)
|
||||
name = "pizza bomb"
|
||||
desc = "OH GOD THAT'S NOT A PIZZA"
|
||||
icon_state = "pizzabox_bomb"
|
||||
audible_message("<span class='warning'>\icon[src] *beep* *beep*</span>")
|
||||
user << "<span class='danger'>That's no pizza! That's a bomb!</span>"
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) has triggered a pizza bomb armed by [key_name_admin(armer)] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>(JMP)</a>.")
|
||||
log_game("[key_name(usr)] has triggered a pizza bomb armed by [key_name(armer)] ([loc.x],[loc.y],[loc.z]).")
|
||||
primed = 1
|
||||
sleep(timer)
|
||||
return go_boom()
|
||||
arm()
|
||||
|
||||
/obj/item/device/pizza_bomb/burn() //Instead of burning to ashes, it will just explode
|
||||
go_boom()
|
||||
@@ -61,52 +54,66 @@
|
||||
|
||||
/obj/item/device/pizza_bomb/proc/go_boom()
|
||||
if(disarmed)
|
||||
visible_message("<span class='danger'>\icon[src] Sparks briefly jump out of the [correct_wire] wire on \the [src], but it's disarmed!")
|
||||
visible_message("<span class='danger'>\icon[src] Sparks briefly jump out of \the [src], but it's disarmed!")
|
||||
return
|
||||
src.audible_message("\icon[src] <b>[src]</b> beeps, \"Enjoy the pizza!\"")
|
||||
src.visible_message("<span class='userdanger'>\The [src] violently explodes!</span>")
|
||||
explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/device/pizza_bomb/attack_hand(mob/user)
|
||||
if(loc == user || primed)
|
||||
wires.Interact(user)
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/pizza_bomb/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/wirecutters) && primed)
|
||||
user << "<span class='danger'>Oh God, what wire do you cut?!</span>"
|
||||
var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires
|
||||
if(!user.canUseTopic(src))
|
||||
return
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1)
|
||||
user.visible_message("<span class='warning'>[user] cuts the [chosen_wire] wire!</span>", "<span class='danger'>You cut the [chosen_wire] wire!</span>")
|
||||
sleep(5)
|
||||
if(chosen_wire == correct_wire)
|
||||
src.audible_message("\icon[src] \The [src] suddenly stops beeping and seems lifeless.")
|
||||
user << "<span class='notice'>You did it!</span>"
|
||||
icon_state = "pizzabox_bomb_[correct_wire]"
|
||||
name = "pizza bomb"
|
||||
desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed."
|
||||
disarmed = 1
|
||||
primed = 0
|
||||
if(istype(I, /obj/item/weapon/wirecutters))
|
||||
if(disarmed)
|
||||
if(!in_range(user, src))
|
||||
user << "<span class='warning'>You can't see the box well enough to cut the wires out!</span>"
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] starts removing the payload and wires from \the [src].</span>", "<span class='notice'>You start removing the payload and wires from \the [src]...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1)
|
||||
user.unEquip(src)
|
||||
user.visible_message("<span class='notice'>[user] removes the insides of \the [src]!</span>", "<span class='notice'>You remove the insides of \the [src].</span>")
|
||||
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc)
|
||||
C.amount = 3
|
||||
new /obj/item/weapon/bombcore/miniature(src.loc)
|
||||
new /obj/item/pizzabox(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
user << "<span class='userdanger'>WRONG WIRE!</span>"
|
||||
go_boom()
|
||||
attack_hand(user)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/wirecutters) && disarmed)
|
||||
if(!in_range(user, src))
|
||||
user << "<span class='warning'>You can't see the box well enough to cut the wires out!</span>"
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] starts removing the payload and wires from \the [src].</span>", "<span class='notice'>You start removing the payload and wires from \the [src]...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1)
|
||||
user.unEquip(src)
|
||||
user.visible_message("<span class='notice'>[user] removes the insides of \the [src]!</span>", "<span class='notice'>You remove the insides of \the [src].</span>")
|
||||
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc)
|
||||
C.amount = 3
|
||||
new /obj/item/weapon/bombcore/miniature(src.loc)
|
||||
new /obj/item/pizzabox(src.loc)
|
||||
qdel(src)
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/device/pizza_bomb/New()
|
||||
..()
|
||||
correct_wire = pick(wires)
|
||||
wires = new(src)
|
||||
|
||||
|
||||
/obj/item/device/pizza_bomb/proc/disarm()
|
||||
audible_message("\icon[src] \The [src] suddenly stops beeping and seems lifeless.")
|
||||
icon_state = "pizzabox_bomb_[wires.GetColour(PIZZA_WIRE_DISARM)]"
|
||||
name = "pizza bomb"
|
||||
desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed."
|
||||
disarmed = 1
|
||||
primed = 0
|
||||
|
||||
|
||||
/obj/item/device/pizza_bomb/proc/arm()
|
||||
name = "pizza bomb"
|
||||
desc = "OH GOD THAT'S NOT A PIZZA"
|
||||
icon_state = "pizzabox_bomb"
|
||||
audible_message("<span class='warning'>\icon[src] *beep* *beep*</span>")
|
||||
primed = 1
|
||||
sleep(timer)
|
||||
return go_boom()
|
||||
@@ -143,7 +143,7 @@ MASS SPECTROMETER
|
||||
user << "\t<span class='alert'>Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>"
|
||||
if (M.reagents && M.reagents.get_reagent_amount("epinephrine"))
|
||||
user << "\t<span class='info'>Bloodstream analysis located [M.reagents:get_reagent_amount("epinephrine")] units of rejuvenation chemicals.</span>"
|
||||
if (M.getBrainLoss() >= 100 || !M.getorgan(/obj/item/organ/brain))
|
||||
if (M.getBrainLoss() >= 100 || !M.getorgan(/obj/item/organ/internal/brain))
|
||||
user << "\t<span class='alert'>Subject brain function is non-existant.</span>"
|
||||
else if (M.getBrainLoss() >= 60)
|
||||
user << "\t<span class='alert'>Severe brain damage detected. Subject likely to have mental retardation.</span>"
|
||||
|
||||
@@ -15,12 +15,10 @@
|
||||
var/playsleepseconds = 0
|
||||
var/obj/item/device/tape/mytape
|
||||
var/open_panel = 0
|
||||
var/datum/wires/taperecorder/wires = null
|
||||
var/canprint = 1
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/New()
|
||||
wires = new(src)
|
||||
mytape = new /obj/item/device/tape/random(src)
|
||||
update_icon()
|
||||
|
||||
@@ -38,13 +36,6 @@
|
||||
mytape = I
|
||||
user << "<span class='notice'>You insert [I] into [src].</span>"
|
||||
update_icon()
|
||||
else if(istype(I, /obj/item/weapon/screwdriver))
|
||||
open_panel = !open_panel
|
||||
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
|
||||
if(open_panel)
|
||||
wires.Interact(user)
|
||||
else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler))
|
||||
wires.Interact(user)
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/proc/eject(mob/user)
|
||||
@@ -117,8 +108,6 @@
|
||||
return
|
||||
if(playing)
|
||||
return
|
||||
if(!wires.get_record())
|
||||
return
|
||||
|
||||
if(mytape.used_capacity < mytape.max_capacity)
|
||||
usr << "<span class='notice'>Recording started.</span>"
|
||||
@@ -131,8 +120,6 @@
|
||||
for(used, used < max)
|
||||
if(recording == 0)
|
||||
break
|
||||
if(!wires.get_record())
|
||||
break
|
||||
mytape.used_capacity++
|
||||
used++
|
||||
sleep(10)
|
||||
@@ -174,8 +161,6 @@
|
||||
return
|
||||
if(playing)
|
||||
return
|
||||
if(!wires.get_play())
|
||||
return
|
||||
|
||||
playing = 1
|
||||
update_icon()
|
||||
@@ -185,8 +170,6 @@
|
||||
for(var/i = 1, used < max, sleep(10 * playsleepseconds))
|
||||
if(!mytape)
|
||||
break
|
||||
if(!wires.get_play())
|
||||
break
|
||||
if(playing == 0)
|
||||
break
|
||||
if(mytape.storedinfo.len < i)
|
||||
@@ -246,7 +229,6 @@
|
||||
|
||||
//empty tape recorders
|
||||
/obj/item/device/taperecorder/empty/New()
|
||||
wires = new(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,14 @@
|
||||
icon_state = "sheet-corgi"
|
||||
origin_tech = null
|
||||
|
||||
var/global/list/datum/stack_recipe/corgi_recipes = list ( \
|
||||
new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, on_floor = 1), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/animalhide/corgi/New(var/loc, var/amount=null)
|
||||
recipes = corgi_recipes
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/sheet/animalhide/cat
|
||||
name = "cat hide"
|
||||
desc = "The by-product of cat farming."
|
||||
|
||||
@@ -99,10 +99,11 @@
|
||||
singular_name = "astral carpet"
|
||||
desc = "A piece of carpet with a convincing star pattern."
|
||||
icon_state = "tile_space"
|
||||
amount = 30
|
||||
turf_type = /turf/simulated/floor/fakespace
|
||||
burn_state = 0 //Burnable
|
||||
|
||||
/obj/item/stack/tile/fakespace/loaded
|
||||
amount = 30
|
||||
|
||||
//High-traction
|
||||
/obj/item/stack/tile/noslip
|
||||
@@ -132,4 +133,4 @@
|
||||
desc = "The ground you walk on." //Not the usual floor tile desc as that refers to throwing, Cyborgs can't do that - RR
|
||||
materials = list() // All other Borg versions of items have no Metal or Glass - RR
|
||||
is_cyborg = 1
|
||||
cost = 125
|
||||
cost = 125
|
||||
|
||||
@@ -31,7 +31,7 @@ RPD
|
||||
|
||||
/datum/pipe_info/New(pid,direction,dt)
|
||||
src.id=pid
|
||||
src.icon_state=pipeID2State[pid+1]
|
||||
src.icon_state=pipeID2State["[pid]"]
|
||||
src.dir=direction
|
||||
src.dirtype=dt
|
||||
|
||||
@@ -81,8 +81,8 @@ var/global/list/disposalpipeID2State=list(
|
||||
//find these defines in code\game\machinery\pipe\consruction.dm
|
||||
var/global/list/RPD_recipes=list(
|
||||
"Regular Pipes" = list(
|
||||
"Pipe" = new /datum/pipe_info(PIPE_SIMPLE_STRAIGHT, 1, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE_BENT, 5, PIPE_BENT),
|
||||
"Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 1, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 5, PIPE_BENT),
|
||||
"Manifold" = new /datum/pipe_info(PIPE_MANIFOLD, 1, PIPE_TRINARY),
|
||||
"Manual Valve" = new /datum/pipe_info(PIPE_MVALVE, 1, PIPE_BINARY),
|
||||
"Digital Valve" = new /datum/pipe_info(PIPE_DVALVE, 1, PIPE_BINARY),
|
||||
@@ -101,19 +101,19 @@ var/global/list/RPD_recipes=list(
|
||||
// "Injector" = new /datum/pipe_info(PIPE_INJECTOR, 1, PIPE_UNARY),
|
||||
),
|
||||
"Heat Exchange" = list(
|
||||
"Pipe" = new /datum/pipe_info(PIPE_HE_STRAIGHT, 1, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info(PIPE_HE_BENT, 5, PIPE_BENT),
|
||||
"Pipe" = new /datum/pipe_info(PIPE_HE, 1, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info(PIPE_HE, 5, PIPE_BENT),
|
||||
"Junction" = new /datum/pipe_info(PIPE_JUNCTION, 1, PIPE_UNARY),
|
||||
"Heat Exchanger" = new /datum/pipe_info(PIPE_HEAT_EXCHANGE, 1, PIPE_UNARY),
|
||||
),
|
||||
"Disposal Pipes" = list(
|
||||
"Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_STRAIGHT, PIPE_BINARY),
|
||||
"Bent Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_BENT, PIPE_TRINARY),
|
||||
"Junction" = new /datum/pipe_info/disposal(DISP_JUNCTION, PIPE_TRINARY),
|
||||
"Junction" = new /datum/pipe_info/disposal(DISP_JUNCTION, PIPE_TRINARY),
|
||||
"Y-Junction" = new /datum/pipe_info/disposal(DISP_YJUNCTION, PIPE_TRINARY),
|
||||
"Trunk" = new /datum/pipe_info/disposal(DISP_END_TRUNK, PIPE_TRINARY),
|
||||
"Bin" = new /datum/pipe_info/disposal(DISP_END_BIN, PIPE_QUAD),
|
||||
"Outlet" = new /datum/pipe_info/disposal(DISP_END_OUTLET, PIPE_UNARY),
|
||||
"Bin" = new /datum/pipe_info/disposal(DISP_END_BIN, PIPE_QUAD),
|
||||
"Outlet" = new /datum/pipe_info/disposal(DISP_END_OUTLET, PIPE_UNARY),
|
||||
"Chute" = new /datum/pipe_info/disposal(DISP_END_CHUTE, PIPE_UNARY),
|
||||
"Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY),
|
||||
)
|
||||
@@ -471,7 +471,7 @@ var/global/list/RPD_recipes=list(
|
||||
show_menu(usr)
|
||||
|
||||
if(href_list["makepipe"])
|
||||
p_type = text2num(href_list["makepipe"])
|
||||
p_type = text2path(href_list["makepipe"])
|
||||
p_dir = text2num(href_list["dir"])
|
||||
p_conntype = text2num(href_list["type"])
|
||||
p_class = ATMOS_MODE
|
||||
|
||||
@@ -100,6 +100,11 @@
|
||||
spam_flag = 0
|
||||
return
|
||||
|
||||
/obj/item/weapon/bikehorn/Crossed(mob/living/L)
|
||||
if(isliving(L))
|
||||
playsound(loc, honksound, 50, 1, -1)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/bikehorn/airhorn
|
||||
name = "air horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
|
||||
@@ -361,11 +361,13 @@
|
||||
return
|
||||
if(user.zone_sel && user.zone_sel.selecting == "chest")
|
||||
if(!defib.safety && user.a_intent == "harm")
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>", "<span class='warning'>You overcharge the paddles and begin to place them onto [M]'s chest...</span>")
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>",
|
||||
"<span class='warning'>You overcharge the paddles and begin to place them onto [M]'s chest...</span>")
|
||||
busy = 1
|
||||
update_icon()
|
||||
if(do_after(user, 30, target = M))
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>", "<span class='warning'>You place [src] on [M.name]'s chest and begin to charge them.</span>")
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>",
|
||||
"<span class='warning'>You place [src] on [M.name]'s chest and begin to charge them.</span>")
|
||||
var/turf/T = get_turf(defib)
|
||||
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
T.audible_message("<span class='warning'>\The [defib] lets out an urgent beep and lets out a steadily rising hum...</span>")
|
||||
@@ -384,7 +386,8 @@
|
||||
if(!HU.heart_attack)
|
||||
HU.heart_attack = 1
|
||||
if(!HU.stat)
|
||||
HU.visible_message("<span class='warning'>[M] thrashes wildly, clutching at their chest!</span>", "<span class='userdanger'>You feel a horrible agony in your chest!</span>")
|
||||
HU.visible_message("<span class='warning'>[M] thrashes wildly, clutching at their chest!</span>",
|
||||
"<span class='userdanger'>You feel a horrible agony in your chest!</span>")
|
||||
HU.apply_damage(50, BURN, "chest")
|
||||
add_logs(user, M, "overloaded the heart of", defib)
|
||||
M.Weaken(5)
|
||||
@@ -427,7 +430,22 @@
|
||||
total_brute = H.getBruteLoss()
|
||||
total_burn = H.getFireLoss()
|
||||
|
||||
if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !H.get_ghost() && tplus < tlimit && !(NOCLONE in H.mutations))
|
||||
var/failed = null
|
||||
|
||||
if (H.suiciding || (NOCLONE in H.mutations))
|
||||
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
|
||||
else if ((tplus > tlimit) || !H.getorgan(/obj/item/organ/internal/heart))
|
||||
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return. Further attempts futile.</span>"
|
||||
else if(total_burn >= 180 || total_brute >= 180)
|
||||
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - Severe tissue damage detected.</span>"
|
||||
else if(H.get_ghost() || !H.getorgan(/obj/item/organ/internal/brain))
|
||||
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful.</span>"
|
||||
|
||||
|
||||
if(failed)
|
||||
user.visible_message(failed)
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
else
|
||||
//If the body has been fixed so that they would not be in crit when defibbed, give them oxyloss to put them back into crit
|
||||
if (H.health > halfwaycritdeath)
|
||||
H.adjustOxyLoss(H.health - halfwaycritdeath)
|
||||
@@ -446,19 +464,8 @@
|
||||
H.emote("gasp")
|
||||
if(tplus > tloss)
|
||||
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
|
||||
defib.deductcharge(revivecost)
|
||||
add_logs(user, M, "revived", defib)
|
||||
else
|
||||
if (H.suiciding || (NOCLONE in H.mutations))
|
||||
user.visible_message("<span class='warning'>[defib] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>")
|
||||
else if (tplus > tlimit)
|
||||
user.visible_message("<span class='warning'>[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation. Further attempts futile.</span>")
|
||||
else if(total_burn >= 180 || total_brute >= 180)
|
||||
user.visible_message("<span class='warning'>[defib] buzzes: Resuscitation failed - Severe tissue damage detected.</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[defib] buzzes: Resuscitation failed - No soul in patient body. Further attempts may be successful.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
defib.deductcharge(revivecost)
|
||||
defib.deductcharge(revivecost)
|
||||
update_icon()
|
||||
cooldown = 1
|
||||
defib.cooldowncheck(user)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "And boom goes the weasel."
|
||||
icon_state = "explosive"
|
||||
origin_tech = "materials=2;combat=3;biotech=4;syndicate=4"
|
||||
var/weak = 1.6
|
||||
var/weak = 2
|
||||
var/medium = 0.8
|
||||
var/heavy = 0.4
|
||||
var/delay = 7
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
/obj/item/weapon/implant/explosive/implant(mob/source)
|
||||
var/obj/item/weapon/implant/explosive/imp_e = locate(src.type) in source
|
||||
if(imp_e)
|
||||
if(imp_e && imp_e != src)
|
||||
imp_e.heavy += heavy
|
||||
imp_e.medium += medium
|
||||
imp_e.weak += weak
|
||||
@@ -89,10 +89,10 @@
|
||||
|
||||
/obj/item/weapon/implant/explosive/macro/implant(mob/source)
|
||||
var/obj/item/weapon/implant/explosive/imp_e = locate(src.type) in source
|
||||
if(imp_e)
|
||||
if(imp_e && imp_e != src)
|
||||
return 0
|
||||
imp_e = locate(/obj/item/weapon/implant/explosive) in source
|
||||
if(imp_e)
|
||||
if(imp_e && imp_e != src)
|
||||
heavy += imp_e.heavy
|
||||
medium += imp_e.medium
|
||||
weak += imp_e.weak
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
if(..())
|
||||
if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.get_gang_bosses())) || is_shadow_or_thrall(target))
|
||||
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>")
|
||||
imp_in = null
|
||||
removed(target, 1)
|
||||
qdel(src)
|
||||
return -1
|
||||
if(target.mind in ticker.mode.get_gangsters())
|
||||
ticker.mode.remove_gangster(target.mind)
|
||||
target.visible_message("<span class='warning'>[src] was destroyed in the process!</span>", "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>")
|
||||
imp_in = null
|
||||
removed(target, 1)
|
||||
qdel(src)
|
||||
return -1
|
||||
if(target.mind in ticker.mode.revolutionaries)
|
||||
@@ -39,9 +39,9 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/implant/loyalty/removed(mob/target)
|
||||
/obj/item/weapon/implant/loyalty/removed(mob/target, var/silent = 0)
|
||||
if(..())
|
||||
if(target.stat != DEAD)
|
||||
if(target.stat != DEAD && !silent)
|
||||
target << "<span class='boldnotice'>You feel a sense of liberation as Nanotrasen's grip on your mind fades away.</span>"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/obj/item/weapon/storage/internal/implant
|
||||
name = "bluespace pocket"
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 6
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
silent = 1
|
||||
|
||||
|
||||
/obj/item/weapon/implant/storage
|
||||
name = "storage implant"
|
||||
desc = "Stores up to two big items in a bluespace pocket."
|
||||
icon_state = "storage"
|
||||
origin_tech = "materials=2;magnets=4;bluespace=4;syndicate=4"
|
||||
item_color = "r"
|
||||
var/obj/item/weapon/storage/internal/implant/storage
|
||||
|
||||
/obj/item/weapon/implant/storage/New()
|
||||
..()
|
||||
storage = new /obj/item/weapon/storage/internal/implant(src)
|
||||
|
||||
/obj/item/weapon/implant/storage/activate()
|
||||
storage.MouseDrop(imp_in)
|
||||
|
||||
/obj/item/weapon/implant/storage/removed(source)
|
||||
if(..())
|
||||
storage.close_all()
|
||||
for(var/obj/item/I in storage)
|
||||
storage.remove_from_storage(I, get_turf(source))
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/storage/implant(mob/source)
|
||||
var/obj/item/weapon/implant/storage/imp_e = locate(src.type) in source
|
||||
if(imp_e)
|
||||
imp_e.storage.storage_slots += storage.storage_slots
|
||||
imp_e.storage.max_combined_w_class += storage.max_combined_w_class
|
||||
imp_e.storage.contents += storage.contents
|
||||
|
||||
storage.close_all()
|
||||
storage.show_to(source)
|
||||
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/implanter/storage
|
||||
name = "implanter (storage)"
|
||||
|
||||
/obj/item/weapon/implanter/storage/New()
|
||||
imp = new /obj/item/weapon/implant/storage(src)
|
||||
..()
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/item/weapon/implant/uplink/implant(mob/source)
|
||||
var/obj/item/weapon/implant/imp_e = locate(src.type) in source
|
||||
if(imp_e)
|
||||
if(imp_e && imp_e != src)
|
||||
imp_e.hidden_uplink.uses += hidden_uplink.uses
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
@@ -299,24 +299,31 @@
|
||||
slowdown = 1
|
||||
max_combined_w_class = 27
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndiemed
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie
|
||||
name = "suspicious looking dufflebag"
|
||||
desc = "A large dufflebag for holding extra tactical supplies."
|
||||
icon_state = "duffle-syndie"
|
||||
item_state = "duffle-syndiemed"
|
||||
origin_tech = "syndicate=1"
|
||||
silent = 1
|
||||
slowdown = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie/med
|
||||
name = "medical dufflebag"
|
||||
desc = "A large dufflebag for holding extra tactical medical supplies."
|
||||
icon_state = "duffle-syndiemed"
|
||||
item_state = "duffle-syndiemed"
|
||||
slowdown = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndieammo
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo
|
||||
name = "ammunition dufflebag"
|
||||
desc = "A large dufflebag for holding extra weapons ammunition and supplies."
|
||||
icon_state = "duffle-syndieammo"
|
||||
item_state = "duffle-syndieammo"
|
||||
slowdown = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded
|
||||
desc = "A large dufflebag, packed to the brim with Bulldog shotgun ammo."
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded/New()
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded/New()
|
||||
..()
|
||||
contents = list()
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
@@ -330,14 +337,14 @@
|
||||
new /obj/item/ammo_box/magazine/m12g/dragon(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndiesurgery
|
||||
name = "Syndicate surgery dufflebag"
|
||||
desc = "A menacingly looking dufflebag for holding surgery tools."
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery
|
||||
name = "surgery dufflebag"
|
||||
desc = "A suspicious looking dufflebag for holding surgery tools."
|
||||
icon_state = "duffle-syndiemed"
|
||||
item_state = "duffle-syndiemed"
|
||||
storage_slots = 10
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndiesurgery/New()
|
||||
/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery/New()
|
||||
..()
|
||||
contents = list()
|
||||
new /obj/item/weapon/scalpel(src)
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/obj/item/weapon/storage/internal
|
||||
storage_slots = 2
|
||||
max_w_class = 2
|
||||
max_combined_w_class = 4
|
||||
w_class = 4
|
||||
var/priority = 1
|
||||
|
||||
/*obj/item/weapon/storage/internal/pocket/New()
|
||||
..()
|
||||
if(loc) name = loc.name
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/big
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 6
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/small
|
||||
storage_slots = 1
|
||||
max_combined_w_class = 2
|
||||
priority = 0
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/tiny
|
||||
storage_slots = 1
|
||||
max_w_class = 1
|
||||
max_combined_w_class = 1
|
||||
priority = 0
|
||||
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/small/detective
|
||||
priority = 1
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/small/detective/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask/det(src)
|
||||
|
||||
|
||||
proc/isstorage(var/atom/A)
|
||||
if(istype(A, /obj/item/weapon/storage))
|
||||
return 1
|
||||
|
||||
if(istype(A, /obj/item/clothing))
|
||||
var/obj/item/clothing/C = A
|
||||
if(C.pockets) return 1*/
|
||||
@@ -9,6 +9,7 @@
|
||||
name = "storage"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
w_class = 3.0
|
||||
var/silent = 0 // No message on putting items in
|
||||
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
|
||||
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
|
||||
var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage
|
||||
@@ -292,6 +293,8 @@
|
||||
if(usr)
|
||||
if(!usr.unEquip(W))
|
||||
return 0
|
||||
if(silent)
|
||||
prevent_warning = 1
|
||||
W.loc = src
|
||||
W.on_enter_storage(src)
|
||||
if(usr)
|
||||
@@ -454,6 +457,9 @@
|
||||
|
||||
|
||||
/obj/item/weapon/storage/Destroy()
|
||||
for(var/obj/O in contents)
|
||||
O.mouse_opacity = initial(O.mouse_opacity)
|
||||
|
||||
close_all()
|
||||
qdel(boxes)
|
||||
qdel(closer)
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
icon_state = "syndicate"
|
||||
item_state = "toolbox_syndi"
|
||||
origin_tech = "combat=1;syndicate=1"
|
||||
silent = 1
|
||||
force = 15
|
||||
throwforce = 18
|
||||
|
||||
@@ -82,7 +83,7 @@
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/wirecutters(src, "red")
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/clothing/gloves/color/red/insulated(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/drone
|
||||
name = "mechanical toolbox"
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
new /obj/item/weapon/implanter/emp(src)
|
||||
new /obj/item/weapon/implanter/adrenalin(src)
|
||||
new /obj/item/weapon/implanter/explosive(src)
|
||||
new /obj/item/weapon/implanter/storage(src)
|
||||
return
|
||||
|
||||
if("hacker")
|
||||
@@ -148,6 +149,15 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_storage
|
||||
name = "boxed storage implant (with injector)"
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_storage/New()
|
||||
..()
|
||||
new /obj/item/weapon/implanter/storage(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/space
|
||||
name = "boxed space suit and helmet"
|
||||
can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)
|
||||
@@ -173,6 +183,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/chemical
|
||||
name = "boxed chemical kit"
|
||||
storage_slots = 14
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/chemical/New()
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user