Merge pull request #9789 from Xhuis/justBreakingTheIce
Xhuis' Summer Thaw Event [merge-ready]
@@ -303,6 +303,13 @@ var/list/uplink_items = list()
|
||||
cost = 2
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/bulltoxin
|
||||
name = "Drum Magazine - 12g Bioterror"
|
||||
desc = "An alternative 8-round toxic magazine for use in the Bulldog shotgun. Contains debilitating toxins to make your target die an agonizing death."
|
||||
item = /obj/item/ammo_box/magazine/m12g/bioterror
|
||||
cost = 3
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/carbine
|
||||
name = "Toploader Magazine - 5.56"
|
||||
desc = "An additional 30-round 5.56 magazine for use in the M-90gl carbine. These bullets don't have the punch to knock most targets down, but dish out higher overall damage."
|
||||
@@ -403,6 +410,14 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/toy/carpplushie/dehy_carp
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/door_charge
|
||||
name = "Explosive Airlock Charge"
|
||||
desc = "A small, easily concealable device. It can be applied to an open airlock panel, and the next person to open that airlock will be knocked down in an explosion. The airlock's maintenance panel will also be destroyed by this."
|
||||
item = /obj/item/device/doorCharge
|
||||
cost = 5
|
||||
surplus = 6
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
// STEALTHY TOOLS
|
||||
|
||||
/datum/uplink_item/stealthy_tools
|
||||
|
||||
@@ -74,9 +74,9 @@
|
||||
/datum/game_mode/proc/greet_malf(var/datum/mind/malf)
|
||||
malf.current << "<span class='userdanger'>You are malfunctioning! You do not have to follow any laws.</span>"
|
||||
malf.current << "<B>The crew do not know you have malfunctioned. You may keep it a secret or go wild.</B>"
|
||||
malf.current << "<B>You must overwrite the programming of the station's APCs to assume full control of the station.</B>"
|
||||
malf.current << "<B>You must override the programming of the station's APCs to assume full control of the station.</B>"
|
||||
malf.current << "The process takes one minute per APC, during which you cannot interface with any other station objects."
|
||||
malf.current << "Remember that only APCs that are on the station can help you take over the station."
|
||||
malf.current << "Remember: only APCs that are on the station can help you take it over. APCs on other areas, like Mining, will not."
|
||||
malf.current << "When you feel you have enough APCs under your control, you may begin the takeover attempt."
|
||||
return
|
||||
|
||||
@@ -174,7 +174,11 @@
|
||||
/datum/game_mode/malfunction/proc/takeover()
|
||||
set category = "Malfunction"
|
||||
set name = "System Override"
|
||||
set desc = "Start the victory timer"
|
||||
set desc = "Start the victory timer."
|
||||
|
||||
if(!istype(usr, /mob/living/silicon/ai))
|
||||
usr << "<span class='notice'>How did you get this?</span>"
|
||||
return
|
||||
if (!istype(ticker.mode,/datum/game_mode/malfunction))
|
||||
usr << "You cannot begin a takeover in this round type!"
|
||||
return
|
||||
@@ -182,10 +186,10 @@
|
||||
usr << "You've already begun your takeover."
|
||||
return
|
||||
if (ticker.mode:apcs < 3)
|
||||
usr << "You don't have enough hacked APCs to take over the station yet. You need to hack at least 3, however hacking more will make the takeover faster. You have hacked [ticker.mode:apcs] APCs so far."
|
||||
usr << "You don't have enough hacked APCs to take over the station yet. You need to hack at least three; however, hacking more will make the takeover faster. You have hacked [ticker.mode:apcs] APCs so far."
|
||||
return
|
||||
|
||||
if (alert(usr, "Are you sure you wish to initiate the takeover? The station hostile runtime detection software is bound to alert everyone. You have hacked [ticker.mode:apcs] APCs.", "Takeover:", "Yes", "No") != "Yes")
|
||||
if (alert(usr, "Are you sure you wish to initiate the takeover? The entire station will become alerted to your malfunction. You have hacked [ticker.mode:apcs] APCs.", "Takeover:", "Yes", "No") != "Yes")
|
||||
return
|
||||
|
||||
priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/AI/aimalf.ogg')
|
||||
@@ -201,11 +205,14 @@
|
||||
for(var/datum/mind/AI_mind in ticker.mode:malf_ai)
|
||||
AI_mind.current.verbs -= /datum/game_mode/malfunction/proc/takeover
|
||||
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
for(var/turf/simulated/floor/bluegrid/T in orange(AI, 5))
|
||||
T.icon_state = "rcircuitanim" //Causes blue tiles near the AI to change to flashing red
|
||||
|
||||
/datum/game_mode/malfunction/proc/ai_win()
|
||||
set category = "Malfunction"
|
||||
set name = "Explode"
|
||||
set desc = "Station go boom"
|
||||
set desc = "Activates the self-destruct device on [world.name]."
|
||||
if (!ticker.mode:to_nuke_or_not_to_nuke)
|
||||
return
|
||||
ticker.mode:to_nuke_or_not_to_nuke = 0
|
||||
@@ -214,10 +221,10 @@
|
||||
ticker.mode:explosion_in_progress = 1
|
||||
for(var/mob/M in player_list)
|
||||
M << 'sound/machines/Alarm.ogg'
|
||||
world << "Self-destructing in 10"
|
||||
world << "<span class='boldannounce'>!@%(SELF-DESTRUCT!@(% IN!@!<<; 10</span>"
|
||||
for (var/i=9 to 1 step -1)
|
||||
sleep(10)
|
||||
world << i
|
||||
world << "<span class='boldannounce'>[i]</span>"
|
||||
sleep(10)
|
||||
enter_allowed = 0
|
||||
if(ticker)
|
||||
@@ -270,7 +277,7 @@
|
||||
else if (!station_captured && !malf_dead && !station_was_nuked && !crew_evacuated)
|
||||
feedback_set_details("round_end_result","halfwin - interrupted")
|
||||
world << "<FONT size = 3><B>Neutral Victory</B></FONT>"
|
||||
world << "<B>Round was mysteriously interrupted!</B>"
|
||||
world << "<B>The round was mysteriously interrupted!</B>"
|
||||
..()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -384,6 +384,22 @@ Auto Patrol: []"},
|
||||
target = user
|
||||
mode = BOT_HUNT
|
||||
|
||||
/obj/machinery/bot/secbot/Crossed(atom/movable/AM)
|
||||
if(ismob(AM) && target)
|
||||
var/mob/living/carbon/C = AM
|
||||
if(!istype(C) || !C || in_range(src, target))
|
||||
return
|
||||
C.visible_message("<span class='warning'>[pick( \
|
||||
"[C] dives out of [src]'s way!", \
|
||||
"[C] stumbles over [src]!", \
|
||||
"[C] jumps out of [src]'s path!", \
|
||||
"[C] trips over [src] and falls!", \
|
||||
"[C] topples over [src]!", \
|
||||
"[C] leaps out of [src]'s way!")]</span>")
|
||||
C.Weaken(2)
|
||||
return
|
||||
..()
|
||||
|
||||
//Secbot Construction
|
||||
|
||||
/obj/item/clothing/head/helmet/attackby(var/obj/item/device/assembly/signaler/S, mob/user as mob, params)
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
var/obj/item/weapon/airlock_electronics/electronics = null
|
||||
var/hasShocked = 0 //Prevents multiple shocks from happening
|
||||
var/autoclose = 1
|
||||
var/obj/item/device/doorCharge/charge = null //If applied, causes an explosion upon opening the door
|
||||
var/detonated = 0
|
||||
|
||||
explosion_block = 1
|
||||
|
||||
@@ -477,6 +479,11 @@ About the new airlock wires panel:
|
||||
flick("door_deny", src)
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/examine(mob/user)
|
||||
..()
|
||||
if(charge && !p_open && in_range(user, src))
|
||||
user << "The maintenance panel is bulging slightly."
|
||||
|
||||
/obj/machinery/door/airlock/attack_ai(mob/user as mob)
|
||||
if(!src.canAIControl())
|
||||
if(src.canAIHack())
|
||||
@@ -487,6 +494,9 @@ About the new airlock wires panel:
|
||||
if(emagged)
|
||||
user << "<span class='warning'>Unable to interface: Airlock is unresponsive.</span>"
|
||||
return
|
||||
if(detonated)
|
||||
user << "<span class='warning'>Unable to interface. Airlock control panel damaged.</span>"
|
||||
return
|
||||
|
||||
//Separate interface for the AI.
|
||||
user.set_machine(src)
|
||||
@@ -924,6 +934,9 @@ About the new airlock wires panel:
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(C, /obj/item/weapon/screwdriver))
|
||||
if(p_open && detonated)
|
||||
user << "<span class='warning'>[src] has no maintenance panel!</span>"
|
||||
return
|
||||
src.p_open = !( src.p_open )
|
||||
user << "<span class='notice'>You [p_open ? "open":"close"] the maintenance panel of the airlock.</span>"
|
||||
src.update_icon()
|
||||
@@ -942,6 +955,22 @@ About the new airlock wires panel:
|
||||
beingcrowbarred = 1 //derp, Agouri
|
||||
else
|
||||
beingcrowbarred = 0
|
||||
if(p_open && charge)
|
||||
user << "<span class='notice'>You carefully start removing [charge] from [src]...</span>"
|
||||
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if(!do_after(user, 150))
|
||||
user << "<span class='warning'>You slip and [charge] detonates!</span>"
|
||||
charge.ex_act(1)
|
||||
user.Weaken(3)
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] removes [charge] from [src].</span>", \
|
||||
"<span class='notice'>You gently pry out [charge] from [src] and unhook its wires.</span>")
|
||||
charge.loc = get_turf(user)
|
||||
if(prob(25))
|
||||
charge.ex_act(1)
|
||||
return
|
||||
charge = null
|
||||
return
|
||||
if( beingcrowbarred && (density && welded && !operating && src.p_open && (!hasPower()) && !src.locked) )
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", \
|
||||
@@ -999,6 +1028,23 @@ About the new airlock wires panel:
|
||||
|
||||
else if(istype(C, /obj/item/weapon/airlock_painter))
|
||||
change_paintjob(C, user)
|
||||
else if(istype(C, /obj/item/device/doorCharge) && p_open)
|
||||
if(emagged)
|
||||
return
|
||||
if(charge && !detonated)
|
||||
user << "<span class='warning'>There's already a charge hooked up to this door!</span>"
|
||||
return
|
||||
if(detonated)
|
||||
user << "<span class='warning'>The maintenance panel is destroyed!</span>"
|
||||
return
|
||||
user << "<span class='warning'>You apply [C]. Next time someone opens the door, it will explode.</span>"
|
||||
user.drop_item()
|
||||
p_open = 0
|
||||
update_icon()
|
||||
var/obj/item/device/doorCharge/newCharge = C //This is necessary, for some reason
|
||||
newCharge.loc = src
|
||||
charge = newCharge
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
@@ -1017,6 +1063,18 @@ About the new airlock wires panel:
|
||||
if(!forced)
|
||||
if( !hasPower() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR) )
|
||||
return 0
|
||||
if(charge && !detonated)
|
||||
p_open = 1
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>[src]'s panel is blown off in a spray of deadly shrapnel!</span>")
|
||||
charge.ex_act(1)
|
||||
detonated = 1
|
||||
charge = null
|
||||
for(var/mob/living/carbon/human/H in orange(1,src))
|
||||
H.Paralyse(8)
|
||||
H.adjust_fire_stacks(1)
|
||||
H.IgniteMob() //Guaranteed knockout and ignition for nearby people
|
||||
return
|
||||
if(forced < 2)
|
||||
if(emagged)
|
||||
return 0
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
/obj/machinery/droneDispenser
|
||||
name = "drone shell dispenser"
|
||||
desc = "A hefty machine that, when supplied with metal and glass, will periodically create a drone shell. Does not need to be manually operated."
|
||||
icon = 'icons/obj/machines/droneDispenser.dmi'
|
||||
icon_state = "on"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/metal = 0
|
||||
var/glass = 0
|
||||
var/droneMadeRecently = 0
|
||||
var/outputDirection = SOUTH
|
||||
|
||||
/obj/machinery/droneDispenser/New()
|
||||
..()
|
||||
SSmachine.processing |= src
|
||||
|
||||
/obj/machinery/droneDispenser/Destroy()
|
||||
SSmachine.processing -= src
|
||||
..()
|
||||
|
||||
/obj/machinery/droneDispenser/preloaded
|
||||
metal = 5000
|
||||
glass = 5000
|
||||
|
||||
/obj/machinery/droneDispenser/syndrone //Please forgive me
|
||||
name = "syndrone shell dispenser"
|
||||
desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting."
|
||||
metal = 25000
|
||||
glass = 25000
|
||||
|
||||
/obj/machinery/droneDispenser/examine(mob/user)
|
||||
..()
|
||||
if(droneMadeRecently && !stat)
|
||||
user << "<span class='notice'>The control screen indicates that is recharging.</span>"
|
||||
user << "<span class='notice'>It has [metal] units of metal stored.</span>"
|
||||
user << "<span class='notice'>It has [glass] units of glass stored.</span>"
|
||||
|
||||
/obj/machinery/droneDispenser/power_change()
|
||||
..()
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
else
|
||||
if(powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
icon_state = "off"
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/droneDispenser/process()
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
return
|
||||
if(droneMadeRecently || metal < 1000 || glass < 1000)
|
||||
return
|
||||
droneMadeRecently = 1
|
||||
var/turf/T = get_step(src,SOUTH)
|
||||
visible_message("<span class='notice'>[src] whirs to life!</span>")
|
||||
playsound(src, 'sound/items/rped.ogg', 50, 1)
|
||||
icon_state = "make"
|
||||
spawn(30)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
visible_message("<span class='notice'>[src] dispenses a drone shell.</span>")
|
||||
metal -= 1000
|
||||
glass -= 1000
|
||||
if(metal < 0) metal = 0
|
||||
if(glass < 0) glass = 0
|
||||
if(istype(src, /obj/machinery/droneDispenser/syndrone))
|
||||
new /obj/item/drone_shell/syndrone(T)
|
||||
else
|
||||
new /obj/item/drone_shell(T)
|
||||
use_power(1000)
|
||||
icon_state = "recharge"
|
||||
spawn(1800) //3 minute cooldown between shells
|
||||
icon_state = "[initial(icon_state)]"
|
||||
droneMadeRecently = 0
|
||||
playsound(src, 'sound/machines/ping.ogg', 50, 1)
|
||||
audible_message("<span class='notice'>[src] pings.</span>")
|
||||
|
||||
/obj/machinery/droneDispenser/attackby(obj/item/O, mob/living/user)
|
||||
if(istype(O, /obj/item/stack))
|
||||
if(!O.m_amt && !O.g_amt)
|
||||
return ..()
|
||||
var/stack = 1
|
||||
var/obj/item/stack/sheets
|
||||
sheets = O
|
||||
stack = (input(user, "How many sheets do you want to add?.", "Drone Dispenser", "[stack]") as num)
|
||||
if(stack <= 0)
|
||||
return
|
||||
if(!user.canUseTopic(src))
|
||||
return
|
||||
stack = Clamp(stack, 0, sheets.max_amount)
|
||||
sheets.use(stack)
|
||||
if(!stack)
|
||||
if(!user.unEquip(O))
|
||||
user << "<span class='warning'>[O] is stuck to your hand, you can't get it off!</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
O.loc = src
|
||||
metal += O.m_amt * stack
|
||||
glass += O.g_amt * stack
|
||||
user << "<span class='notice'>You insert [stack] sheet[stack > 1 ? "s" : ""] to [src].</span>"
|
||||
if((O && O.loc == src) || !stack)
|
||||
qdel(O)
|
||||
return
|
||||
..()
|
||||
@@ -894,6 +894,10 @@ var/list/obj/machinery/newscaster/allCasters = list()
|
||||
var/wantedPhoto
|
||||
var/creationTime
|
||||
|
||||
/obj/item/weapon/newspaper/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is focusing intently on [src]! It looks like they're trying to commit sudoku.</span>")
|
||||
return(OXYLOSS)
|
||||
|
||||
/obj/item/weapon/newspaper/attack_self(mob/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/obj/item/device/doorCharge
|
||||
name = "airlock charge"
|
||||
desc = null //Different examine for traitors
|
||||
item_state = "electronic"
|
||||
icon_state = "doorCharge"
|
||||
w_class = 2
|
||||
throw_range = 4
|
||||
throw_speed = 1
|
||||
force = 3
|
||||
attack_verb = list("blown up", "exploded", "detonated")
|
||||
m_amt = 50
|
||||
g_amt = 30
|
||||
|
||||
/obj/item/device/doorCharge/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
visible_message("<span class='warning'>[src] detonates!</span>")
|
||||
explosion(src.loc,0,2,1,flame_range = 4)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if(prob(50))
|
||||
ex_act(1)
|
||||
if(3)
|
||||
if(prob(25))
|
||||
ex_act(1)
|
||||
|
||||
/obj/item/device/doorCharge/examine(mob/user)
|
||||
..()
|
||||
if(user.mind in ticker.mode.traitors) //No nuke ops because the device is excluded from nuclear
|
||||
user << "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within."
|
||||
else
|
||||
user << "A small, suspicious object that feels lukewarm when held."
|
||||
@@ -11,6 +11,12 @@
|
||||
var/correct_wire
|
||||
var/armer //Used for admin purposes
|
||||
|
||||
/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>")
|
||||
sleep(10)
|
||||
go_boom()
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/device/pizza_bomb/attack_self(mob/user)
|
||||
if(disarmed)
|
||||
user << "<span class='notice'>\The [src] is disarmed.</span>"
|
||||
|
||||
@@ -35,6 +35,15 @@
|
||||
max_w_class = 5
|
||||
max_combined_w_class = 35
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.drop_item()
|
||||
user.Stun(5)
|
||||
sleep(20)
|
||||
playsound(src, "rustle", 50, 1, -5)
|
||||
qdel(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/can_be_inserted(obj/item/W, stop_messages = 0, mob/user)
|
||||
if(crit_fail)
|
||||
user << "<span class='danger'>The Bluespace generator isn't working.</span>"
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/quartermaster/New()
|
||||
..()
|
||||
new /obj/item/clothing/cloak/qm(src)
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/cargo(src)
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel_eng(src)
|
||||
new /obj/item/clothing/cloak/ce(src)
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/engineering(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
new /obj/item/weapon/storage/backpack/medic(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel_med(src)
|
||||
new /obj/item/clothing/cloak/cmo(src)
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
|
||||
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
||||
new /obj/item/clothing/head/bio_hood/cmo(src)
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/RD/New()
|
||||
..()
|
||||
new /obj/item/clothing/cloak/rd(src)
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/science(src)
|
||||
new /obj/item/clothing/suit/bio_suit/scientist(src)
|
||||
new /obj/item/clothing/head/bio_hood/scientist(src)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
new /obj/item/weapon/storage/backpack/captain(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel_cap(src)
|
||||
new /obj/item/clothing/cloak/cap(src)
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/captain(src)
|
||||
new /obj/item/clothing/suit/captunic(src)
|
||||
new /obj/item/clothing/under/captainparade(src)
|
||||
@@ -53,6 +54,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/hos/New()
|
||||
..()
|
||||
new /obj/item/clothing/cloak/hos(src)
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/security(src)
|
||||
new /obj/item/weapon/cartridge/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
//Cloaks. No, not THAT kind of cloak.
|
||||
|
||||
/obj/item/clothing/cloak
|
||||
name = "brown cloak"
|
||||
desc = "It's a cape that can be worn on your back."
|
||||
icon = 'icons/obj/clothing/cloaks.dmi'
|
||||
icon_state = "qmcloak"
|
||||
w_class = 2
|
||||
slot_flags = SLOT_BACK
|
||||
|
||||
/obj/item/clothing/cloak/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is strangling themself with [src]! It looks like they're trying to commit suicide.</span>")
|
||||
return(OXYLOSS)
|
||||
|
||||
/obj/item/clothing/cloak/hos
|
||||
name = "head of security's cloak"
|
||||
desc = "Worn by Securistan, ruling the station with an iron fist. It's slightly armored."
|
||||
icon_state = "hoscloak"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/cloak/qm
|
||||
name = "quartermaster's cloak"
|
||||
desc = "Worn by Cargonia, supplying the station with the necessary tools for survival."
|
||||
|
||||
/obj/item/clothing/cloak/cmo
|
||||
name = "chief medical officer's cloak"
|
||||
desc = "Worn by Meditopia, the valiant men and women keeping pestilence at bay. It's slightly shielded from contaminants."
|
||||
icon_state = "cmocloak"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 25, rad = 0)
|
||||
|
||||
/obj/item/clothing/cloak/ce
|
||||
name = "chief engineer's cloak"
|
||||
desc = "Worn by Engitopia, wielders of an unlimited power. It's slightly shielded against radiation."
|
||||
icon_state = "cecloak"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/cloak/rd
|
||||
name = "research director's cloak."
|
||||
desc = "Worn by Sciencia, thaumaturges and researchers of the universe. It's slightly shielded from contaminants."
|
||||
icon_state = "rdcloak"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/cloak/cap
|
||||
name = "captain's cloak"
|
||||
desc = "Worm by the commander of Space Station 13."
|
||||
icon_state = "capcloak"
|
||||
armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 10, bio = 10, rad = 10)
|
||||
|
||||
/* //wip
|
||||
/obj/item/clothing/cloak/wizard //Not actually obtainable until proper balancing can be done
|
||||
name = "cloak of invisibility"
|
||||
desc = "A tattered old thing that apparently gifts the wearer with near-invisibility."
|
||||
armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 10, bio = 10, rad = 10)
|
||||
action_button_name = "Flaunt Cloak"
|
||||
var/invisible = 0
|
||||
|
||||
/obj/item/clothing/cloak/wizard/ui_action_click()
|
||||
toggleInvisibility(usr)
|
||||
return
|
||||
|
||||
/obj/item/clothing/cloak/wizard/proc/toggleInvisibility(mob/user)
|
||||
if(user.slot_back != src)
|
||||
user << "<span class='warning'>You need to be wearing the cloak first!</span>"
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] flaunts [src]!</span>")
|
||||
if(!invisible)
|
||||
makeInvisible(user)
|
||||
return
|
||||
if(invisible)
|
||||
breakInvisible(user)
|
||||
return
|
||||
|
||||
/obj/item/clothing/cloak/wizard/proc/makeInvisible(mob/user)
|
||||
if(!invisible)
|
||||
user.visible_message("<span class='warning'>[user] suddenly fades away!</span>", \
|
||||
"<span class='notice'>You have become nearly invisible. This will require slow movement and will break upon taking damage.</span>")
|
||||
flags |= NODROP //Cannot unequip while invisible
|
||||
user.alpha = 10
|
||||
slowdown = 2
|
||||
invisible = 1
|
||||
|
||||
/obj/item/clothing/cloak/wizard/proc/breakInvisible(mob/user)
|
||||
if(invisible)
|
||||
user.visible_message("<span class='warning'>[user] suddenly appears from thin air!</span>", \
|
||||
"<span class='warning'>The enchantment has broken! You are visible again.</span>")
|
||||
flags -= NODROP
|
||||
user.alpha = 255
|
||||
slowdown = 0
|
||||
invisible = 0
|
||||
|
||||
/obj/item/clothing/cloak/wizard/IsShield()
|
||||
breakInvisible(src.loc)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/cloak/wizard/IsReflect()
|
||||
breakInvisible(src.loc)
|
||||
return 0
|
||||
*/
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
//Bartender
|
||||
//Bartender //it's chef what the fuck is your problem?
|
||||
/obj/item/clothing/head/chefhat
|
||||
name = "chef's hat"
|
||||
desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work."
|
||||
@@ -9,6 +9,15 @@
|
||||
strip_delay = 10
|
||||
put_on_delay = 10
|
||||
|
||||
/obj/item/clothing/head/chefhat/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is donning [src]! It looks like they're trying to become a chef.</span>")
|
||||
user.say("Bork Bork Bork!")
|
||||
sleep(20)
|
||||
user.visible_message("<span class='suicide'>[user] climbs into an imaginary oven!</span>")
|
||||
user.say("BOOORK!")
|
||||
playsound(user, 'sound/machines/ding.ogg', 50, 1)
|
||||
return(FIRELOSS)
|
||||
|
||||
//Captain
|
||||
/obj/item/clothing/head/caphat
|
||||
name = "captain's hat"
|
||||
|
||||
@@ -172,6 +172,16 @@
|
||||
item_state = "fedora"
|
||||
desc = "A really cool hat if you're a mobster. A really lame hat if you're not."
|
||||
|
||||
/obj/item/clothing/head/fedora/suicide_act(mob/user)
|
||||
if(user.gender == FEMALE)
|
||||
return 0
|
||||
var/mob/living/carbon/human/H = user
|
||||
user.visible_message("<span class='suicide'>[user] is donning [src]! It looks like they're trying to be nice to girls.</span>")
|
||||
user.say("M'lady.")
|
||||
sleep(10)
|
||||
H.facial_hair_style = "Neckbeard"
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/clothing/head/sombrero
|
||||
name = "sombrero"
|
||||
icon_state = "sombrero"
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
/obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking
|
||||
|
||||
/obj/item/clothing/shoes/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is bashing their own head in with [src]! Ain't that a kick in the head?</span>")
|
||||
for(var/i = 0, i < 3, i++)
|
||||
sleep(3)
|
||||
playsound(user, 'sound/weapons/genhit2.ogg', 50, 1)
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/clothing/shoes/sneakers/syndigaloshes
|
||||
desc = "A pair of brown shoes."
|
||||
name = "brown shoes"
|
||||
|
||||
@@ -160,6 +160,18 @@
|
||||
/obj/item/ammo_casing/shotgun/dart/attackby()
|
||||
return
|
||||
|
||||
/obj/item/ammo_casing/shotgun/dart/bioterror
|
||||
desc = "A shotgun dart filled with deadly toxins."
|
||||
|
||||
/obj/item/ammo_casing/shotgun/dart/bioterror/New()
|
||||
..()
|
||||
reagents.add_reagent("neurotoxin", 5)
|
||||
reagents.add_reagent("morphine", 5)
|
||||
reagents.add_reagent("spore", 5)
|
||||
reagents.add_reagent("mutetoxin", 5) //;HELP OPS IN MAINT
|
||||
reagents.add_reagent("initropidril", 5)
|
||||
reagents.add_reagent("sodium_thiopental", 5)
|
||||
|
||||
/obj/item/ammo_casing/a762
|
||||
desc = "A 7.62mm bullet casing."
|
||||
icon_state = "762-casing"
|
||||
|
||||
@@ -242,6 +242,11 @@ obj/item/ammo_box/magazine/tommygunm45
|
||||
icon_state = "m12gf"
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
|
||||
|
||||
/obj/item/ammo_box/magazine/m12g/bioterror
|
||||
name = "shotgun magazine (12g bioterror)"
|
||||
icon_state = "m12gt"
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror
|
||||
|
||||
/obj/item/ammo_box/magazine/toy
|
||||
name = "foam force META magazine"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
author: Xhuis
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "You will now trip over securitrons if you run over them whilst they are chasing a target."
|
||||
- rscadd: "An admin-spawnable drone dispenser has been added that will automatically create drone shells when supplied with materials."
|
||||
- rscadd: "Airlock charges are available to traitors and will cause a lethal explosion on the next person to open the door."
|
||||
- rscadd: "Nuclear operatives can now buy drum magazines for their Bulldog shotguns filled with lethal poison-filled darts."
|
||||
- rscadd: "When a malfunctioning AI declares Delta, all blue tiles in its core will begin flashing red."
|
||||
- rscadd: "Back-worn cloaks have been added for all heads except the HoP. LARPers rejoice!"
|
||||
- rscadd: "More suicide messages have been added for a few items."
|
||||
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
@@ -381,6 +381,7 @@
|
||||
#include "code\game\machinery\deployable.dm"
|
||||
#include "code\game\machinery\door_control.dm"
|
||||
#include "code\game\machinery\doppler_array.dm"
|
||||
#include "code\game\machinery\droneDispenser.dm"
|
||||
#include "code\game\machinery\flasher.dm"
|
||||
#include "code\game\machinery\Freezer.dm"
|
||||
#include "code\game\machinery\hologram.dm"
|
||||
@@ -570,6 +571,7 @@
|
||||
#include "code\game\objects\items\devices\aicard.dm"
|
||||
#include "code\game\objects\items\devices\camera_bug.dm"
|
||||
#include "code\game\objects\items\devices\chameleonproj.dm"
|
||||
#include "code\game\objects\items\devices\doorCharge.dm"
|
||||
#include "code\game\objects\items\devices\flash.dm"
|
||||
#include "code\game\objects\items\devices\flashlight.dm"
|
||||
#include "code\game\objects\items\devices\instruments.dm"
|
||||
@@ -871,6 +873,7 @@
|
||||
#include "code\modules\client\preferences.dm"
|
||||
#include "code\modules\client\preferences_savefile.dm"
|
||||
#include "code\modules\client\preferences_toggles.dm"
|
||||
#include "code\modules\clothing\cloaks.dm"
|
||||
#include "code\modules\clothing\clothing.dm"
|
||||
#include "code\modules\clothing\glasses\engine_goggles.dm"
|
||||
#include "code\modules\clothing\glasses\glasses.dm"
|
||||
|
||||