mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
reset
This commit is contained in:
@@ -340,20 +340,20 @@ Proc for attack log creation, because really why not
|
|||||||
qdel(progbar)
|
qdel(progbar)
|
||||||
|
|
||||||
|
|
||||||
//some additional checks as a callback for for do_afters that want to break on losing health or on the mob taking action
|
//some additional checks as a callback for for do_afters that want to break on losing health or on the mob taking action
|
||||||
/mob/proc/break_do_after_checks(list/checked_health, check_clicks)
|
/mob/proc/break_do_after_checks(list/checked_health, check_clicks)
|
||||||
if(check_clicks && next_move > world.time)
|
if(check_clicks && next_move > world.time)
|
||||||
return FALSE
|
return FALSE
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
//pass a list in the format list("health" = mob's health var) to check health during this
|
//pass a list in the format list("health" = mob's health var) to check health during this
|
||||||
/mob/living/break_do_after_checks(list/checked_health, check_clicks)
|
/mob/living/break_do_after_checks(list/checked_health, check_clicks)
|
||||||
if(islist(checked_health))
|
if(islist(checked_health))
|
||||||
if(health < checked_health["health"])
|
if(health < checked_health["health"])
|
||||||
return FALSE
|
return FALSE
|
||||||
checked_health["health"] = health
|
checked_health["health"] = health
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null)
|
/proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null)
|
||||||
if(!user)
|
if(!user)
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
if(sharpness)
|
if(sharpness)
|
||||||
to_chat(user, "<span class='notice'>You begin to butcher [src]...</span>")
|
to_chat(user, "<span class='notice'>You begin to butcher [src]...</span>")
|
||||||
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
|
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
|
||||||
if(do_mob(user, src, 80/sharpness) && Adjacent(I))
|
if(do_mob(user, src, 80/sharpness) && Adjacent(I))
|
||||||
harvest(user)
|
harvest(user)
|
||||||
return 1
|
return 1
|
||||||
return I.attack(src, user)
|
return I.attack(src, user)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,6 @@ SUBSYSTEM_DEF(server_maint)
|
|||||||
var/list/currentrun
|
var/list/currentrun
|
||||||
|
|
||||||
/datum/controller/subsystem/server_maint/Initialize(timeofday)
|
/datum/controller/subsystem/server_maint/Initialize(timeofday)
|
||||||
reload_custom_roundstart_items_list()
|
|
||||||
if (config.hub)
|
if (config.hub)
|
||||||
world.visibility = 1
|
world.visibility = 1
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ SUBSYSTEM_DEF(spacedrift)
|
|||||||
priority = 30
|
priority = 30
|
||||||
wait = 5
|
wait = 5
|
||||||
flags = SS_NO_INIT|SS_KEEP_TIMING
|
flags = SS_NO_INIT|SS_KEEP_TIMING
|
||||||
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
||||||
|
|
||||||
var/list/currentrun = list()
|
var/list/currentrun = list()
|
||||||
var/list/processing = list()
|
var/list/processing = list()
|
||||||
|
|||||||
@@ -142,25 +142,25 @@
|
|||||||
/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user)
|
/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user)
|
||||||
if(used)
|
if(used)
|
||||||
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
|
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
|
||||||
return 0
|
return FALSE
|
||||||
if(!(user.mind in SSticker.mode.syndicates))
|
if(!(user.mind in SSticker.mode.syndicates))
|
||||||
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
|
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
|
||||||
return 0
|
return FALSE
|
||||||
if(user.z != ZLEVEL_CENTCOM)
|
if(user.z != ZLEVEL_CENTCOM)
|
||||||
to_chat(user, "<span class='warning'>[src] is out of range! It can only be used at your base!</span>")
|
to_chat(user, "<span class='warning'>[src] is out of range! It can only be used at your base!</span>")
|
||||||
return 0
|
return FALSE
|
||||||
return 1
|
return TRUE
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user)
|
/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user)
|
||||||
if(!(check_usability(user)))
|
if(!(check_usability(user)))
|
||||||
return
|
return
|
||||||
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
|
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
|
||||||
var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE, src)
|
var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE)
|
||||||
if(nuke_candidates.len)
|
if(nuke_candidates.len)
|
||||||
if(!(check_usability(user)))
|
if(!(check_usability(user)))
|
||||||
return
|
return
|
||||||
used = 1
|
used = TRUE
|
||||||
var/mob/dead/observer/theghost = pick(nuke_candidates)
|
var/mob/dead/observer/theghost = pick(nuke_candidates)
|
||||||
spawn_antag(theghost.client, get_turf(src), "syndieborg")
|
spawn_antag(theghost.client, get_turf(src), "syndieborg")
|
||||||
do_sparks(4, TRUE, src)
|
do_sparks(4, TRUE, src)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,172 +1,172 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/computer/robotics
|
/obj/machinery/computer/robotics
|
||||||
name = "robotics control console"
|
name = "robotics control console"
|
||||||
desc = "Used to remotely lockdown or detonate linked Cyborgs."
|
desc = "Used to remotely lockdown or detonate linked Cyborgs."
|
||||||
icon_screen = "robot"
|
icon_screen = "robot"
|
||||||
icon_keyboard = "rd_key"
|
icon_keyboard = "rd_key"
|
||||||
req_access = list(GLOB.access_robotics)
|
req_access = list(GLOB.access_robotics)
|
||||||
circuit = /obj/item/weapon/circuitboard/computer/robotics
|
circuit = /obj/item/weapon/circuitboard/computer/robotics
|
||||||
var/temp = null
|
var/temp = null
|
||||||
|
|
||||||
light_color = LIGHT_COLOR_PINK
|
light_color = LIGHT_COLOR_PINK
|
||||||
|
|
||||||
/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R)
|
/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R)
|
||||||
if(!istype(R))
|
if(!istype(R))
|
||||||
return 0
|
return 0
|
||||||
if(isAI(user))
|
if(isAI(user))
|
||||||
if (R.connected_ai != user)
|
if (R.connected_ai != user)
|
||||||
return 0
|
return 0
|
||||||
if(iscyborg(user))
|
if(iscyborg(user))
|
||||||
if (R != user)
|
if (R != user)
|
||||||
return 0
|
return 0
|
||||||
if(R.scrambledcodes)
|
if(R.scrambledcodes)
|
||||||
return 0
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/computer/robotics/attack_hand(mob/user)
|
/obj/machinery/computer/robotics/attack_hand(mob/user)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
interact(user)
|
interact(user)
|
||||||
|
|
||||||
/obj/machinery/computer/robotics/interact(mob/user)
|
/obj/machinery/computer/robotics/interact(mob/user)
|
||||||
if (src.z > 6)
|
if (src.z > 6)
|
||||||
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
|
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
|
||||||
return
|
return
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
var/dat
|
var/dat
|
||||||
var/robots = 0
|
var/robots = 0
|
||||||
for(var/mob/living/silicon/robot/R in GLOB.mob_list)
|
for(var/mob/living/silicon/robot/R in GLOB.mob_list)
|
||||||
if(!can_control(user, R))
|
if(!can_control(user, R))
|
||||||
continue
|
continue
|
||||||
robots++
|
robots++
|
||||||
dat += "[R.name] |"
|
dat += "[R.name] |"
|
||||||
if(R.stat)
|
if(R.stat)
|
||||||
dat += " Not Responding |"
|
dat += " Not Responding |"
|
||||||
else if (!R.canmove)
|
else if (!R.canmove)
|
||||||
dat += " Locked Down |"
|
dat += " Locked Down |"
|
||||||
else
|
else
|
||||||
dat += " Operating Normally |"
|
dat += " Operating Normally |"
|
||||||
if (!R.canmove)
|
if (!R.canmove)
|
||||||
else if(R.cell)
|
else if(R.cell)
|
||||||
dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
|
dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
|
||||||
else
|
else
|
||||||
dat += " No Cell Installed |"
|
dat += " No Cell Installed |"
|
||||||
if(R.module)
|
if(R.module)
|
||||||
dat += " Module Installed ([R.module.name]) |"
|
dat += " Module Installed ([R.module.name]) |"
|
||||||
else
|
else
|
||||||
dat += " No Module Installed |"
|
dat += " No Module Installed |"
|
||||||
if(R.connected_ai)
|
if(R.connected_ai)
|
||||||
dat += " Slaved to [R.connected_ai.name] |"
|
dat += " Slaved to [R.connected_ai.name] |"
|
||||||
else
|
else
|
||||||
dat += " Independent from AI |"
|
dat += " Independent from AI |"
|
||||||
if(issilicon(user) || IsAdminGhost(user))
|
if(issilicon(user) || IsAdminGhost(user))
|
||||||
if(is_servant_of_ratvar(user) && user != R)
|
if(is_servant_of_ratvar(user) && user != R)
|
||||||
dat += "<A href='?src=\ref[src];convert=\ref[R]'>(<font color=#BE8700><i>Convert</i></font>)</A> "
|
dat += "<A href='?src=\ref[src];convert=\ref[R]'>(<font color=#BE8700><i>Convert</i></font>)</A> "
|
||||||
else if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate))
|
else if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate))
|
||||||
dat += "<A href='?src=\ref[src];magbot=\ref[R]'>(<font color=blue><i>Hack</i></font>)</A> "
|
dat += "<A href='?src=\ref[src];magbot=\ref[R]'>(<font color=blue><i>Hack</i></font>)</A> "
|
||||||
dat += "<A href='?src=\ref[src];stopbot=\ref[R]'>(<font color=green><i>[R.canmove ? "Lockdown" : "Release"]</i></font>)</A> "
|
dat += "<A href='?src=\ref[src];stopbot=\ref[R]'>(<font color=green><i>[R.canmove ? "Lockdown" : "Release"]</i></font>)</A> "
|
||||||
dat += "<A href='?src=\ref[src];killbot=\ref[R]'>(<font color=red><i>Destroy</i></font>)</A>"
|
dat += "<A href='?src=\ref[src];killbot=\ref[R]'>(<font color=red><i>Destroy</i></font>)</A>"
|
||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
|
|
||||||
if(!robots)
|
if(!robots)
|
||||||
dat += "No Cyborg Units detected within access parameters."
|
dat += "No Cyborg Units detected within access parameters."
|
||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
|
|
||||||
var/drones = 0
|
var/drones = 0
|
||||||
for(var/mob/living/simple_animal/drone/D in GLOB.mob_list)
|
for(var/mob/living/simple_animal/drone/D in GLOB.mob_list)
|
||||||
if(D.hacked)
|
if(D.hacked)
|
||||||
continue
|
continue
|
||||||
drones++
|
drones++
|
||||||
dat += "[D.name] |"
|
dat += "[D.name] |"
|
||||||
if(D.stat)
|
if(D.stat)
|
||||||
dat += " Not Responding |"
|
dat += " Not Responding |"
|
||||||
dat += "<A href='?src=\ref[src];killdrone=\ref[D]'>(<font color=red><i>Destroy</i></font>)</A>"
|
dat += "<A href='?src=\ref[src];killdrone=\ref[D]'>(<font color=red><i>Destroy</i></font>)</A>"
|
||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
|
|
||||||
if(!drones)
|
if(!drones)
|
||||||
dat += "No Drone Units detected within access parameters."
|
dat += "No Drone Units detected within access parameters."
|
||||||
|
|
||||||
var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500)
|
var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500)
|
||||||
popup.set_content(dat)
|
popup.set_content(dat)
|
||||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||||
popup.open()
|
popup.open()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/computer/robotics/Topic(href, href_list)
|
/obj/machinery/computer/robotics/Topic(href, href_list)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
|
|
||||||
if (href_list["temp"])
|
if (href_list["temp"])
|
||||||
src.temp = null
|
src.temp = null
|
||||||
|
|
||||||
else if (href_list["killbot"])
|
else if (href_list["killbot"])
|
||||||
if(src.allowed(usr))
|
if(src.allowed(usr))
|
||||||
var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs
|
var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs
|
||||||
if(can_control(usr, R))
|
if(can_control(usr, R))
|
||||||
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
|
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
|
||||||
if(choice == "Confirm" && can_control(usr, R) && !..())
|
if(choice == "Confirm" && can_control(usr, R) && !..())
|
||||||
if(R.syndicate && R.emagged)
|
if(R.syndicate && R.emagged)
|
||||||
to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.")
|
to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.")
|
||||||
if(R.connected_ai)
|
if(R.connected_ai)
|
||||||
to_chat(R.connected_ai, "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>")
|
to_chat(R.connected_ai, "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>")
|
||||||
R.ResetSecurityCodes()
|
R.ResetSecurityCodes()
|
||||||
else
|
else
|
||||||
var/turf/T = get_turf(R)
|
var/turf/T = get_turf(R)
|
||||||
message_admins("<span class='notice'>[ADMIN_LOOKUPFLW(usr)] detonated [key_name(R, R.client)][ADMIN_JMP(T)]!</span>")
|
message_admins("<span class='notice'>[ADMIN_LOOKUPFLW(usr)] detonated [key_name(R, R.client)][ADMIN_JMP(T)]!</span>")
|
||||||
log_game("\<span class='notice'>[key_name(usr)] detonated [key_name(R)]!</span>")
|
log_game("\<span class='notice'>[key_name(usr)] detonated [key_name(R)]!</span>")
|
||||||
if(R.connected_ai)
|
if(R.connected_ai)
|
||||||
to_chat(R.connected_ai, "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>")
|
to_chat(R.connected_ai, "<br><br><span class='alert'>ALERT - Cyborg detonation detected: [R.name]</span><br>")
|
||||||
R.self_destruct()
|
R.self_destruct()
|
||||||
else
|
else
|
||||||
to_chat(usr, "<span class='danger'>Access Denied.</span>")
|
to_chat(usr, "<span class='danger'>Access Denied.</span>")
|
||||||
|
|
||||||
else if (href_list["stopbot"])
|
else if (href_list["stopbot"])
|
||||||
if(src.allowed(usr))
|
if(src.allowed(usr))
|
||||||
var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs
|
var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs
|
||||||
if(can_control(usr, R))
|
if(can_control(usr, R))
|
||||||
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
|
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
|
||||||
if(choice == "Confirm" && can_control(usr, R) && !..())
|
if(choice == "Confirm" && can_control(usr, R) && !..())
|
||||||
message_admins("<span class='notice'>[ADMIN_LOOKUPFLW(usr)] [R.canmove ? "locked down" : "released"] [key_name(R, R.client)][ADMIN_LOOKUPFLW(R)]!</span>")
|
message_admins("<span class='notice'>[ADMIN_LOOKUPFLW(usr)] [R.canmove ? "locked down" : "released"] [key_name(R, R.client)][ADMIN_LOOKUPFLW(R)]!</span>")
|
||||||
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!")
|
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!")
|
||||||
R.SetLockdown(!R.lockcharge)
|
R.SetLockdown(!R.lockcharge)
|
||||||
to_chat(R, "[!R.lockcharge ? "<span class='notice'>Your lockdown has been lifted!" : "<span class='alert'>You have been locked down!"]</span>")
|
to_chat(R, "[!R.lockcharge ? "<span class='notice'>Your lockdown has been lifted!" : "<span class='alert'>You have been locked down!"]</span>")
|
||||||
if(R.connected_ai)
|
if(R.connected_ai)
|
||||||
to_chat(R.connected_ai, "[!R.lockcharge ? "<span class='notice'>NOTICE - Cyborg lockdown lifted" : "<span class='alert'>ALERT - Cyborg lockdown detected"]: <a href='?src=\ref[R.connected_ai];track=[html_encode(R.name)]'>[R.name]</a></span><br>")
|
to_chat(R.connected_ai, "[!R.lockcharge ? "<span class='notice'>NOTICE - Cyborg lockdown lifted" : "<span class='alert'>ALERT - Cyborg lockdown detected"]: <a href='?src=\ref[R.connected_ai];track=[html_encode(R.name)]'>[R.name]</a></span><br>")
|
||||||
|
|
||||||
else
|
else
|
||||||
to_chat(usr, "<span class='danger'>Access Denied.</span>")
|
to_chat(usr, "<span class='danger'>Access Denied.</span>")
|
||||||
|
|
||||||
else if (href_list["magbot"])
|
else if (href_list["magbot"])
|
||||||
if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr))
|
if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr))
|
||||||
var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs
|
var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs
|
||||||
if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R))
|
if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R))
|
||||||
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
|
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
|
||||||
message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!")
|
message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!")
|
||||||
R.SetEmagged(1)
|
R.SetEmagged(1)
|
||||||
if(is_special_character(R))
|
if(is_special_character(R))
|
||||||
R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes
|
R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes
|
||||||
|
|
||||||
else if(href_list["convert"])
|
else if(href_list["convert"])
|
||||||
if(issilicon(usr) && is_special_character(usr))
|
if(issilicon(usr) && is_special_character(usr))
|
||||||
var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs
|
var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs
|
||||||
if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr)
|
if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr)
|
||||||
log_game("[key_name(usr)] converted [R.name] using robotic console!")
|
log_game("[key_name(usr)] converted [R.name] using robotic console!")
|
||||||
message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!")
|
message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!")
|
||||||
add_servant_of_ratvar(R)
|
add_servant_of_ratvar(R)
|
||||||
|
|
||||||
else if (href_list["killdrone"])
|
else if (href_list["killdrone"])
|
||||||
if(src.allowed(usr))
|
if(src.allowed(usr))
|
||||||
var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"])
|
var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"])
|
||||||
if(D.hacked)
|
if(D.hacked)
|
||||||
to_chat(usr, "<span class='danger'>ERROR: [D] is not responding to external commands.</span>")
|
to_chat(usr, "<span class='danger'>ERROR: [D] is not responding to external commands.</span>")
|
||||||
else
|
else
|
||||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||||
s.set_up(3, 1, D)
|
s.set_up(3, 1, D)
|
||||||
s.start()
|
s.start()
|
||||||
D.visible_message("<span class='danger'>\the [D] self destructs!</span>")
|
D.visible_message("<span class='danger'>\the [D] self destructs!</span>")
|
||||||
D.gib()
|
D.gib()
|
||||||
|
|
||||||
src.updateUsrDialog()
|
src.updateUsrDialog()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,211 +1,211 @@
|
|||||||
#define SAFETY_COOLDOWN 100
|
#define SAFETY_COOLDOWN 100
|
||||||
|
|
||||||
/obj/machinery/recycler
|
/obj/machinery/recycler
|
||||||
name = "recycler"
|
name = "recycler"
|
||||||
desc = "A large crushing machine used to recycle small items inefficiently. There are lights on the side."
|
desc = "A large crushing machine used to recycle small items inefficiently. There are lights on the side."
|
||||||
icon = 'icons/obj/recycling.dmi'
|
icon = 'icons/obj/recycling.dmi'
|
||||||
icon_state = "grinder-o0"
|
icon_state = "grinder-o0"
|
||||||
layer = ABOVE_ALL_MOB_LAYER // Overhead
|
layer = ABOVE_ALL_MOB_LAYER // Overhead
|
||||||
anchored = 1
|
anchored = 1
|
||||||
density = 1
|
density = 1
|
||||||
var/safety_mode = FALSE // Temporarily stops machine if it detects a mob
|
var/safety_mode = FALSE // Temporarily stops machine if it detects a mob
|
||||||
var/icon_name = "grinder-o"
|
var/icon_name = "grinder-o"
|
||||||
var/blood = 0
|
var/blood = 0
|
||||||
var/eat_dir = WEST
|
var/eat_dir = WEST
|
||||||
var/amount_produced = 50
|
var/amount_produced = 50
|
||||||
var/datum/material_container/materials
|
var/datum/material_container/materials
|
||||||
var/crush_damage = 1000
|
var/crush_damage = 1000
|
||||||
var/eat_victim_items = TRUE
|
var/eat_victim_items = TRUE
|
||||||
var/item_recycle_sound = 'sound/items/Welder.ogg'
|
var/item_recycle_sound = 'sound/items/Welder.ogg'
|
||||||
|
|
||||||
/obj/machinery/recycler/New()
|
/obj/machinery/recycler/New()
|
||||||
..()
|
..()
|
||||||
materials = new /datum/material_container(src, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM))
|
materials = new /datum/material_container(src, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM))
|
||||||
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null)
|
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null)
|
||||||
B.apply_default_parts(src)
|
B.apply_default_parts(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/circuitboard/machine/recycler
|
/obj/item/weapon/circuitboard/machine/recycler
|
||||||
name = "Recycler (Machine Board)"
|
name = "Recycler (Machine Board)"
|
||||||
build_path = /obj/machinery/recycler
|
build_path = /obj/machinery/recycler
|
||||||
origin_tech = "programming=2;engineering=2"
|
origin_tech = "programming=2;engineering=2"
|
||||||
req_components = list(
|
req_components = list(
|
||||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||||
/obj/item/weapon/stock_parts/manipulator = 1)
|
/obj/item/weapon/stock_parts/manipulator = 1)
|
||||||
|
|
||||||
/obj/machinery/recycler/RefreshParts()
|
/obj/machinery/recycler/RefreshParts()
|
||||||
var/amt_made = 0
|
var/amt_made = 0
|
||||||
var/mat_mod = 0
|
var/mat_mod = 0
|
||||||
for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts)
|
for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts)
|
||||||
mat_mod = 2 * B.rating
|
mat_mod = 2 * B.rating
|
||||||
mat_mod *= 50000
|
mat_mod *= 50000
|
||||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||||
amt_made = 12.5 * M.rating //% of materials salvaged
|
amt_made = 12.5 * M.rating //% of materials salvaged
|
||||||
materials.max_amount = mat_mod
|
materials.max_amount = mat_mod
|
||||||
amount_produced = min(50, amt_made) + 50
|
amount_produced = min(50, amt_made) + 50
|
||||||
|
|
||||||
/obj/machinery/recycler/examine(mob/user)
|
/obj/machinery/recycler/examine(mob/user)
|
||||||
..()
|
..()
|
||||||
to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].")
|
to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].")
|
||||||
to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].")
|
to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].")
|
||||||
to_chat(user, "The safety-sensors status light is [emagged ? "off" : "on"].")
|
to_chat(user, "The safety-sensors status light is [emagged ? "off" : "on"].")
|
||||||
|
|
||||||
/obj/machinery/recycler/power_change()
|
/obj/machinery/recycler/power_change()
|
||||||
..()
|
..()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/recycler/attackby(obj/item/I, mob/user, params)
|
/obj/machinery/recycler/attackby(obj/item/I, mob/user, params)
|
||||||
if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I))
|
if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(exchange_parts(user, I))
|
if(exchange_parts(user, I))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_pry_open(I))
|
if(default_pry_open(I))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_unfasten_wrench(user, I))
|
if(default_unfasten_wrench(user, I))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_deconstruction_crowbar(I))
|
if(default_deconstruction_crowbar(I))
|
||||||
return
|
return
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/recycler/emag_act(mob/user)
|
/obj/machinery/recycler/emag_act(mob/user)
|
||||||
if(!emagged)
|
if(!emagged)
|
||||||
emagged = TRUE
|
emagged = TRUE
|
||||||
if(safety_mode)
|
if(safety_mode)
|
||||||
safety_mode = FALSE
|
safety_mode = FALSE
|
||||||
update_icon()
|
update_icon()
|
||||||
playsound(src.loc, "sparks", 75, 1, -1)
|
playsound(src.loc, "sparks", 75, 1, -1)
|
||||||
to_chat(user, "<span class='notice'>You use the cryptographic sequencer on the [src.name].</span>")
|
to_chat(user, "<span class='notice'>You use the cryptographic sequencer on the [src.name].</span>")
|
||||||
|
|
||||||
/obj/machinery/recycler/update_icon()
|
/obj/machinery/recycler/update_icon()
|
||||||
..()
|
..()
|
||||||
var/is_powered = !(stat & (BROKEN|NOPOWER))
|
var/is_powered = !(stat & (BROKEN|NOPOWER))
|
||||||
if(safety_mode)
|
if(safety_mode)
|
||||||
is_powered = FALSE
|
is_powered = FALSE
|
||||||
icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end
|
icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end
|
||||||
|
|
||||||
// This is purely for admin possession !FUN!.
|
// This is purely for admin possession !FUN!.
|
||||||
/obj/machinery/recycler/Bump(atom/movable/AM)
|
/obj/machinery/recycler/Bump(atom/movable/AM)
|
||||||
..()
|
..()
|
||||||
if(AM)
|
if(AM)
|
||||||
Bumped(AM)
|
Bumped(AM)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/recycler/Bumped(atom/movable/AM)
|
/obj/machinery/recycler/Bumped(atom/movable/AM)
|
||||||
|
|
||||||
if(stat & (BROKEN|NOPOWER))
|
if(stat & (BROKEN|NOPOWER))
|
||||||
return
|
return
|
||||||
if(!anchored)
|
if(!anchored)
|
||||||
return
|
return
|
||||||
if(safety_mode)
|
if(safety_mode)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/move_dir = get_dir(loc, AM.loc)
|
var/move_dir = get_dir(loc, AM.loc)
|
||||||
if(move_dir == eat_dir)
|
if(move_dir == eat_dir)
|
||||||
eat(AM)
|
eat(AM)
|
||||||
|
|
||||||
/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE)
|
/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE)
|
||||||
var/list/to_eat
|
var/list/to_eat
|
||||||
if(istype(AM0, /obj/item))
|
if(istype(AM0, /obj/item))
|
||||||
to_eat = AM0.GetAllContents()
|
to_eat = AM0.GetAllContents()
|
||||||
else
|
else
|
||||||
to_eat = list(AM0)
|
to_eat = list(AM0)
|
||||||
|
|
||||||
var/items_recycled = 0
|
var/items_recycled = 0
|
||||||
|
|
||||||
for(var/i in to_eat)
|
for(var/i in to_eat)
|
||||||
var/atom/movable/AM = i
|
var/atom/movable/AM = i
|
||||||
var/obj/item/bodypart/head/as_head = AM
|
var/obj/item/bodypart/head/as_head = AM
|
||||||
var/obj/item/device/mmi/as_mmi = AM
|
var/obj/item/device/mmi/as_mmi = AM
|
||||||
var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain)
|
var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain)
|
||||||
if(isliving(AM) || brain_holder)
|
if(isliving(AM) || brain_holder)
|
||||||
if(emagged)
|
if(emagged)
|
||||||
if(!brain_holder)
|
if(!brain_holder)
|
||||||
crush_living(AM)
|
crush_living(AM)
|
||||||
else
|
else
|
||||||
emergency_stop(AM)
|
emergency_stop(AM)
|
||||||
else if(istype(AM, /obj/item))
|
else if(istype(AM, /obj/item))
|
||||||
recycle_item(AM)
|
recycle_item(AM)
|
||||||
items_recycled++
|
items_recycled++
|
||||||
else
|
else
|
||||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||||
AM.loc = src.loc
|
AM.loc = src.loc
|
||||||
|
|
||||||
if(items_recycled && sound)
|
if(items_recycled && sound)
|
||||||
playsound(src.loc, item_recycle_sound, 50, 1)
|
playsound(src.loc, item_recycle_sound, 50, 1)
|
||||||
|
|
||||||
/obj/machinery/recycler/proc/recycle_item(obj/item/I)
|
/obj/machinery/recycler/proc/recycle_item(obj/item/I)
|
||||||
I.loc = src.loc
|
I.loc = src.loc
|
||||||
|
|
||||||
var/material_amount = materials.get_item_material_amount(I)
|
var/material_amount = materials.get_item_material_amount(I)
|
||||||
if(!material_amount)
|
if(!material_amount)
|
||||||
qdel(I)
|
qdel(I)
|
||||||
return
|
return
|
||||||
materials.insert_item(I, multiplier = (amount_produced / 100))
|
materials.insert_item(I, multiplier = (amount_produced / 100))
|
||||||
qdel(I)
|
qdel(I)
|
||||||
materials.retrieve_all()
|
materials.retrieve_all()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/recycler/proc/emergency_stop(mob/living/L)
|
/obj/machinery/recycler/proc/emergency_stop(mob/living/L)
|
||||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||||
safety_mode = TRUE
|
safety_mode = TRUE
|
||||||
update_icon()
|
update_icon()
|
||||||
L.loc = src.loc
|
L.loc = src.loc
|
||||||
addtimer(CALLBACK(src, .proc/reboot), SAFETY_COOLDOWN)
|
addtimer(CALLBACK(src, .proc/reboot), SAFETY_COOLDOWN)
|
||||||
|
|
||||||
/obj/machinery/recycler/proc/reboot()
|
/obj/machinery/recycler/proc/reboot()
|
||||||
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
|
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
|
||||||
safety_mode = FALSE
|
safety_mode = FALSE
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/recycler/proc/crush_living(mob/living/L)
|
/obj/machinery/recycler/proc/crush_living(mob/living/L)
|
||||||
|
|
||||||
L.loc = src.loc
|
L.loc = src.loc
|
||||||
|
|
||||||
if(issilicon(L))
|
if(issilicon(L))
|
||||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||||
else
|
else
|
||||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||||
|
|
||||||
var/gib = TRUE
|
var/gib = TRUE
|
||||||
// By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count)
|
// By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count)
|
||||||
if(iscarbon(L))
|
if(iscarbon(L))
|
||||||
gib = FALSE
|
gib = FALSE
|
||||||
if(L.stat == CONSCIOUS)
|
if(L.stat == CONSCIOUS)
|
||||||
L.say("ARRRRRRRRRRRGH!!!")
|
L.say("ARRRRRRRRRRRGH!!!")
|
||||||
add_mob_blood(L)
|
add_mob_blood(L)
|
||||||
|
|
||||||
if(!blood && !issilicon(L))
|
if(!blood && !issilicon(L))
|
||||||
blood = TRUE
|
blood = TRUE
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
// Remove and recycle the equipped items
|
// Remove and recycle the equipped items
|
||||||
if(eat_victim_items)
|
if(eat_victim_items)
|
||||||
for(var/obj/item/I in L.get_equipped_items())
|
for(var/obj/item/I in L.get_equipped_items())
|
||||||
if(L.dropItemToGround(I))
|
if(L.dropItemToGround(I))
|
||||||
eat(I, sound=FALSE)
|
eat(I, sound=FALSE)
|
||||||
|
|
||||||
// Instantly lie down, also go unconscious from the pain, before you die.
|
// Instantly lie down, also go unconscious from the pain, before you die.
|
||||||
L.Paralyse(5)
|
L.Paralyse(5)
|
||||||
|
|
||||||
// For admin fun, var edit emagged to 2.
|
// For admin fun, var edit emagged to 2.
|
||||||
if(gib || emagged == 2)
|
if(gib || emagged == 2)
|
||||||
L.gib()
|
L.gib()
|
||||||
else if(emagged == 1)
|
else if(emagged == 1)
|
||||||
L.adjustBruteLoss(crush_damage)
|
L.adjustBruteLoss(crush_damage)
|
||||||
|
|
||||||
/obj/machinery/recycler/deathtrap
|
/obj/machinery/recycler/deathtrap
|
||||||
name = "dangerous old crusher"
|
name = "dangerous old crusher"
|
||||||
emagged = TRUE
|
emagged = TRUE
|
||||||
crush_damage = 120
|
crush_damage = 120
|
||||||
flags = NODECONSTRUCT
|
flags = NODECONSTRUCT
|
||||||
|
|
||||||
/obj/item/weapon/paper/recycler
|
/obj/item/weapon/paper/recycler
|
||||||
name = "paper - 'garbage duty instructions'"
|
name = "paper - 'garbage duty instructions'"
|
||||||
info = "<h2>New Assignment</h2> You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.<br><br>There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
|
info = "<h2>New Assignment</h2> You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.<br><br>There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
|
||||||
|
|
||||||
#undef SAFETY_COOLDOWN
|
#undef SAFETY_COOLDOWN
|
||||||
@@ -1,388 +1,388 @@
|
|||||||
// SUIT STORAGE UNIT /////////////////
|
// SUIT STORAGE UNIT /////////////////
|
||||||
/obj/machinery/suit_storage_unit
|
/obj/machinery/suit_storage_unit
|
||||||
name = "suit storage unit"
|
name = "suit storage unit"
|
||||||
desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit."
|
desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit."
|
||||||
icon = 'icons/obj/suitstorage.dmi'
|
icon = 'icons/obj/suitstorage.dmi'
|
||||||
icon_state = "close"
|
icon_state = "close"
|
||||||
anchored = 1
|
anchored = 1
|
||||||
density = 1
|
density = 1
|
||||||
obj_integrity = 250
|
obj_integrity = 250
|
||||||
max_integrity = 250
|
max_integrity = 250
|
||||||
|
|
||||||
var/obj/item/clothing/suit/space/suit = null
|
var/obj/item/clothing/suit/space/suit = null
|
||||||
var/obj/item/clothing/head/helmet/space/helmet = null
|
var/obj/item/clothing/head/helmet/space/helmet = null
|
||||||
var/obj/item/clothing/mask/mask = null
|
var/obj/item/clothing/mask/mask = null
|
||||||
var/obj/item/storage = null
|
var/obj/item/storage = null
|
||||||
|
|
||||||
var/suit_type = null
|
var/suit_type = null
|
||||||
var/helmet_type = null
|
var/helmet_type = null
|
||||||
var/mask_type = null
|
var/mask_type = null
|
||||||
var/storage_type = null
|
var/storage_type = null
|
||||||
|
|
||||||
state_open = FALSE
|
state_open = FALSE
|
||||||
var/locked = FALSE
|
var/locked = FALSE
|
||||||
panel_open = FALSE
|
panel_open = FALSE
|
||||||
var/safeties = TRUE
|
var/safeties = TRUE
|
||||||
|
|
||||||
var/uv = FALSE
|
var/uv = FALSE
|
||||||
var/uv_super = FALSE
|
var/uv_super = FALSE
|
||||||
var/uv_cycles = 6
|
var/uv_cycles = 6
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/standard_unit
|
/obj/machinery/suit_storage_unit/standard_unit
|
||||||
suit_type = /obj/item/clothing/suit/space/eva
|
suit_type = /obj/item/clothing/suit/space/eva
|
||||||
helmet_type = /obj/item/clothing/head/helmet/space/eva
|
helmet_type = /obj/item/clothing/head/helmet/space/eva
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/captain
|
/obj/machinery/suit_storage_unit/captain
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/captain
|
suit_type = /obj/item/clothing/suit/space/hardsuit/captain
|
||||||
mask_type = /obj/item/clothing/mask/gas/sechailer
|
mask_type = /obj/item/clothing/mask/gas/sechailer
|
||||||
storage_type = /obj/item/weapon/tank/jetpack/oxygen/captain
|
storage_type = /obj/item/weapon/tank/jetpack/oxygen/captain
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/engine
|
/obj/machinery/suit_storage_unit/engine
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine
|
suit_type = /obj/item/clothing/suit/space/hardsuit/engine
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ce
|
/obj/machinery/suit_storage_unit/ce
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite
|
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
storage_type= /obj/item/clothing/shoes/magboots/advance
|
storage_type= /obj/item/clothing/shoes/magboots/advance
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/security
|
/obj/machinery/suit_storage_unit/security
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/security
|
suit_type = /obj/item/clothing/suit/space/hardsuit/security
|
||||||
mask_type = /obj/item/clothing/mask/gas/sechailer
|
mask_type = /obj/item/clothing/mask/gas/sechailer
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/hos
|
/obj/machinery/suit_storage_unit/hos
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos
|
suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos
|
||||||
mask_type = /obj/item/clothing/mask/gas/sechailer
|
mask_type = /obj/item/clothing/mask/gas/sechailer
|
||||||
storage_type = /obj/item/weapon/tank/internals/oxygen
|
storage_type = /obj/item/weapon/tank/internals/oxygen
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/atmos
|
/obj/machinery/suit_storage_unit/atmos
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos
|
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos
|
||||||
mask_type = /obj/item/clothing/mask/gas
|
mask_type = /obj/item/clothing/mask/gas
|
||||||
storage_type = /obj/item/weapon/watertank/atmos
|
storage_type = /obj/item/weapon/watertank/atmos
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/mining
|
/obj/machinery/suit_storage_unit/mining
|
||||||
suit_type = /obj/item/clothing/suit/hooded/explorer
|
suit_type = /obj/item/clothing/suit/hooded/explorer
|
||||||
mask_type = /obj/item/clothing/mask/gas/explorer
|
mask_type = /obj/item/clothing/mask/gas/explorer
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/mining/eva
|
/obj/machinery/suit_storage_unit/mining/eva
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/mining
|
suit_type = /obj/item/clothing/suit/space/hardsuit/mining
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/cmo
|
/obj/machinery/suit_storage_unit/cmo
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/medical
|
suit_type = /obj/item/clothing/suit/space/hardsuit/medical
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/rd
|
/obj/machinery/suit_storage_unit/rd
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/rd
|
suit_type = /obj/item/clothing/suit/space/hardsuit/rd
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/syndicate
|
/obj/machinery/suit_storage_unit/syndicate
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/syndi
|
suit_type = /obj/item/clothing/suit/space/hardsuit/syndi
|
||||||
mask_type = /obj/item/clothing/mask/gas/syndicate
|
mask_type = /obj/item/clothing/mask/gas/syndicate
|
||||||
storage_type = /obj/item/weapon/tank/jetpack/oxygen/harness
|
storage_type = /obj/item/weapon/tank/jetpack/oxygen/harness
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ert/command
|
/obj/machinery/suit_storage_unit/ert/command
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/ert
|
suit_type = /obj/item/clothing/suit/space/hardsuit/ert
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ert/security
|
/obj/machinery/suit_storage_unit/ert/security
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/ert/sec
|
suit_type = /obj/item/clothing/suit/space/hardsuit/ert/sec
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ert/engineer
|
/obj/machinery/suit_storage_unit/ert/engineer
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/ert/engi
|
suit_type = /obj/item/clothing/suit/space/hardsuit/ert/engi
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ert/medical
|
/obj/machinery/suit_storage_unit/ert/medical
|
||||||
suit_type = /obj/item/clothing/suit/space/hardsuit/ert/med
|
suit_type = /obj/item/clothing/suit/space/hardsuit/ert/med
|
||||||
mask_type = /obj/item/clothing/mask/breath
|
mask_type = /obj/item/clothing/mask/breath
|
||||||
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/New()
|
/obj/machinery/suit_storage_unit/New()
|
||||||
..()
|
..()
|
||||||
wires = new /datum/wires/suit_storage_unit(src)
|
wires = new /datum/wires/suit_storage_unit(src)
|
||||||
if(suit_type)
|
if(suit_type)
|
||||||
suit = new suit_type(src)
|
suit = new suit_type(src)
|
||||||
if(helmet_type)
|
if(helmet_type)
|
||||||
helmet = new helmet_type(src)
|
helmet = new helmet_type(src)
|
||||||
if(mask_type)
|
if(mask_type)
|
||||||
mask = new mask_type(src)
|
mask = new mask_type(src)
|
||||||
if(storage_type)
|
if(storage_type)
|
||||||
storage = new storage_type(src)
|
storage = new storage_type(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/Destroy()
|
/obj/machinery/suit_storage_unit/Destroy()
|
||||||
if(suit)
|
if(suit)
|
||||||
qdel(suit)
|
qdel(suit)
|
||||||
suit = null
|
suit = null
|
||||||
if(helmet)
|
if(helmet)
|
||||||
qdel(helmet)
|
qdel(helmet)
|
||||||
helmet = null
|
helmet = null
|
||||||
if(mask)
|
if(mask)
|
||||||
qdel(mask)
|
qdel(mask)
|
||||||
mask = null
|
mask = null
|
||||||
if(storage)
|
if(storage)
|
||||||
qdel(storage)
|
qdel(storage)
|
||||||
storage = null
|
storage = null
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/update_icon()
|
/obj/machinery/suit_storage_unit/update_icon()
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
|
|
||||||
if(uv)
|
if(uv)
|
||||||
if(uv_super)
|
if(uv_super)
|
||||||
add_overlay("super")
|
add_overlay("super")
|
||||||
else if(occupant)
|
else if(occupant)
|
||||||
add_overlay("uvhuman")
|
add_overlay("uvhuman")
|
||||||
else
|
else
|
||||||
add_overlay("uv")
|
add_overlay("uv")
|
||||||
else if(state_open)
|
else if(state_open)
|
||||||
if(stat & BROKEN)
|
if(stat & BROKEN)
|
||||||
add_overlay("broken")
|
add_overlay("broken")
|
||||||
else
|
else
|
||||||
add_overlay("open")
|
add_overlay("open")
|
||||||
if(suit)
|
if(suit)
|
||||||
add_overlay("suit")
|
add_overlay("suit")
|
||||||
if(helmet)
|
if(helmet)
|
||||||
add_overlay("helm")
|
add_overlay("helm")
|
||||||
if(storage)
|
if(storage)
|
||||||
add_overlay("storage")
|
add_overlay("storage")
|
||||||
else if(occupant)
|
else if(occupant)
|
||||||
add_overlay("human")
|
add_overlay("human")
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/power_change()
|
/obj/machinery/suit_storage_unit/power_change()
|
||||||
..()
|
..()
|
||||||
if(!is_operational() && state_open)
|
if(!is_operational() && state_open)
|
||||||
open_machine()
|
open_machine()
|
||||||
dump_contents()
|
dump_contents()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/proc/dump_contents()
|
/obj/machinery/suit_storage_unit/proc/dump_contents()
|
||||||
dropContents()
|
dropContents()
|
||||||
helmet = null
|
helmet = null
|
||||||
suit = null
|
suit = null
|
||||||
mask = null
|
mask = null
|
||||||
storage = null
|
storage = null
|
||||||
occupant = null
|
occupant = null
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE)
|
/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE)
|
||||||
if(!(flags & NODECONSTRUCT))
|
if(!(flags & NODECONSTRUCT))
|
||||||
open_machine()
|
open_machine()
|
||||||
dump_contents()
|
dump_contents()
|
||||||
new /obj/item/stack/sheet/metal (loc, 2)
|
new /obj/item/stack/sheet/metal (loc, 2)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/user)
|
/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/user)
|
||||||
if(user.stat || user.lying || !Adjacent(user) || !Adjacent(A) || !isliving(A))
|
if(user.stat || user.lying || !Adjacent(user) || !Adjacent(A) || !isliving(A))
|
||||||
return
|
return
|
||||||
var/mob/living/target = A
|
var/mob/living/target = A
|
||||||
if(!state_open)
|
if(!state_open)
|
||||||
to_chat(user, "<span class='warning'>The unit's doors are shut!</span>")
|
to_chat(user, "<span class='warning'>The unit's doors are shut!</span>")
|
||||||
return
|
return
|
||||||
if(!is_operational())
|
if(!is_operational())
|
||||||
to_chat(user, "<span class='warning'>The unit is not operational!</span>")
|
to_chat(user, "<span class='warning'>The unit is not operational!</span>")
|
||||||
return
|
return
|
||||||
if(occupant || helmet || suit || storage)
|
if(occupant || helmet || suit || storage)
|
||||||
to_chat(user, "<span class='warning'>It's too cluttered inside to fit in!</span>")
|
to_chat(user, "<span class='warning'>It's too cluttered inside to fit in!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(target == user)
|
if(target == user)
|
||||||
user.visible_message("<span class='warning'>[user] starts squeezing into [src]!</span>", "<span class='notice'>You start working your way into [src]...</span>")
|
user.visible_message("<span class='warning'>[user] starts squeezing into [src]!</span>", "<span class='notice'>You start working your way into [src]...</span>")
|
||||||
else
|
else
|
||||||
target.visible_message("<span class='warning'>[user] starts shoving [target] into [src]!</span>", "<span class='userdanger'>[user] starts shoving you into [src]!</span>")
|
target.visible_message("<span class='warning'>[user] starts shoving [target] into [src]!</span>", "<span class='userdanger'>[user] starts shoving you into [src]!</span>")
|
||||||
|
|
||||||
if(do_mob(user, target, 30))
|
if(do_mob(user, target, 30))
|
||||||
if(occupant || helmet || suit || storage)
|
if(occupant || helmet || suit || storage)
|
||||||
return
|
return
|
||||||
if(target == user)
|
if(target == user)
|
||||||
user.visible_message("<span class='warning'>[user] slips into [src] and closes the door behind them!</span>", "<span class=notice'>You slip into [src]'s cramped space and shut its door.</span>")
|
user.visible_message("<span class='warning'>[user] slips into [src] and closes the door behind them!</span>", "<span class=notice'>You slip into [src]'s cramped space and shut its door.</span>")
|
||||||
else
|
else
|
||||||
target.visible_message("<span class='warning'>[user] pushes [target] into [src] and shuts its door!<span>", "<span class='userdanger'>[user] shoves you into [src] and shuts the door!</span>")
|
target.visible_message("<span class='warning'>[user] pushes [target] into [src] and shuts its door!<span>", "<span class='userdanger'>[user] shoves you into [src] and shuts the door!</span>")
|
||||||
close_machine(target)
|
close_machine(target)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/proc/cook()
|
/obj/machinery/suit_storage_unit/proc/cook()
|
||||||
if(uv_cycles)
|
if(uv_cycles)
|
||||||
uv_cycles--
|
uv_cycles--
|
||||||
uv = TRUE
|
uv = TRUE
|
||||||
locked = TRUE
|
locked = TRUE
|
||||||
update_icon()
|
update_icon()
|
||||||
if(occupant)
|
if(occupant)
|
||||||
var/mob/living/mob_occupant = occupant
|
var/mob/living/mob_occupant = occupant
|
||||||
if(uv_super)
|
if(uv_super)
|
||||||
mob_occupant.adjustFireLoss(rand(20, 36))
|
mob_occupant.adjustFireLoss(rand(20, 36))
|
||||||
else
|
else
|
||||||
mob_occupant.adjustFireLoss(rand(10, 16))
|
mob_occupant.adjustFireLoss(rand(10, 16))
|
||||||
mob_occupant.emote("scream")
|
mob_occupant.emote("scream")
|
||||||
addtimer(CALLBACK(src, .proc/cook), 50)
|
addtimer(CALLBACK(src, .proc/cook), 50)
|
||||||
else
|
else
|
||||||
uv_cycles = initial(uv_cycles)
|
uv_cycles = initial(uv_cycles)
|
||||||
uv = FALSE
|
uv = FALSE
|
||||||
locked = FALSE
|
locked = FALSE
|
||||||
if(uv_super)
|
if(uv_super)
|
||||||
visible_message("<span class='warning'>[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.</span>")
|
visible_message("<span class='warning'>[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.</span>")
|
||||||
playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, 1)
|
playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, 1)
|
||||||
helmet = null
|
helmet = null
|
||||||
qdel(helmet)
|
qdel(helmet)
|
||||||
suit = null
|
suit = null
|
||||||
qdel(suit) // Delete everything but the occupant.
|
qdel(suit) // Delete everything but the occupant.
|
||||||
mask = null
|
mask = null
|
||||||
qdel(mask)
|
qdel(mask)
|
||||||
storage = null
|
storage = null
|
||||||
qdel(storage)
|
qdel(storage)
|
||||||
// The wires get damaged too.
|
// The wires get damaged too.
|
||||||
wires.cut_all()
|
wires.cut_all()
|
||||||
else
|
else
|
||||||
if(!occupant)
|
if(!occupant)
|
||||||
visible_message("<span class='notice'>[src]'s door slides open. The glowing yellow lights dim to a gentle green.</span>")
|
visible_message("<span class='notice'>[src]'s door slides open. The glowing yellow lights dim to a gentle green.</span>")
|
||||||
else
|
else
|
||||||
visible_message("<span class='warning'>[src]'s door slides open, barraging you with the nauseating smell of charred flesh.</span>")
|
visible_message("<span class='warning'>[src]'s door slides open, barraging you with the nauseating smell of charred flesh.</span>")
|
||||||
playsound(src, 'sound/machines/AirlockClose.ogg', 25, 1)
|
playsound(src, 'sound/machines/AirlockClose.ogg', 25, 1)
|
||||||
for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
|
for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
|
||||||
I.clean_blood()
|
I.clean_blood()
|
||||||
I.fingerprints = list()
|
I.fingerprints = list()
|
||||||
open_machine(FALSE)
|
open_machine(FALSE)
|
||||||
if(occupant)
|
if(occupant)
|
||||||
dump_contents()
|
dump_contents()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb)
|
/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb)
|
||||||
if(!prob(prb))
|
if(!prob(prb))
|
||||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||||
s.set_up(5, 1, src)
|
s.set_up(5, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
if(electrocute_mob(user, src, src, 1, TRUE))
|
if(electrocute_mob(user, src, src, 1, TRUE))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/relaymove(mob/user)
|
/obj/machinery/suit_storage_unit/relaymove(mob/user)
|
||||||
container_resist(user)
|
container_resist(user)
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/container_resist(mob/living/user)
|
/obj/machinery/suit_storage_unit/container_resist(mob/living/user)
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
if(locked)
|
if(locked)
|
||||||
visible_message("<span class='notice'>You see [user] kicking against the doors of [src]!</span>", "<span class='notice'>You start kicking against the doors...</span>")
|
visible_message("<span class='notice'>You see [user] kicking against the doors of [src]!</span>", "<span class='notice'>You start kicking against the doors...</span>")
|
||||||
addtimer(CALLBACK(src, .proc/resist_open, user), 300)
|
addtimer(CALLBACK(src, .proc/resist_open, user), 300)
|
||||||
else
|
else
|
||||||
open_machine()
|
open_machine()
|
||||||
dump_contents()
|
dump_contents()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/proc/resist_open(mob/user)
|
/obj/machinery/suit_storage_unit/proc/resist_open(mob/user)
|
||||||
if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here.
|
if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here.
|
||||||
visible_message("<span class='notice'>You see [user] bursts out of [src]!</span>", "<span class='notice'>You escape the cramped confines of [src]!</span>")
|
visible_message("<span class='notice'>You see [user] bursts out of [src]!</span>", "<span class='notice'>You escape the cramped confines of [src]!</span>")
|
||||||
open_machine()
|
open_machine()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
|
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
|
||||||
if(state_open && is_operational())
|
if(state_open && is_operational())
|
||||||
if(istype(I, /obj/item/clothing/suit/space))
|
if(istype(I, /obj/item/clothing/suit/space))
|
||||||
if(suit)
|
if(suit)
|
||||||
to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>")
|
to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>")
|
||||||
return
|
return
|
||||||
if(!user.drop_item())
|
if(!user.drop_item())
|
||||||
return
|
return
|
||||||
suit = I
|
suit = I
|
||||||
else if(istype(I, /obj/item/clothing/head/helmet))
|
else if(istype(I, /obj/item/clothing/head/helmet))
|
||||||
if(helmet)
|
if(helmet)
|
||||||
to_chat(user, "<span class='warning'>The unit already contains a helmet!</span>")
|
to_chat(user, "<span class='warning'>The unit already contains a helmet!</span>")
|
||||||
return
|
return
|
||||||
if(!user.drop_item())
|
if(!user.drop_item())
|
||||||
return
|
return
|
||||||
helmet = I
|
helmet = I
|
||||||
else if(istype(I, /obj/item/clothing/mask))
|
else if(istype(I, /obj/item/clothing/mask))
|
||||||
if(mask)
|
if(mask)
|
||||||
to_chat(user, "<span class='warning'>The unit already contains a mask!</span>")
|
to_chat(user, "<span class='warning'>The unit already contains a mask!</span>")
|
||||||
return
|
return
|
||||||
if(!user.drop_item())
|
if(!user.drop_item())
|
||||||
return
|
return
|
||||||
mask = I
|
mask = I
|
||||||
else
|
else
|
||||||
if(storage)
|
if(storage)
|
||||||
to_chat(user, "<span class='warning'>The auxiliary storage compartment is full!</span>")
|
to_chat(user, "<span class='warning'>The auxiliary storage compartment is full!</span>")
|
||||||
return
|
return
|
||||||
if(!user.drop_item())
|
if(!user.drop_item())
|
||||||
return
|
return
|
||||||
storage = I
|
storage = I
|
||||||
|
|
||||||
I.loc = src
|
I.loc = src
|
||||||
visible_message("<span class='notice'>[user] inserts [I] into [src]</span>", "<span class='notice'>You load [I] into [src].</span>")
|
visible_message("<span class='notice'>[user] inserts [I] into [src]</span>", "<span class='notice'>You load [I] into [src].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
if(panel_open && is_wire_tool(I))
|
if(panel_open && is_wire_tool(I))
|
||||||
wires.interact(user)
|
wires.interact(user)
|
||||||
if(!state_open)
|
if(!state_open)
|
||||||
if(default_deconstruction_screwdriver(user, "panel", "close", I))
|
if(default_deconstruction_screwdriver(user, "panel", "close", I))
|
||||||
return
|
return
|
||||||
if(default_pry_open(I))
|
if(default_pry_open(I))
|
||||||
dump_contents()
|
dump_contents()
|
||||||
return
|
return
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state)
|
ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ui_data()
|
/obj/machinery/suit_storage_unit/ui_data()
|
||||||
var/list/data = list()
|
var/list/data = list()
|
||||||
data["locked"] = locked
|
data["locked"] = locked
|
||||||
data["open"] = state_open
|
data["open"] = state_open
|
||||||
data["safeties"] = safeties
|
data["safeties"] = safeties
|
||||||
data["uv_active"] = uv
|
data["uv_active"] = uv
|
||||||
data["uv_super"] = uv_super
|
data["uv_super"] = uv_super
|
||||||
if(helmet)
|
if(helmet)
|
||||||
data["helmet"] = helmet.name
|
data["helmet"] = helmet.name
|
||||||
if(suit)
|
if(suit)
|
||||||
data["suit"] = suit.name
|
data["suit"] = suit.name
|
||||||
if(mask)
|
if(mask)
|
||||||
data["mask"] = mask.name
|
data["mask"] = mask.name
|
||||||
if(storage)
|
if(storage)
|
||||||
data["storage"] = storage.name
|
data["storage"] = storage.name
|
||||||
if(occupant)
|
if(occupant)
|
||||||
data["occupied"] = 1
|
data["occupied"] = 1
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/obj/machinery/suit_storage_unit/ui_act(action, params)
|
/obj/machinery/suit_storage_unit/ui_act(action, params)
|
||||||
if(..() || uv)
|
if(..() || uv)
|
||||||
return
|
return
|
||||||
switch(action)
|
switch(action)
|
||||||
if("door")
|
if("door")
|
||||||
if(state_open)
|
if(state_open)
|
||||||
close_machine()
|
close_machine()
|
||||||
else
|
else
|
||||||
open_machine(0)
|
open_machine(0)
|
||||||
if(occupant)
|
if(occupant)
|
||||||
dump_contents() // Dump out contents if someone is in there.
|
dump_contents() // Dump out contents if someone is in there.
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("lock")
|
if("lock")
|
||||||
locked = !locked
|
locked = !locked
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("uv")
|
if("uv")
|
||||||
if(occupant && safeties)
|
if(occupant && safeties)
|
||||||
return
|
return
|
||||||
else if(!helmet && !mask && !suit && !storage && !occupant)
|
else if(!helmet && !mask && !suit && !storage && !occupant)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
if(occupant)
|
if(occupant)
|
||||||
var/mob/living/mob_occupant = occupant
|
var/mob/living/mob_occupant = occupant
|
||||||
to_chat(mob_occupant, "<span class='userdanger'>[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!</span>")
|
to_chat(mob_occupant, "<span class='userdanger'>[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!</span>")
|
||||||
cook()
|
cook()
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("dispense")
|
if("dispense")
|
||||||
if(!state_open)
|
if(!state_open)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/static/list/valid_items = list("helmet", "suit", "mask", "storage")
|
var/static/list/valid_items = list("helmet", "suit", "mask", "storage")
|
||||||
var/item_name = params["item"]
|
var/item_name = params["item"]
|
||||||
if(item_name in valid_items)
|
if(item_name in valid_items)
|
||||||
var/obj/item/I = vars[item_name]
|
var/obj/item/I = vars[item_name]
|
||||||
vars[item_name] = null
|
vars[item_name] = null
|
||||||
if(I)
|
if(I)
|
||||||
I.forceMove(loc)
|
I.forceMove(loc)
|
||||||
. = TRUE
|
. = TRUE
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
|
|
||||||
/obj/effect/portal
|
/obj/effect/portal
|
||||||
name = "portal"
|
name = "portal"
|
||||||
desc = "Looks unstable. Best to test it with the clown."
|
desc = "Looks unstable. Best to test it with the clown."
|
||||||
icon = 'icons/obj/stationobjs.dmi'
|
icon = 'icons/obj/stationobjs.dmi'
|
||||||
icon_state = "portal"
|
icon_state = "portal"
|
||||||
density = 1
|
density = 1
|
||||||
var/obj/item/target = null
|
var/obj/item/target = null
|
||||||
var/creator = null
|
var/creator = null
|
||||||
anchored = 1
|
anchored = 1
|
||||||
var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
|
var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
|
||||||
var/mech_sized = FALSE
|
var/mech_sized = FALSE
|
||||||
|
|
||||||
/obj/effect/portal/Bumped(mob/M as mob|obj)
|
/obj/effect/portal/Bumped(mob/M as mob|obj)
|
||||||
teleport(M)
|
teleport(M)
|
||||||
|
|
||||||
/obj/effect/portal/attack_tk(mob/user)
|
/obj/effect/portal/attack_tk(mob/user)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/portal/attack_hand(mob/user)
|
/obj/effect/portal/attack_hand(mob/user)
|
||||||
if(Adjacent(user))
|
if(Adjacent(user))
|
||||||
teleport(user)
|
teleport(user)
|
||||||
|
|
||||||
/obj/effect/portal/attackby(obj/item/weapon/W, mob/user, params)
|
/obj/effect/portal/attackby(obj/item/weapon/W, mob/user, params)
|
||||||
if(user && Adjacent(user))
|
if(user && Adjacent(user))
|
||||||
teleport(user)
|
teleport(user)
|
||||||
|
|
||||||
/obj/effect/portal/make_frozen_visual()
|
/obj/effect/portal/make_frozen_visual()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
|
/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
|
||||||
..()
|
..()
|
||||||
GLOB.portals += src
|
GLOB.portals += src
|
||||||
src.target = target
|
src.target = target
|
||||||
src.creator = creator
|
src.creator = creator
|
||||||
|
|
||||||
var/area/A = get_area(target)
|
var/area/A = get_area(target)
|
||||||
if(A && A.noteleport) // No point in persisting if the target is unreachable.
|
if(A && A.noteleport) // No point in persisting if the target is unreachable.
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return
|
return
|
||||||
if(lifespan > 0)
|
if(lifespan > 0)
|
||||||
QDEL_IN(src, lifespan)
|
QDEL_IN(src, lifespan)
|
||||||
|
|
||||||
/obj/effect/portal/Destroy()
|
/obj/effect/portal/Destroy()
|
||||||
GLOB.portals -= src
|
GLOB.portals -= src
|
||||||
if(istype(creator, /obj/item/weapon/hand_tele))
|
if(istype(creator, /obj/item/weapon/hand_tele))
|
||||||
var/obj/item/weapon/hand_tele/O = creator
|
var/obj/item/weapon/hand_tele/O = creator
|
||||||
O.active_portals--
|
O.active_portals--
|
||||||
else if(istype(creator, /obj/item/weapon/gun/energy/wormhole_projector))
|
else if(istype(creator, /obj/item/weapon/gun/energy/wormhole_projector))
|
||||||
var/obj/item/weapon/gun/energy/wormhole_projector/P = creator
|
var/obj/item/weapon/gun/energy/wormhole_projector/P = creator
|
||||||
P.portal_destroyed(src)
|
P.portal_destroyed(src)
|
||||||
creator = null
|
creator = null
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
|
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
|
||||||
if(istype(M, /obj/effect)) //sparks don't teleport
|
if(istype(M, /obj/effect)) //sparks don't teleport
|
||||||
return
|
return
|
||||||
if(M.anchored)
|
if(M.anchored)
|
||||||
if(!(istype(M, /obj/mecha) && mech_sized))
|
if(!(istype(M, /obj/mecha) && mech_sized))
|
||||||
return
|
return
|
||||||
if (!( target ))
|
if (!( target ))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return
|
return
|
||||||
if (istype(M, /atom/movable))
|
if (istype(M, /atom/movable))
|
||||||
if(ismegafauna(M))
|
if(ismegafauna(M))
|
||||||
message_admins("[M] [ADMIN_FLW(M)] has teleported through [src].")
|
message_admins("[M] [ADMIN_FLW(M)] has teleported through [src].")
|
||||||
do_teleport(M, target, precision) ///You will appear adjacent to the beacon
|
do_teleport(M, target, precision) ///You will appear adjacent to the beacon
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
var/on = 0 //Are we currently active??
|
var/on = 0 //Are we currently active??
|
||||||
var/menu_message = ""
|
var/menu_message = ""
|
||||||
|
|
||||||
/obj/item/radio/integrated/Initialize()
|
/obj/item/radio/integrated/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
if (istype(loc.loc, /obj/item/device/pda))
|
if (istype(loc.loc, /obj/item/device/pda))
|
||||||
hostpda = loc.loc
|
hostpda = loc.loc
|
||||||
|
|
||||||
|
|||||||
@@ -1,145 +1,145 @@
|
|||||||
// Powersink - used to drain station power
|
// Powersink - used to drain station power
|
||||||
|
|
||||||
/obj/item/device/powersink
|
/obj/item/device/powersink
|
||||||
desc = "A nulling power sink which drains energy from electrical systems."
|
desc = "A nulling power sink which drains energy from electrical systems."
|
||||||
name = "power sink"
|
name = "power sink"
|
||||||
icon_state = "powersink0"
|
icon_state = "powersink0"
|
||||||
item_state = "electronic"
|
item_state = "electronic"
|
||||||
w_class = WEIGHT_CLASS_BULKY
|
w_class = WEIGHT_CLASS_BULKY
|
||||||
flags = CONDUCT
|
flags = CONDUCT
|
||||||
throwforce = 5
|
throwforce = 5
|
||||||
throw_speed = 1
|
throw_speed = 1
|
||||||
throw_range = 2
|
throw_range = 2
|
||||||
materials = list(MAT_METAL=750)
|
materials = list(MAT_METAL=750)
|
||||||
origin_tech = "powerstorage=5;syndicate=5"
|
origin_tech = "powerstorage=5;syndicate=5"
|
||||||
var/drain_rate = 1600000 // amount of power to drain per tick
|
var/drain_rate = 1600000 // amount of power to drain per tick
|
||||||
var/power_drained = 0 // has drained this much power
|
var/power_drained = 0 // has drained this much power
|
||||||
var/max_power = 1e10 // maximum power that can be drained before exploding
|
var/max_power = 1e10 // maximum power that can be drained before exploding
|
||||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||||
var/admins_warned = 0 // stop spam, only warn the admins once that we are about to boom
|
var/admins_warned = 0 // stop spam, only warn the admins once that we are about to boom
|
||||||
|
|
||||||
var/const/DISCONNECTED = 0
|
var/const/DISCONNECTED = 0
|
||||||
var/const/CLAMPED_OFF = 1
|
var/const/CLAMPED_OFF = 1
|
||||||
var/const/OPERATING = 2
|
var/const/OPERATING = 2
|
||||||
|
|
||||||
var/obj/structure/cable/attached // the attached cable
|
var/obj/structure/cable/attached // the attached cable
|
||||||
|
|
||||||
/obj/item/device/powersink/update_icon()
|
/obj/item/device/powersink/update_icon()
|
||||||
icon_state = "powersink[mode == OPERATING]"
|
icon_state = "powersink[mode == OPERATING]"
|
||||||
|
|
||||||
/obj/item/device/powersink/proc/set_mode(value)
|
/obj/item/device/powersink/proc/set_mode(value)
|
||||||
if(value == mode)
|
if(value == mode)
|
||||||
return
|
return
|
||||||
switch(value)
|
switch(value)
|
||||||
if(DISCONNECTED)
|
if(DISCONNECTED)
|
||||||
attached = null
|
attached = null
|
||||||
if(mode == OPERATING)
|
if(mode == OPERATING)
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
anchored = 0
|
anchored = 0
|
||||||
|
|
||||||
if(CLAMPED_OFF)
|
if(CLAMPED_OFF)
|
||||||
if(!attached)
|
if(!attached)
|
||||||
return
|
return
|
||||||
if(mode == OPERATING)
|
if(mode == OPERATING)
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
anchored = 1
|
anchored = 1
|
||||||
|
|
||||||
if(OPERATING)
|
if(OPERATING)
|
||||||
if(!attached)
|
if(!attached)
|
||||||
return
|
return
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
anchored = 1
|
anchored = 1
|
||||||
|
|
||||||
mode = value
|
mode = value
|
||||||
update_icon()
|
update_icon()
|
||||||
set_light(0)
|
set_light(0)
|
||||||
|
|
||||||
/obj/item/device/powersink/attackby(obj/item/I, mob/user, params)
|
/obj/item/device/powersink/attackby(obj/item/I, mob/user, params)
|
||||||
if(istype(I, /obj/item/weapon/screwdriver))
|
if(istype(I, /obj/item/weapon/screwdriver))
|
||||||
if(mode == DISCONNECTED)
|
if(mode == DISCONNECTED)
|
||||||
var/turf/T = loc
|
var/turf/T = loc
|
||||||
if(isturf(T) && !T.intact)
|
if(isturf(T) && !T.intact)
|
||||||
attached = locate() in T
|
attached = locate() in T
|
||||||
if(!attached)
|
if(!attached)
|
||||||
to_chat(user, "<span class='warning'>This device must be placed over an exposed, powered cable node!</span>")
|
to_chat(user, "<span class='warning'>This device must be placed over an exposed, powered cable node!</span>")
|
||||||
else
|
else
|
||||||
set_mode(CLAMPED_OFF)
|
set_mode(CLAMPED_OFF)
|
||||||
user.visible_message( \
|
user.visible_message( \
|
||||||
"[user] attaches \the [src] to the cable.", \
|
"[user] attaches \the [src] to the cable.", \
|
||||||
"<span class='notice'>You attach \the [src] to the cable.</span>",
|
"<span class='notice'>You attach \the [src] to the cable.</span>",
|
||||||
"<span class='italics'>You hear some wires being connected to something.</span>")
|
"<span class='italics'>You hear some wires being connected to something.</span>")
|
||||||
else
|
else
|
||||||
to_chat(user, "<span class='warning'>This device must be placed over an exposed, powered cable node!</span>")
|
to_chat(user, "<span class='warning'>This device must be placed over an exposed, powered cable node!</span>")
|
||||||
else
|
else
|
||||||
set_mode(DISCONNECTED)
|
set_mode(DISCONNECTED)
|
||||||
user.visible_message( \
|
user.visible_message( \
|
||||||
"[user] detaches \the [src] from the cable.", \
|
"[user] detaches \the [src] from the cable.", \
|
||||||
"<span class='notice'>You detach \the [src] from the cable.</span>",
|
"<span class='notice'>You detach \the [src] from the cable.</span>",
|
||||||
"<span class='italics'>You hear some wires being disconnected from something.</span>")
|
"<span class='italics'>You hear some wires being disconnected from something.</span>")
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/device/powersink/attack_paw()
|
/obj/item/device/powersink/attack_paw()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/device/powersink/attack_ai()
|
/obj/item/device/powersink/attack_ai()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/device/powersink/attack_hand(mob/user)
|
/obj/item/device/powersink/attack_hand(mob/user)
|
||||||
switch(mode)
|
switch(mode)
|
||||||
if(DISCONNECTED)
|
if(DISCONNECTED)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
if(CLAMPED_OFF)
|
if(CLAMPED_OFF)
|
||||||
user.visible_message( \
|
user.visible_message( \
|
||||||
"[user] activates \the [src]!", \
|
"[user] activates \the [src]!", \
|
||||||
"<span class='notice'>You activate \the [src].</span>",
|
"<span class='notice'>You activate \the [src].</span>",
|
||||||
"<span class='italics'>You hear a click.</span>")
|
"<span class='italics'>You hear a click.</span>")
|
||||||
message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(src)]")
|
message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(src)]")
|
||||||
log_game("Power sink activated by [key_name(user)] at [COORD(src)]")
|
log_game("Power sink activated by [key_name(user)] at [COORD(src)]")
|
||||||
set_mode(OPERATING)
|
set_mode(OPERATING)
|
||||||
|
|
||||||
if(OPERATING)
|
if(OPERATING)
|
||||||
user.visible_message( \
|
user.visible_message( \
|
||||||
"[user] deactivates \the [src]!", \
|
"[user] deactivates \the [src]!", \
|
||||||
"<span class='notice'>You deactivate \the [src].</span>",
|
"<span class='notice'>You deactivate \the [src].</span>",
|
||||||
"<span class='italics'>You hear a click.</span>")
|
"<span class='italics'>You hear a click.</span>")
|
||||||
set_mode(CLAMPED_OFF)
|
set_mode(CLAMPED_OFF)
|
||||||
|
|
||||||
/obj/item/device/powersink/process()
|
/obj/item/device/powersink/process()
|
||||||
if(!attached)
|
if(!attached)
|
||||||
set_mode(DISCONNECTED)
|
set_mode(DISCONNECTED)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/datum/powernet/PN = attached.powernet
|
var/datum/powernet/PN = attached.powernet
|
||||||
if(PN)
|
if(PN)
|
||||||
set_light(5)
|
set_light(5)
|
||||||
|
|
||||||
// found a powernet, so drain up to max power from it
|
// found a powernet, so drain up to max power from it
|
||||||
|
|
||||||
var/drained = min ( drain_rate, PN.avail )
|
var/drained = min ( drain_rate, PN.avail )
|
||||||
PN.load += drained
|
PN.load += drained
|
||||||
power_drained += drained
|
power_drained += drained
|
||||||
|
|
||||||
// if tried to drain more than available on powernet
|
// if tried to drain more than available on powernet
|
||||||
// now look for APCs and drain their cells
|
// now look for APCs and drain their cells
|
||||||
if(drained < drain_rate)
|
if(drained < drain_rate)
|
||||||
for(var/obj/machinery/power/terminal/T in PN.nodes)
|
for(var/obj/machinery/power/terminal/T in PN.nodes)
|
||||||
if(istype(T.master, /obj/machinery/power/apc))
|
if(istype(T.master, /obj/machinery/power/apc))
|
||||||
var/obj/machinery/power/apc/A = T.master
|
var/obj/machinery/power/apc/A = T.master
|
||||||
if(A.operating && A.cell)
|
if(A.operating && A.cell)
|
||||||
A.cell.charge = max(0, A.cell.charge - 50)
|
A.cell.charge = max(0, A.cell.charge - 50)
|
||||||
power_drained += 50
|
power_drained += 50
|
||||||
if(A.charging == 2) // If the cell was full
|
if(A.charging == 2) // If the cell was full
|
||||||
A.charging = 1 // It's no longer full
|
A.charging = 1 // It's no longer full
|
||||||
|
|
||||||
if(power_drained > max_power * 0.98)
|
if(power_drained > max_power * 0.98)
|
||||||
if (!admins_warned)
|
if (!admins_warned)
|
||||||
admins_warned = 1
|
admins_warned = 1
|
||||||
message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) is 95% full. Explosion imminent.")
|
message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) is 95% full. Explosion imminent.")
|
||||||
playsound(src, 'sound/effects/screech.ogg', 100, 1, 1)
|
playsound(src, 'sound/effects/screech.ogg', 100, 1, 1)
|
||||||
|
|
||||||
if(power_drained >= max_power)
|
if(power_drained >= max_power)
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
explosion(src.loc, 4,8,16,32)
|
explosion(src.loc, 4,8,16,32)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
origin_tech = "bluespace=1"
|
origin_tech = "bluespace=1"
|
||||||
dog_fashion = null
|
dog_fashion = null
|
||||||
|
|
||||||
/obj/item/device/radio/beacon/Initialize()
|
/obj/item/device/radio/beacon/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
GLOB.teleportbeacons += src
|
GLOB.teleportbeacons += src
|
||||||
|
|
||||||
/obj/item/device/radio/beacon/Destroy()
|
/obj/item/device/radio/beacon/Destroy()
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
var/obj/item/device/encryptionkey/keyslot2 = null
|
var/obj/item/device/encryptionkey/keyslot2 = null
|
||||||
dog_fashion = null
|
dog_fashion = null
|
||||||
|
|
||||||
/obj/item/device/radio/headset/Initialize()
|
/obj/item/device/radio/headset/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
recalculateChannels()
|
recalculateChannels()
|
||||||
|
|
||||||
/obj/item/device/radio/headset/Destroy()
|
/obj/item/device/radio/headset/Destroy()
|
||||||
@@ -47,21 +47,21 @@
|
|||||||
item_state = "syndie_headset"
|
item_state = "syndie_headset"
|
||||||
|
|
||||||
/obj/item/device/radio/headset/syndicate/alt/Initialize(mapload)
|
/obj/item/device/radio/headset/syndicate/alt/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||||
|
|
||||||
/obj/item/device/radio/headset/syndicate/alt/leader
|
/obj/item/device/radio/headset/syndicate/alt/leader
|
||||||
name = "team leader headset"
|
name = "team leader headset"
|
||||||
command = TRUE
|
command = TRUE
|
||||||
|
|
||||||
/obj/item/device/radio/headset/syndicate/Initialize()
|
/obj/item/device/radio/headset/syndicate/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
make_syndie()
|
make_syndie()
|
||||||
|
|
||||||
/obj/item/device/radio/headset/binary
|
/obj/item/device/radio/headset/binary
|
||||||
origin_tech = "syndicate=3"
|
origin_tech = "syndicate=3"
|
||||||
/obj/item/device/radio/headset/binary/Initialize()
|
/obj/item/device/radio/headset/binary/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
qdel(keyslot)
|
qdel(keyslot)
|
||||||
keyslot = new /obj/item/device/encryptionkey/binary
|
keyslot = new /obj/item/device/encryptionkey/binary
|
||||||
recalculateChannels()
|
recalculateChannels()
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
item_state = "sec_headset_alt"
|
item_state = "sec_headset_alt"
|
||||||
|
|
||||||
/obj/item/device/radio/headset/headset_sec/alt/Initialize(mapload)
|
/obj/item/device/radio/headset/headset_sec/alt/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||||
|
|
||||||
/obj/item/device/radio/headset/headset_eng
|
/obj/item/device/radio/headset/headset_eng
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
item_state = "com_headset_alt"
|
item_state = "com_headset_alt"
|
||||||
|
|
||||||
/obj/item/device/radio/headset/heads/captain/alt/Initialize(mapload)
|
/obj/item/device/radio/headset/heads/captain/alt/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||||
|
|
||||||
/obj/item/device/radio/headset/heads/rd
|
/obj/item/device/radio/headset/heads/rd
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
item_state = "com_headset_alt"
|
item_state = "com_headset_alt"
|
||||||
|
|
||||||
/obj/item/device/radio/headset/heads/hos/alt/Initialize(mapload)
|
/obj/item/device/radio/headset/heads/hos/alt/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||||
|
|
||||||
/obj/item/device/radio/headset/heads/ce
|
/obj/item/device/radio/headset/heads/ce
|
||||||
@@ -213,7 +213,7 @@
|
|||||||
keyslot = null
|
keyslot = null
|
||||||
|
|
||||||
/obj/item/device/radio/headset/headset_cent/alt/Initialize(mapload)
|
/obj/item/device/radio/headset/headset_cent/alt/Initialize(mapload)
|
||||||
. = ..()
|
. = ..()
|
||||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||||
|
|
||||||
/obj/item/device/radio/headset/ai
|
/obj/item/device/radio/headset/ai
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
var/last_tick //used to delay the powercheck
|
var/last_tick //used to delay the powercheck
|
||||||
dog_fashion = null
|
dog_fashion = null
|
||||||
|
|
||||||
/obj/item/device/radio/intercom/Initialize()
|
/obj/item/device/radio/intercom/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
/obj/item/device/radio/intercom/Destroy()
|
/obj/item/device/radio/intercom/Destroy()
|
||||||
|
|||||||
@@ -1,211 +1,211 @@
|
|||||||
/obj/item/device/transfer_valve
|
/obj/item/device/transfer_valve
|
||||||
icon = 'icons/obj/assemblies.dmi'
|
icon = 'icons/obj/assemblies.dmi'
|
||||||
name = "tank transfer valve"
|
name = "tank transfer valve"
|
||||||
icon_state = "valve_1"
|
icon_state = "valve_1"
|
||||||
item_state = "ttv"
|
item_state = "ttv"
|
||||||
desc = "Regulates the transfer of air between two tanks"
|
desc = "Regulates the transfer of air between two tanks"
|
||||||
var/obj/item/weapon/tank/tank_one
|
var/obj/item/weapon/tank/tank_one
|
||||||
var/obj/item/weapon/tank/tank_two
|
var/obj/item/weapon/tank/tank_two
|
||||||
var/obj/item/device/attached_device
|
var/obj/item/device/attached_device
|
||||||
var/mob/attacher = null
|
var/mob/attacher = null
|
||||||
var/valve_open = 0
|
var/valve_open = 0
|
||||||
var/toggle = 1
|
var/toggle = 1
|
||||||
origin_tech = "materials=1;engineering=1"
|
origin_tech = "materials=1;engineering=1"
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/IsAssemblyHolder()
|
/obj/item/device/transfer_valve/IsAssemblyHolder()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params)
|
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params)
|
||||||
if(istype(item, /obj/item/weapon/tank))
|
if(istype(item, /obj/item/weapon/tank))
|
||||||
if(tank_one && tank_two)
|
if(tank_one && tank_two)
|
||||||
to_chat(user, "<span class='warning'>There are already two tanks attached, remove one first!</span>")
|
to_chat(user, "<span class='warning'>There are already two tanks attached, remove one first!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!tank_one)
|
if(!tank_one)
|
||||||
if(!user.transferItemToLoc(item, src))
|
if(!user.transferItemToLoc(item, src))
|
||||||
return
|
return
|
||||||
tank_one = item
|
tank_one = item
|
||||||
to_chat(user, "<span class='notice'>You attach the tank to the transfer valve.</span>")
|
to_chat(user, "<span class='notice'>You attach the tank to the transfer valve.</span>")
|
||||||
if(item.w_class > w_class)
|
if(item.w_class > w_class)
|
||||||
w_class = item.w_class
|
w_class = item.w_class
|
||||||
else if(!tank_two)
|
else if(!tank_two)
|
||||||
if(!user.transferItemToLoc(item, src))
|
if(!user.transferItemToLoc(item, src))
|
||||||
return
|
return
|
||||||
tank_two = item
|
tank_two = item
|
||||||
to_chat(user, "<span class='notice'>You attach the tank to the transfer valve.</span>")
|
to_chat(user, "<span class='notice'>You attach the tank to the transfer valve.</span>")
|
||||||
if(item.w_class > w_class)
|
if(item.w_class > w_class)
|
||||||
w_class = item.w_class
|
w_class = item.w_class
|
||||||
|
|
||||||
update_icon()
|
update_icon()
|
||||||
//TODO: Have this take an assemblyholder
|
//TODO: Have this take an assemblyholder
|
||||||
else if(isassembly(item))
|
else if(isassembly(item))
|
||||||
var/obj/item/device/assembly/A = item
|
var/obj/item/device/assembly/A = item
|
||||||
if(A.secured)
|
if(A.secured)
|
||||||
to_chat(user, "<span class='notice'>The device is secured.</span>")
|
to_chat(user, "<span class='notice'>The device is secured.</span>")
|
||||||
return
|
return
|
||||||
if(attached_device)
|
if(attached_device)
|
||||||
to_chat(user, "<span class='warning'>There is already a device attached to the valve, remove it first!</span>")
|
to_chat(user, "<span class='warning'>There is already a device attached to the valve, remove it first!</span>")
|
||||||
return
|
return
|
||||||
if(!user.transferItemToLoc(item, src))
|
if(!user.transferItemToLoc(item, src))
|
||||||
return
|
return
|
||||||
attached_device = A
|
attached_device = A
|
||||||
to_chat(user, "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>")
|
to_chat(user, "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>")
|
||||||
A.holder = src
|
A.holder = src
|
||||||
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
|
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
|
||||||
|
|
||||||
GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||||
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||||
attacher = user
|
attacher = user
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/attack_self(mob/user)
|
/obj/item/device/transfer_valve/attack_self(mob/user)
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
var/dat = {"<B> Valve properties: </B>
|
var/dat = {"<B> Valve properties: </B>
|
||||||
<BR> <B> Attachment one:</B> [tank_one] [tank_one ? "<A href='?src=\ref[src];tankone=1'>Remove</A>" : ""]
|
<BR> <B> Attachment one:</B> [tank_one] [tank_one ? "<A href='?src=\ref[src];tankone=1'>Remove</A>" : ""]
|
||||||
<BR> <B> Attachment two:</B> [tank_two] [tank_two ? "<A href='?src=\ref[src];tanktwo=1'>Remove</A>" : ""]
|
<BR> <B> Attachment two:</B> [tank_two] [tank_two ? "<A href='?src=\ref[src];tanktwo=1'>Remove</A>" : ""]
|
||||||
<BR> <B> Valve attachment:</B> [attached_device ? "<A href='?src=\ref[src];device=1'>[attached_device]</A>" : "None"] [attached_device ? "<A href='?src=\ref[src];rem_device=1'>Remove</A>" : ""]
|
<BR> <B> Valve attachment:</B> [attached_device ? "<A href='?src=\ref[src];device=1'>[attached_device]</A>" : "None"] [attached_device ? "<A href='?src=\ref[src];rem_device=1'>Remove</A>" : ""]
|
||||||
<BR> <B> Valve status: </B> [ valve_open ? "<A href='?src=\ref[src];open=1'>Closed</A> <B>Open</B>" : "<B>Closed</B> <A href='?src=\ref[src];open=1'>Open</A>"]"}
|
<BR> <B> Valve status: </B> [ valve_open ? "<A href='?src=\ref[src];open=1'>Closed</A> <B>Open</B>" : "<B>Closed</B> <A href='?src=\ref[src];open=1'>Open</A>"]"}
|
||||||
|
|
||||||
var/datum/browser/popup = new(user, "trans_valve", name)
|
var/datum/browser/popup = new(user, "trans_valve", name)
|
||||||
popup.set_content(dat)
|
popup.set_content(dat)
|
||||||
popup.open()
|
popup.open()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/Topic(href, href_list)
|
/obj/item/device/transfer_valve/Topic(href, href_list)
|
||||||
..()
|
..()
|
||||||
if ( usr.stat || usr.restrained() )
|
if ( usr.stat || usr.restrained() )
|
||||||
return
|
return
|
||||||
if (src.loc == usr)
|
if (src.loc == usr)
|
||||||
if(tank_one && href_list["tankone"])
|
if(tank_one && href_list["tankone"])
|
||||||
split_gases()
|
split_gases()
|
||||||
valve_open = 0
|
valve_open = 0
|
||||||
tank_one.loc = get_turf(src)
|
tank_one.loc = get_turf(src)
|
||||||
tank_one = null
|
tank_one = null
|
||||||
update_icon()
|
update_icon()
|
||||||
if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
|
if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
|
||||||
w_class = WEIGHT_CLASS_NORMAL
|
w_class = WEIGHT_CLASS_NORMAL
|
||||||
else if(tank_two && href_list["tanktwo"])
|
else if(tank_two && href_list["tanktwo"])
|
||||||
split_gases()
|
split_gases()
|
||||||
valve_open = 0
|
valve_open = 0
|
||||||
tank_two.loc = get_turf(src)
|
tank_two.loc = get_turf(src)
|
||||||
tank_two = null
|
tank_two = null
|
||||||
update_icon()
|
update_icon()
|
||||||
if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
|
if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
|
||||||
w_class = WEIGHT_CLASS_NORMAL
|
w_class = WEIGHT_CLASS_NORMAL
|
||||||
else if(href_list["open"])
|
else if(href_list["open"])
|
||||||
toggle_valve()
|
toggle_valve()
|
||||||
else if(attached_device)
|
else if(attached_device)
|
||||||
if(href_list["rem_device"])
|
if(href_list["rem_device"])
|
||||||
attached_device.loc = get_turf(src)
|
attached_device.loc = get_turf(src)
|
||||||
attached_device:holder = null
|
attached_device:holder = null
|
||||||
attached_device = null
|
attached_device = null
|
||||||
update_icon()
|
update_icon()
|
||||||
if(href_list["device"])
|
if(href_list["device"])
|
||||||
attached_device.attack_self(usr)
|
attached_device.attack_self(usr)
|
||||||
|
|
||||||
src.attack_self(usr)
|
src.attack_self(usr)
|
||||||
src.add_fingerprint(usr)
|
src.add_fingerprint(usr)
|
||||||
return
|
return
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D)
|
/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D)
|
||||||
if(toggle)
|
if(toggle)
|
||||||
toggle = 0
|
toggle = 0
|
||||||
toggle_valve()
|
toggle_valve()
|
||||||
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
|
||||||
toggle = 1
|
toggle = 1
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/update_icon()
|
/obj/item/device/transfer_valve/update_icon()
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
underlays = null
|
underlays = null
|
||||||
|
|
||||||
if(!tank_one && !tank_two && !attached_device)
|
if(!tank_one && !tank_two && !attached_device)
|
||||||
icon_state = "valve_1"
|
icon_state = "valve_1"
|
||||||
return
|
return
|
||||||
icon_state = "valve"
|
icon_state = "valve"
|
||||||
|
|
||||||
if(tank_one)
|
if(tank_one)
|
||||||
add_overlay("[tank_one.icon_state]")
|
add_overlay("[tank_one.icon_state]")
|
||||||
if(tank_two)
|
if(tank_two)
|
||||||
var/icon/J = new(icon, icon_state = "[tank_two.icon_state]")
|
var/icon/J = new(icon, icon_state = "[tank_two.icon_state]")
|
||||||
J.Shift(WEST, 13)
|
J.Shift(WEST, 13)
|
||||||
underlays += J
|
underlays += J
|
||||||
if(attached_device)
|
if(attached_device)
|
||||||
add_overlay("device")
|
add_overlay("device")
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/proc/merge_gases()
|
/obj/item/device/transfer_valve/proc/merge_gases()
|
||||||
tank_two.air_contents.volume += tank_one.air_contents.volume
|
tank_two.air_contents.volume += tank_one.air_contents.volume
|
||||||
var/datum/gas_mixture/temp
|
var/datum/gas_mixture/temp
|
||||||
temp = tank_one.air_contents.remove_ratio(1)
|
temp = tank_one.air_contents.remove_ratio(1)
|
||||||
tank_two.air_contents.merge(temp)
|
tank_two.air_contents.merge(temp)
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/proc/split_gases()
|
/obj/item/device/transfer_valve/proc/split_gases()
|
||||||
if (!valve_open || !tank_one || !tank_two)
|
if (!valve_open || !tank_one || !tank_two)
|
||||||
return
|
return
|
||||||
var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
|
var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
|
||||||
var/datum/gas_mixture/temp
|
var/datum/gas_mixture/temp
|
||||||
temp = tank_two.air_contents.remove_ratio(ratio1)
|
temp = tank_two.air_contents.remove_ratio(ratio1)
|
||||||
tank_one.air_contents.merge(temp)
|
tank_one.air_contents.merge(temp)
|
||||||
tank_two.air_contents.volume -= tank_one.air_contents.volume
|
tank_two.air_contents.volume -= tank_one.air_contents.volume
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Exadv1: I know this isn't how it's going to work, but this was just to check
|
Exadv1: I know this isn't how it's going to work, but this was just to check
|
||||||
it explodes properly when it gets a signal (and it does).
|
it explodes properly when it gets a signal (and it does).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/device/transfer_valve/proc/toggle_valve()
|
/obj/item/device/transfer_valve/proc/toggle_valve()
|
||||||
if(!valve_open && tank_one && tank_two)
|
if(!valve_open && tank_one && tank_two)
|
||||||
valve_open = 1
|
valve_open = 1
|
||||||
var/turf/bombturf = get_turf(src)
|
var/turf/bombturf = get_turf(src)
|
||||||
var/area/A = get_area(bombturf)
|
var/area/A = get_area(bombturf)
|
||||||
|
|
||||||
var/attachment = "no device"
|
var/attachment = "no device"
|
||||||
if(attached_device)
|
if(attached_device)
|
||||||
if(istype(attached_device, /obj/item/device/assembly/signaler))
|
if(istype(attached_device, /obj/item/device/assembly/signaler))
|
||||||
attachment = "<A HREF='?_src_=holder;secrets=list_signalers'>[attached_device]</A>"
|
attachment = "<A HREF='?_src_=holder;secrets=list_signalers'>[attached_device]</A>"
|
||||||
else
|
else
|
||||||
attachment = attached_device
|
attachment = attached_device
|
||||||
|
|
||||||
var/attacher_name = ""
|
var/attacher_name = ""
|
||||||
if(!attacher)
|
if(!attacher)
|
||||||
attacher_name = "Unknown"
|
attacher_name = "Unknown"
|
||||||
else
|
else
|
||||||
attacher_name = "[key_name_admin(attacher)]"
|
attacher_name = "[key_name_admin(attacher)]"
|
||||||
|
|
||||||
var/log_str1 = "Bomb valve opened in "
|
var/log_str1 = "Bomb valve opened in "
|
||||||
var/log_str2 = "with [attachment] attacher: [attacher_name]"
|
var/log_str2 = "with [attachment] attacher: [attacher_name]"
|
||||||
|
|
||||||
var/log_attacher = ""
|
var/log_attacher = ""
|
||||||
if(attacher)
|
if(attacher)
|
||||||
log_attacher = "[ADMIN_QUE(attacher)] [ADMIN_FLW(attacher)]"
|
log_attacher = "[ADMIN_QUE(attacher)] [ADMIN_FLW(attacher)]"
|
||||||
|
|
||||||
var/mob/mob = get_mob_by_key(src.fingerprintslast)
|
var/mob/mob = get_mob_by_key(src.fingerprintslast)
|
||||||
var/last_touch_info = ""
|
var/last_touch_info = ""
|
||||||
if(mob)
|
if(mob)
|
||||||
last_touch_info = "[ADMIN_QUE(mob)] [ADMIN_FLW(mob)]"
|
last_touch_info = "[ADMIN_QUE(mob)] [ADMIN_FLW(mob)]"
|
||||||
|
|
||||||
var/log_str3 = " Last touched by: [key_name_admin(mob)]"
|
var/log_str3 = " Last touched by: [key_name_admin(mob)]"
|
||||||
|
|
||||||
var/bomb_message = "[log_str1] [A.name][ADMIN_JMP(bombturf)] [log_str2][log_attacher] [log_str3][last_touch_info]"
|
var/bomb_message = "[log_str1] [A.name][ADMIN_JMP(bombturf)] [log_str2][log_attacher] [log_str3][last_touch_info]"
|
||||||
|
|
||||||
GLOB.bombers += bomb_message
|
GLOB.bombers += bomb_message
|
||||||
|
|
||||||
message_admins(bomb_message, 0, 1)
|
message_admins(bomb_message, 0, 1)
|
||||||
log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]")
|
log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]")
|
||||||
merge_gases()
|
merge_gases()
|
||||||
spawn(20) // In case one tank bursts
|
spawn(20) // In case one tank bursts
|
||||||
for (var/i=0,i<5,i++)
|
for (var/i=0,i<5,i++)
|
||||||
src.update_icon()
|
src.update_icon()
|
||||||
sleep(10)
|
sleep(10)
|
||||||
src.update_icon()
|
src.update_icon()
|
||||||
|
|
||||||
else if(valve_open && tank_one && tank_two)
|
else if(valve_open && tank_one && tank_two)
|
||||||
split_gases()
|
split_gases()
|
||||||
valve_open = 0
|
valve_open = 0
|
||||||
src.update_icon()
|
src.update_icon()
|
||||||
|
|
||||||
// this doesn't do anything but the timer etc. expects it to be here
|
// this doesn't do anything but the timer etc. expects it to be here
|
||||||
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
|
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
|
||||||
/obj/item/device/transfer_valve/proc/c_state()
|
/obj/item/device/transfer_valve/proc/c_state()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||||
M.updateappearance(mutations_overlay_update=1)
|
M.updateappearance(mutations_overlay_update=1)
|
||||||
log_attack(log_msg)
|
log_attack(log_msg)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/obj/item/weapon/dnainjector/attack(mob/target, mob/user)
|
/obj/item/weapon/dnainjector/attack(mob/target, mob/user)
|
||||||
if(!user.IsAdvancedToolUser())
|
if(!user.IsAdvancedToolUser())
|
||||||
@@ -77,9 +77,9 @@
|
|||||||
|
|
||||||
add_logs(user, target, "injected", src)
|
add_logs(user, target, "injected", src)
|
||||||
|
|
||||||
if(!inject(target, user)) //Now we actually do the heavy lifting.
|
if(!inject(target, user)) //Now we actually do the heavy lifting.
|
||||||
to_chat(user, "<span class='notice'>It appears that [target] does not have compatible DNA.</span>")
|
to_chat(user, "<span class='notice'>It appears that [target] does not have compatible DNA.</span>")
|
||||||
|
|
||||||
used = 1
|
used = 1
|
||||||
icon_state = "dnainjector0"
|
icon_state = "dnainjector0"
|
||||||
desc += " This one is used up."
|
desc += " This one is used up."
|
||||||
|
|||||||
@@ -48,27 +48,27 @@
|
|||||||
/obj/item/weapon/grenade/attack_self(mob/user)
|
/obj/item/weapon/grenade/attack_self(mob/user)
|
||||||
if(!active)
|
if(!active)
|
||||||
if(clown_check(user))
|
if(clown_check(user))
|
||||||
preprime(user)
|
preprime(user)
|
||||||
if(iscarbon(user))
|
if(iscarbon(user))
|
||||||
var/mob/living/carbon/C = user
|
var/mob/living/carbon/C = user
|
||||||
C.throw_mode_on()
|
C.throw_mode_on()
|
||||||
|
|
||||||
/obj/item/weapon/grenade/proc/preprime(mob/user)
|
/obj/item/weapon/grenade/proc/preprime(mob/user)
|
||||||
if(user)
|
if(user)
|
||||||
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
|
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
|
||||||
playsound(loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
playsound(loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
||||||
active = TRUE
|
active = TRUE
|
||||||
icon_state = initial(icon_state) + "_active"
|
icon_state = initial(icon_state) + "_active"
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
var/turf/bombturf = get_turf(src)
|
var/turf/bombturf = get_turf(src)
|
||||||
var/area/A = get_area(bombturf)
|
var/area/A = get_area(bombturf)
|
||||||
if(user)
|
if(user)
|
||||||
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]"
|
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]"
|
||||||
GLOB.bombers += message
|
GLOB.bombers += message
|
||||||
message_admins(message)
|
message_admins(message)
|
||||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||||
|
|
||||||
addtimer(CALLBACK(src, .proc/prime), det_time)
|
addtimer(CALLBACK(src, .proc/prime), det_time)
|
||||||
|
|
||||||
/obj/item/weapon/grenade/proc/prime()
|
/obj/item/weapon/grenade/proc/prime()
|
||||||
|
|
||||||
@@ -108,4 +108,4 @@
|
|||||||
if(damage && attack_type == PROJECTILE_ATTACK && prob(15))
|
if(damage && attack_type == PROJECTILE_ATTACK && prob(15))
|
||||||
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
||||||
prime()
|
prime()
|
||||||
return 1 //It hit the grenade, not them
|
return 1 //It hit the grenade, not them
|
||||||
|
|||||||
@@ -1,189 +1,189 @@
|
|||||||
/obj/machinery/implantchair
|
/obj/machinery/implantchair
|
||||||
name = "mindshield implanter"
|
name = "mindshield implanter"
|
||||||
desc = "Used to implant occupants with mindshield implants."
|
desc = "Used to implant occupants with mindshield implants."
|
||||||
icon = 'icons/obj/machines/implantchair.dmi'
|
icon = 'icons/obj/machines/implantchair.dmi'
|
||||||
icon_state = "implantchair"
|
icon_state = "implantchair"
|
||||||
density = 1
|
density = 1
|
||||||
opacity = 0
|
opacity = 0
|
||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
|
|
||||||
var/ready = TRUE
|
var/ready = TRUE
|
||||||
var/replenishing = FALSE
|
var/replenishing = FALSE
|
||||||
|
|
||||||
var/ready_implants = 5
|
var/ready_implants = 5
|
||||||
var/max_implants = 5
|
var/max_implants = 5
|
||||||
var/injection_cooldown = 600
|
var/injection_cooldown = 600
|
||||||
var/replenish_cooldown = 6000
|
var/replenish_cooldown = 6000
|
||||||
var/implant_type = /obj/item/weapon/implant/mindshield
|
var/implant_type = /obj/item/weapon/implant/mindshield
|
||||||
var/auto_inject = FALSE
|
var/auto_inject = FALSE
|
||||||
var/auto_replenish = TRUE
|
var/auto_replenish = TRUE
|
||||||
var/special = FALSE
|
var/special = FALSE
|
||||||
var/special_name = "special function"
|
var/special_name = "special function"
|
||||||
|
|
||||||
/obj/machinery/implantchair/New()
|
/obj/machinery/implantchair/New()
|
||||||
..()
|
..()
|
||||||
open_machine()
|
open_machine()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||||
|
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state)
|
ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/implantchair/ui_data()
|
/obj/machinery/implantchair/ui_data()
|
||||||
var/list/data = list()
|
var/list/data = list()
|
||||||
data["occupied"] = occupant ? 1 : 0
|
data["occupied"] = occupant ? 1 : 0
|
||||||
data["open"] = state_open
|
data["open"] = state_open
|
||||||
|
|
||||||
data["occupant"] = list()
|
data["occupant"] = list()
|
||||||
if(occupant)
|
if(occupant)
|
||||||
var/mob/living/mob_occupant = occupant
|
var/mob/living/mob_occupant = occupant
|
||||||
data["occupant"]["name"] = mob_occupant.name
|
data["occupant"]["name"] = mob_occupant.name
|
||||||
data["occupant"]["stat"] = mob_occupant.stat
|
data["occupant"]["stat"] = mob_occupant.stat
|
||||||
|
|
||||||
data["special_name"] = special ? special_name : null
|
data["special_name"] = special ? special_name : null
|
||||||
data["ready_implants"] = ready_implants
|
data["ready_implants"] = ready_implants
|
||||||
data["ready"] = ready
|
data["ready"] = ready
|
||||||
data["replenishing"] = replenishing
|
data["replenishing"] = replenishing
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/obj/machinery/implantchair/ui_act(action, params)
|
/obj/machinery/implantchair/ui_act(action, params)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
switch(action)
|
switch(action)
|
||||||
if("door")
|
if("door")
|
||||||
if(state_open)
|
if(state_open)
|
||||||
close_machine()
|
close_machine()
|
||||||
else
|
else
|
||||||
open_machine()
|
open_machine()
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("implant")
|
if("implant")
|
||||||
implant(occupant,usr)
|
implant(occupant,usr)
|
||||||
. = TRUE
|
. = TRUE
|
||||||
|
|
||||||
/obj/machinery/implantchair/proc/implant(mob/living/M,mob/user)
|
/obj/machinery/implantchair/proc/implant(mob/living/M,mob/user)
|
||||||
if (!istype(M))
|
if (!istype(M))
|
||||||
return
|
return
|
||||||
if(!ready_implants || !ready)
|
if(!ready_implants || !ready)
|
||||||
return
|
return
|
||||||
if(implant_action(M,user))
|
if(implant_action(M,user))
|
||||||
ready_implants--
|
ready_implants--
|
||||||
if(!replenishing && auto_replenish)
|
if(!replenishing && auto_replenish)
|
||||||
replenishing = TRUE
|
replenishing = TRUE
|
||||||
addtimer(CALLBACK(src,"replenish"),replenish_cooldown)
|
addtimer(CALLBACK(src,"replenish"),replenish_cooldown)
|
||||||
if(injection_cooldown > 0)
|
if(injection_cooldown > 0)
|
||||||
ready = FALSE
|
ready = FALSE
|
||||||
addtimer(CALLBACK(src,"set_ready"),injection_cooldown)
|
addtimer(CALLBACK(src,"set_ready"),injection_cooldown)
|
||||||
else
|
else
|
||||||
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1)
|
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/implantchair/proc/implant_action(mob/living/M)
|
/obj/machinery/implantchair/proc/implant_action(mob/living/M)
|
||||||
var/obj/item/weapon/implant/I = new implant_type
|
var/obj/item/weapon/implant/I = new implant_type
|
||||||
if(I.implant(M))
|
if(I.implant(M))
|
||||||
visible_message("<span class='warning'>[M] has been implanted by the [name].</span>")
|
visible_message("<span class='warning'>[M] has been implanted by the [name].</span>")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/implantchair/update_icon()
|
/obj/machinery/implantchair/update_icon()
|
||||||
icon_state = initial(icon_state)
|
icon_state = initial(icon_state)
|
||||||
if(state_open)
|
if(state_open)
|
||||||
icon_state += "_open"
|
icon_state += "_open"
|
||||||
if(occupant)
|
if(occupant)
|
||||||
icon_state += "_occupied"
|
icon_state += "_occupied"
|
||||||
if(ready)
|
if(ready)
|
||||||
add_overlay("ready")
|
add_overlay("ready")
|
||||||
else
|
else
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
|
|
||||||
/obj/machinery/implantchair/proc/replenish()
|
/obj/machinery/implantchair/proc/replenish()
|
||||||
if(ready_implants < max_implants)
|
if(ready_implants < max_implants)
|
||||||
ready_implants++
|
ready_implants++
|
||||||
if(ready_implants < max_implants)
|
if(ready_implants < max_implants)
|
||||||
addtimer(CALLBACK(src,"replenish"),replenish_cooldown)
|
addtimer(CALLBACK(src,"replenish"),replenish_cooldown)
|
||||||
else
|
else
|
||||||
replenishing = FALSE
|
replenishing = FALSE
|
||||||
|
|
||||||
/obj/machinery/implantchair/proc/set_ready()
|
/obj/machinery/implantchair/proc/set_ready()
|
||||||
ready = TRUE
|
ready = TRUE
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/implantchair/container_resist(mob/living/user)
|
/obj/machinery/implantchair/container_resist(mob/living/user)
|
||||||
if(state_open)
|
if(state_open)
|
||||||
return
|
return
|
||||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||||
to_chat(user, "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)</span>")
|
to_chat(user, "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)</span>")
|
||||||
audible_message("<span class='italics'>You hear a metallic creaking from [src]!</span>",hearing_distance = 2)
|
audible_message("<span class='italics'>You hear a metallic creaking from [src]!</span>",hearing_distance = 2)
|
||||||
|
|
||||||
if(do_after(user, 600, target = src))
|
if(do_after(user, 600, target = src))
|
||||||
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
|
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
|
||||||
return
|
return
|
||||||
visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>")
|
visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>")
|
||||||
to_chat(user, "<span class='notice'>You successfully break out of [src]!</span>")
|
to_chat(user, "<span class='notice'>You successfully break out of [src]!</span>")
|
||||||
open_machine()
|
open_machine()
|
||||||
|
|
||||||
/obj/machinery/implantchair/relaymove(mob/user)
|
/obj/machinery/implantchair/relaymove(mob/user)
|
||||||
container_resist(user)
|
container_resist(user)
|
||||||
|
|
||||||
/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user)
|
/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user)
|
||||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !user.IsAdvancedToolUser())
|
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !user.IsAdvancedToolUser())
|
||||||
return
|
return
|
||||||
close_machine(target)
|
close_machine(target)
|
||||||
|
|
||||||
/obj/machinery/implantchair/close_machine(mob/living/user)
|
/obj/machinery/implantchair/close_machine(mob/living/user)
|
||||||
if((isnull(user) || istype(user)) && state_open)
|
if((isnull(user) || istype(user)) && state_open)
|
||||||
..(user)
|
..(user)
|
||||||
if(auto_inject && ready && ready_implants > 0)
|
if(auto_inject && ready && ready_implants > 0)
|
||||||
implant(user,null)
|
implant(user,null)
|
||||||
|
|
||||||
/obj/machinery/implantchair/genepurge
|
/obj/machinery/implantchair/genepurge
|
||||||
name = "Genetic purifier"
|
name = "Genetic purifier"
|
||||||
desc = "Used to purge human genome of foreign influences"
|
desc = "Used to purge human genome of foreign influences"
|
||||||
special = TRUE
|
special = TRUE
|
||||||
special_name = "Purge genome"
|
special_name = "Purge genome"
|
||||||
injection_cooldown = 0
|
injection_cooldown = 0
|
||||||
replenish_cooldown = 300
|
replenish_cooldown = 300
|
||||||
|
|
||||||
/obj/machinery/implantchair/genepurge/implant_action(mob/living/carbon/human/H,mob/user)
|
/obj/machinery/implantchair/genepurge/implant_action(mob/living/carbon/human/H,mob/user)
|
||||||
if(!istype(H))
|
if(!istype(H))
|
||||||
return 0
|
return 0
|
||||||
H.set_species(/datum/species/human, 1)//lizards go home
|
H.set_species(/datum/species/human, 1)//lizards go home
|
||||||
purrbation_remove(H)//remove cats
|
purrbation_remove(H)//remove cats
|
||||||
H.dna.remove_all_mutations()//hulks out
|
H.dna.remove_all_mutations()//hulks out
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/implantchair/brainwash
|
/obj/machinery/implantchair/brainwash
|
||||||
name = "Neural Imprinter"
|
name = "Neural Imprinter"
|
||||||
desc = "Used to <s>indoctrinate</s> rehabilitate hardened recidivists."
|
desc = "Used to <s>indoctrinate</s> rehabilitate hardened recidivists."
|
||||||
special_name = "Imprint"
|
special_name = "Imprint"
|
||||||
injection_cooldown = 3000
|
injection_cooldown = 3000
|
||||||
auto_inject = FALSE
|
auto_inject = FALSE
|
||||||
auto_replenish = FALSE
|
auto_replenish = FALSE
|
||||||
special = TRUE
|
special = TRUE
|
||||||
var/objective = "Obey the law. Praise Nanotrasen."
|
var/objective = "Obey the law. Praise Nanotrasen."
|
||||||
var/custom = FALSE
|
var/custom = FALSE
|
||||||
|
|
||||||
/obj/machinery/implantchair/brainwash/implant_action(mob/living/C,mob/user)
|
/obj/machinery/implantchair/brainwash/implant_action(mob/living/C,mob/user)
|
||||||
if(!istype(C) || !C.mind) // I don't know how this makes any sense for silicons but laws trump objectives anyway.
|
if(!istype(C) || !C.mind) // I don't know how this makes any sense for silicons but laws trump objectives anyway.
|
||||||
return 0
|
return 0
|
||||||
if(custom)
|
if(custom)
|
||||||
if(!user || !user.Adjacent(src))
|
if(!user || !user.Adjacent(src))
|
||||||
return 0
|
return 0
|
||||||
objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120)
|
objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120)
|
||||||
message_admins("[key_name_admin(user)] set brainwash machine objective to '[objective]'.")
|
message_admins("[key_name_admin(user)] set brainwash machine objective to '[objective]'.")
|
||||||
log_game("[key_name_admin(user)] set brainwash machine objective to '[objective]'.")
|
log_game("[key_name_admin(user)] set brainwash machine objective to '[objective]'.")
|
||||||
var/datum/objective/custom_objective = new/datum/objective(objective)
|
var/datum/objective/custom_objective = new/datum/objective(objective)
|
||||||
custom_objective.owner = C.mind
|
custom_objective.owner = C.mind
|
||||||
C.mind.objectives += custom_objective
|
C.mind.objectives += custom_objective
|
||||||
C.mind.announce_objectives()
|
C.mind.announce_objectives()
|
||||||
message_admins("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
message_admins("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
||||||
log_game("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
log_game("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,305 +1,305 @@
|
|||||||
/obj/item/weapon/storage/box/syndicate
|
/obj/item/weapon/storage/box/syndicate
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndicate/PopulateContents()
|
/obj/item/weapon/storage/box/syndicate/PopulateContents()
|
||||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||||
if("bloodyspai") // 27 tc now this is more right
|
if("bloodyspai") // 27 tc now this is more right
|
||||||
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
|
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
|
||||||
new /obj/item/clothing/mask/chameleon(src) // Goes with above
|
new /obj/item/clothing/mask/chameleon(src) // Goes with above
|
||||||
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
||||||
new /obj/item/clothing/shoes/chameleon(src) // 2 tc
|
new /obj/item/clothing/shoes/chameleon(src) // 2 tc
|
||||||
new /obj/item/device/camera_bug(src) // 1 tc
|
new /obj/item/device/camera_bug(src) // 1 tc
|
||||||
new /obj/item/device/multitool/ai_detect(src) // 1 tc
|
new /obj/item/device/multitool/ai_detect(src) // 1 tc
|
||||||
new /obj/item/device/encryptionkey/syndicate(src) // 2 tc
|
new /obj/item/device/encryptionkey/syndicate(src) // 2 tc
|
||||||
new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc
|
new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc
|
||||||
new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc
|
new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc
|
||||||
new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals
|
new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals
|
||||||
new /obj/item/device/flashlight/emp(src) // 2 tc
|
new /obj/item/device/flashlight/emp(src) // 2 tc
|
||||||
new /obj/item/device/chameleon(src) // 7 tc
|
new /obj/item/device/chameleon(src) // 7 tc
|
||||||
|
|
||||||
if("stealth") // 31 tc
|
if("stealth") // 31 tc
|
||||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
|
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
|
||||||
new /obj/item/weapon/pen/sleepy(src)
|
new /obj/item/weapon/pen/sleepy(src)
|
||||||
new /obj/item/device/healthanalyzer/rad_laser(src)
|
new /obj/item/device/healthanalyzer/rad_laser(src)
|
||||||
new /obj/item/device/chameleon(src)
|
new /obj/item/device/chameleon(src)
|
||||||
new /obj/item/weapon/soap/syndie(src)
|
new /obj/item/weapon/soap/syndie(src)
|
||||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||||
|
|
||||||
if("bond") // 29 tc
|
if("bond") // 29 tc
|
||||||
new /obj/item/weapon/gun/ballistic/automatic/pistol(src)
|
new /obj/item/weapon/gun/ballistic/automatic/pistol(src)
|
||||||
new /obj/item/weapon/suppressor(src)
|
new /obj/item/weapon/suppressor(src)
|
||||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||||
new /obj/item/clothing/under/chameleon(src)
|
new /obj/item/clothing/under/chameleon(src)
|
||||||
new /obj/item/weapon/card/id/syndicate(src)
|
new /obj/item/weapon/card/id/syndicate(src)
|
||||||
new /obj/item/weapon/reagent_containers/syringe/stimulants(src)
|
new /obj/item/weapon/reagent_containers/syringe/stimulants(src)
|
||||||
|
|
||||||
if("screwed") // 29 tc
|
if("screwed") // 29 tc
|
||||||
new /obj/item/device/sbeacondrop/bomb(src)
|
new /obj/item/device/sbeacondrop/bomb(src)
|
||||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||||
new /obj/item/device/sbeacondrop/powersink(src)
|
new /obj/item/device/sbeacondrop/powersink(src)
|
||||||
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
||||||
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
||||||
new /obj/item/device/encryptionkey/syndicate(src)
|
new /obj/item/device/encryptionkey/syndicate(src)
|
||||||
|
|
||||||
if("guns") // 28 tc now
|
if("guns") // 28 tc now
|
||||||
new /obj/item/weapon/gun/ballistic/revolver(src)
|
new /obj/item/weapon/gun/ballistic/revolver(src)
|
||||||
new /obj/item/ammo_box/a357(src)
|
new /obj/item/ammo_box/a357(src)
|
||||||
new /obj/item/ammo_box/a357(src)
|
new /obj/item/ammo_box/a357(src)
|
||||||
new /obj/item/weapon/card/emag(src)
|
new /obj/item/weapon/card/emag(src)
|
||||||
new /obj/item/weapon/grenade/plastic/c4(src)
|
new /obj/item/weapon/grenade/plastic/c4(src)
|
||||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||||
|
|
||||||
if("murder") // 28 tc now
|
if("murder") // 28 tc now
|
||||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||||
new /obj/item/weapon/card/emag(src)
|
new /obj/item/weapon/card/emag(src)
|
||||||
new /obj/item/clothing/shoes/chameleon(src)
|
new /obj/item/clothing/shoes/chameleon(src)
|
||||||
new /obj/item/device/encryptionkey/syndicate(src)
|
new /obj/item/device/encryptionkey/syndicate(src)
|
||||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||||
|
|
||||||
if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
|
if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
|
||||||
new /obj/item/weapon/implanter/freedom(src)
|
new /obj/item/weapon/implanter/freedom(src)
|
||||||
new /obj/item/weapon/implanter/uplink/precharged(src)
|
new /obj/item/weapon/implanter/uplink/precharged(src)
|
||||||
new /obj/item/weapon/implanter/emp(src)
|
new /obj/item/weapon/implanter/emp(src)
|
||||||
new /obj/item/weapon/implanter/adrenalin(src)
|
new /obj/item/weapon/implanter/adrenalin(src)
|
||||||
new /obj/item/weapon/implanter/explosive(src)
|
new /obj/item/weapon/implanter/explosive(src)
|
||||||
new /obj/item/weapon/implanter/storage(src)
|
new /obj/item/weapon/implanter/storage(src)
|
||||||
|
|
||||||
if("hacker") // 26 tc
|
if("hacker") // 26 tc
|
||||||
new /obj/item/weapon/aiModule/syndicate(src)
|
new /obj/item/weapon/aiModule/syndicate(src)
|
||||||
new /obj/item/weapon/card/emag(src)
|
new /obj/item/weapon/card/emag(src)
|
||||||
new /obj/item/device/encryptionkey/binary(src)
|
new /obj/item/device/encryptionkey/binary(src)
|
||||||
new /obj/item/weapon/aiModule/toyAI(src)
|
new /obj/item/weapon/aiModule/toyAI(src)
|
||||||
new /obj/item/device/multitool/ai_detect(src)
|
new /obj/item/device/multitool/ai_detect(src)
|
||||||
|
|
||||||
if("lordsingulo") // 24 tc
|
if("lordsingulo") // 24 tc
|
||||||
new /obj/item/device/sbeacondrop(src)
|
new /obj/item/device/sbeacondrop(src)
|
||||||
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
||||||
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
||||||
new /obj/item/weapon/card/emag(src)
|
new /obj/item/weapon/card/emag(src)
|
||||||
|
|
||||||
if("sabotage") // 26 tc now
|
if("sabotage") // 26 tc now
|
||||||
new /obj/item/weapon/grenade/plastic/c4 (src)
|
new /obj/item/weapon/grenade/plastic/c4 (src)
|
||||||
new /obj/item/weapon/grenade/plastic/c4 (src)
|
new /obj/item/weapon/grenade/plastic/c4 (src)
|
||||||
new /obj/item/device/doorCharge(src)
|
new /obj/item/device/doorCharge(src)
|
||||||
new /obj/item/device/doorCharge(src)
|
new /obj/item/device/doorCharge(src)
|
||||||
new /obj/item/device/camera_bug(src)
|
new /obj/item/device/camera_bug(src)
|
||||||
new /obj/item/device/sbeacondrop/powersink(src)
|
new /obj/item/device/sbeacondrop/powersink(src)
|
||||||
new /obj/item/weapon/cartridge/syndicate(src)
|
new /obj/item/weapon/cartridge/syndicate(src)
|
||||||
new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places
|
new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places
|
||||||
new /obj/item/pizzabox/bomb
|
new /obj/item/pizzabox/bomb
|
||||||
|
|
||||||
if("darklord") //20 tc + tk + summon item close enough for now
|
if("darklord") //20 tc + tk + summon item close enough for now
|
||||||
new /obj/item/weapon/twohanded/dualsaber(src)
|
new /obj/item/weapon/twohanded/dualsaber(src)
|
||||||
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
|
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
|
||||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
||||||
new /obj/item/weapon/card/id/syndicate(src)
|
new /obj/item/weapon/card/id/syndicate(src)
|
||||||
new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks
|
new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks
|
||||||
new /obj/item/weapon/spellbook/oneuse/summonitem(src)
|
new /obj/item/weapon/spellbook/oneuse/summonitem(src)
|
||||||
|
|
||||||
if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks
|
if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks
|
||||||
new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle(src) // 12 tc
|
new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle(src) // 12 tc
|
||||||
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src)
|
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src)
|
||||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||||
|
|
||||||
if("metaops") // 30 tc
|
if("metaops") // 30 tc
|
||||||
new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc
|
new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc
|
||||||
new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc
|
new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc
|
||||||
new /obj/item/weapon/implanter/explosive(src) // 2 tc
|
new /obj/item/weapon/implanter/explosive(src) // 2 tc
|
||||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
|
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
|
||||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
|
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
|
||||||
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
||||||
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
||||||
new /obj/item/weapon/card/emag(src) // 6 tc
|
new /obj/item/weapon/card/emag(src) // 6 tc
|
||||||
|
|
||||||
if("ninja") // 33 tc worth
|
if("ninja") // 33 tc worth
|
||||||
new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc?
|
new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc?
|
||||||
new /obj/item/weapon/implanter/adrenalin(src) // 8 tc
|
new /obj/item/weapon/implanter/adrenalin(src) // 8 tc
|
||||||
new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6
|
new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/storage/belt/chameleon(src) // Unique but worth at least 2 tc
|
new /obj/item/weapon/storage/belt/chameleon(src) // Unique but worth at least 2 tc
|
||||||
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
||||||
new /obj/item/device/chameleon(src) // 7 tc
|
new /obj/item/device/chameleon(src) // 7 tc
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit
|
/obj/item/weapon/storage/box/syndie_kit
|
||||||
name = "box"
|
name = "box"
|
||||||
desc = "A sleek, sturdy box."
|
desc = "A sleek, sturdy box."
|
||||||
icon_state = "syndiebox"
|
icon_state = "syndiebox"
|
||||||
illustration = "writing_syndie"
|
illustration = "writing_syndie"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
||||||
name = "boxed freedom implant (with injector)"
|
name = "boxed freedom implant (with injector)"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_freedom/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/imp_freedom/PopulateContents()
|
||||||
var/obj/item/weapon/implanter/O = new(src)
|
var/obj/item/weapon/implanter/O = new(src)
|
||||||
O.imp = new /obj/item/weapon/implant/freedom(O)
|
O.imp = new /obj/item/weapon/implant/freedom(O)
|
||||||
O.update_icon()
|
O.update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_microbomb
|
/obj/item/weapon/storage/box/syndie_kit/imp_microbomb
|
||||||
name = "Microbomb Implant (with injector)"
|
name = "Microbomb Implant (with injector)"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/PopulateContents()
|
||||||
var/obj/item/weapon/implanter/O = new(src)
|
var/obj/item/weapon/implanter/O = new(src)
|
||||||
O.imp = new /obj/item/weapon/implant/explosive(O)
|
O.imp = new /obj/item/weapon/implant/explosive(O)
|
||||||
O.update_icon()
|
O.update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb
|
/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb
|
||||||
name = "Macrobomb Implant (with injector)"
|
name = "Macrobomb Implant (with injector)"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/PopulateContents()
|
||||||
var/obj/item/weapon/implanter/O = new(src)
|
var/obj/item/weapon/implanter/O = new(src)
|
||||||
O.imp = new /obj/item/weapon/implant/explosive/macro(O)
|
O.imp = new /obj/item/weapon/implant/explosive/macro(O)
|
||||||
O.update_icon()
|
O.update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_uplink
|
/obj/item/weapon/storage/box/syndie_kit/imp_uplink
|
||||||
name = "boxed uplink implant (with injector)"
|
name = "boxed uplink implant (with injector)"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_uplink/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/imp_uplink/PopulateContents()
|
||||||
..()
|
..()
|
||||||
var/obj/item/weapon/implanter/O = new(src)
|
var/obj/item/weapon/implanter/O = new(src)
|
||||||
O.imp = new /obj/item/weapon/implant/uplink(O)
|
O.imp = new /obj/item/weapon/implant/uplink(O)
|
||||||
O.update_icon()
|
O.update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/bioterror
|
/obj/item/weapon/storage/box/syndie_kit/bioterror
|
||||||
name = "bioterror syringe box"
|
name = "bioterror syringe box"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/bioterror/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/bioterror/PopulateContents()
|
||||||
for(var/i in 1 to 7)
|
for(var/i in 1 to 7)
|
||||||
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
|
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal
|
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal
|
||||||
name = "boxed adrenal implant (with injector)"
|
name = "boxed adrenal implant (with injector)"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/PopulateContents()
|
||||||
var/obj/item/weapon/implanter/O = new(src)
|
var/obj/item/weapon/implanter/O = new(src)
|
||||||
O.imp = new /obj/item/weapon/implant/adrenalin(O)
|
O.imp = new /obj/item/weapon/implant/adrenalin(O)
|
||||||
O.update_icon()
|
O.update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_storage
|
/obj/item/weapon/storage/box/syndie_kit/imp_storage
|
||||||
name = "boxed storage implant (with injector)"
|
name = "boxed storage implant (with injector)"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/imp_storage/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/imp_storage/PopulateContents()
|
||||||
new /obj/item/weapon/implanter/storage(src)
|
new /obj/item/weapon/implanter/storage(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/space
|
/obj/item/weapon/storage/box/syndie_kit/space
|
||||||
name = "boxed space suit and helmet"
|
name = "boxed space suit and helmet"
|
||||||
can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)
|
can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)
|
||||||
max_w_class = WEIGHT_CLASS_NORMAL
|
max_w_class = WEIGHT_CLASS_NORMAL
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/space/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/space/PopulateContents()
|
||||||
new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now
|
new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now
|
||||||
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/emp
|
/obj/item/weapon/storage/box/syndie_kit/emp
|
||||||
name = "boxed EMP kit"
|
name = "boxed EMP kit"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/emp/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/emp/PopulateContents()
|
||||||
new /obj/item/weapon/grenade/empgrenade(src)
|
new /obj/item/weapon/grenade/empgrenade(src)
|
||||||
new /obj/item/weapon/grenade/empgrenade(src)
|
new /obj/item/weapon/grenade/empgrenade(src)
|
||||||
new /obj/item/weapon/grenade/empgrenade(src)
|
new /obj/item/weapon/grenade/empgrenade(src)
|
||||||
new /obj/item/weapon/grenade/empgrenade(src)
|
new /obj/item/weapon/grenade/empgrenade(src)
|
||||||
new /obj/item/weapon/grenade/empgrenade(src)
|
new /obj/item/weapon/grenade/empgrenade(src)
|
||||||
new /obj/item/weapon/implanter/emp(src)
|
new /obj/item/weapon/implanter/emp(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/chemical
|
/obj/item/weapon/storage/box/syndie_kit/chemical
|
||||||
name = "boxed chemical kit"
|
name = "boxed chemical kit"
|
||||||
storage_slots = 14
|
storage_slots = 14
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/chemical/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/chemical/PopulateContents()
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/venom(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/venom(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/spewium(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/spewium(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/cyanide(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/cyanide(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/histamine(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/histamine(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/initropidril(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/initropidril(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/pancuronium(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/pancuronium(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/coniine(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/coniine(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/curare(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/curare(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/amanitin(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/amanitin(src)
|
||||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/nuke
|
/obj/item/weapon/storage/box/syndie_kit/nuke
|
||||||
name = "box"
|
name = "box"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/nuke/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/nuke/PopulateContents()
|
||||||
new /obj/item/weapon/screwdriver/nuke(src)
|
new /obj/item/weapon/screwdriver/nuke(src)
|
||||||
new /obj/item/nuke_core_container(src)
|
new /obj/item/nuke_core_container(src)
|
||||||
new /obj/item/weapon/paper/nuke_instructions(src)
|
new /obj/item/weapon/paper/nuke_instructions(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade
|
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade
|
||||||
name = "boxed virus grenade kit"
|
name = "boxed virus grenade kit"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents()
|
||||||
new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src)
|
new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src)
|
||||||
for(var/i in 1 to 5)
|
for(var/i in 1 to 5)
|
||||||
new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
|
new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
|
||||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/chameleon
|
/obj/item/weapon/storage/box/syndie_kit/chameleon
|
||||||
name = "chameleon kit"
|
name = "chameleon kit"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/chameleon/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/chameleon/PopulateContents()
|
||||||
new /obj/item/clothing/under/chameleon(src)
|
new /obj/item/clothing/under/chameleon(src)
|
||||||
new /obj/item/clothing/suit/chameleon(src)
|
new /obj/item/clothing/suit/chameleon(src)
|
||||||
new /obj/item/clothing/gloves/chameleon(src)
|
new /obj/item/clothing/gloves/chameleon(src)
|
||||||
new /obj/item/clothing/shoes/chameleon(src)
|
new /obj/item/clothing/shoes/chameleon(src)
|
||||||
new /obj/item/clothing/glasses/chameleon(src)
|
new /obj/item/clothing/glasses/chameleon(src)
|
||||||
new /obj/item/clothing/head/chameleon(src)
|
new /obj/item/clothing/head/chameleon(src)
|
||||||
new /obj/item/clothing/mask/chameleon(src)
|
new /obj/item/clothing/mask/chameleon(src)
|
||||||
new /obj/item/weapon/storage/backpack/chameleon(src)
|
new /obj/item/weapon/storage/backpack/chameleon(src)
|
||||||
new /obj/item/device/radio/headset/chameleon(src)
|
new /obj/item/device/radio/headset/chameleon(src)
|
||||||
new /obj/item/weapon/stamp/chameleon(src)
|
new /obj/item/weapon/stamp/chameleon(src)
|
||||||
new /obj/item/device/pda/chameleon(src)
|
new /obj/item/device/pda/chameleon(src)
|
||||||
new /obj/item/weapon/gun/energy/laser/chameleon(src)
|
new /obj/item/weapon/gun/energy/laser/chameleon(src)
|
||||||
|
|
||||||
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
|
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
|
||||||
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
|
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
|
||||||
/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/PopulateContents()
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/throwing_star(src)
|
new /obj/item/weapon/throwing_star(src)
|
||||||
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
|
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
|
||||||
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
|
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/cutouts/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/cutouts/PopulateContents()
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new/obj/item/cardboard_cutout/adaptive(src)
|
new/obj/item/cardboard_cutout/adaptive(src)
|
||||||
new/obj/item/toy/crayon/rainbow(src)
|
new/obj/item/toy/crayon/rainbow(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/romerol/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/romerol/PopulateContents()
|
||||||
new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src)
|
new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src)
|
||||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||||
new /obj/item/weapon/reagent_containers/dropper(src)
|
new /obj/item/weapon/reagent_containers/dropper(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/ez_clean/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/ez_clean/PopulateContents()
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new/obj/item/weapon/grenade/chem_grenade/ez_clean(src)
|
new/obj/item/weapon/grenade/chem_grenade/ez_clean(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/hug/reverse_revolver/PopulateContents()
|
/obj/item/weapon/storage/box/hug/reverse_revolver/PopulateContents()
|
||||||
new /obj/item/weapon/gun/ballistic/revolver/reverse(src)
|
new /obj/item/weapon/gun/ballistic/revolver/reverse(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/mimery/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/mimery/PopulateContents()
|
||||||
new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src)
|
new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src)
|
||||||
new /obj/item/weapon/spellbook/oneuse/mimery_guns(src)
|
new /obj/item/weapon/spellbook/oneuse/mimery_guns(src)
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/holoparasite
|
/obj/item/weapon/storage/box/syndie_kit/holoparasite
|
||||||
name = "box"
|
name = "box"
|
||||||
|
|
||||||
/obj/item/weapon/storage/box/syndie_kit/holoparasite/PopulateContents()
|
/obj/item/weapon/storage/box/syndie_kit/holoparasite/PopulateContents()
|
||||||
new /obj/item/weapon/guardiancreator/tech/choose/traitor(src)
|
new /obj/item/weapon/guardiancreator/tech/choose/traitor(src)
|
||||||
new /obj/item/weapon/paper/guardian(src)
|
new /obj/item/weapon/paper/guardian(src)
|
||||||
4
code/game/objects/items/weapons/tanks/tank_types.dm
Normal file → Executable file
4
code/game/objects/items/weapons/tanks/tank_types.dm
Normal file → Executable file
@@ -140,8 +140,8 @@
|
|||||||
item_state = "plasmaman_tank_belt"
|
item_state = "plasmaman_tank_belt"
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
force = 5
|
force = 5
|
||||||
volume = 3
|
volume = 3
|
||||||
w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
|
w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
|
||||||
|
|
||||||
/obj/item/weapon/tank/internals/plasmaman/belt/full/New()
|
/obj/item/weapon/tank/internals/plasmaman/belt/full/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,316 +1,316 @@
|
|||||||
/*
|
/*
|
||||||
CONTAINS:
|
CONTAINS:
|
||||||
BEDSHEETS
|
BEDSHEETS
|
||||||
LINEN BINS
|
LINEN BINS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet
|
/obj/item/weapon/bedsheet
|
||||||
name = "bedsheet"
|
name = "bedsheet"
|
||||||
desc = "A surprisingly soft linen bedsheet."
|
desc = "A surprisingly soft linen bedsheet."
|
||||||
icon = 'icons/obj/bedsheets.dmi'
|
icon = 'icons/obj/bedsheets.dmi'
|
||||||
icon_state = "sheetwhite"
|
icon_state = "sheetwhite"
|
||||||
item_state = "bedsheet"
|
item_state = "bedsheet"
|
||||||
slot_flags = SLOT_NECK
|
slot_flags = SLOT_NECK
|
||||||
layer = MOB_LAYER
|
layer = MOB_LAYER
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
throw_speed = 1
|
throw_speed = 1
|
||||||
throw_range = 2
|
throw_range = 2
|
||||||
w_class = WEIGHT_CLASS_TINY
|
w_class = WEIGHT_CLASS_TINY
|
||||||
item_color = "white"
|
item_color = "white"
|
||||||
resistance_flags = FLAMMABLE
|
resistance_flags = FLAMMABLE
|
||||||
|
|
||||||
dog_fashion = /datum/dog_fashion/head/ghost
|
dog_fashion = /datum/dog_fashion/head/ghost
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/attack(mob/living/M, mob/user)
|
/obj/item/weapon/bedsheet/attack(mob/living/M, mob/user)
|
||||||
if(!attempt_initiate_surgery(src, M, user))
|
if(!attempt_initiate_surgery(src, M, user))
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/attack_self(mob/user)
|
/obj/item/weapon/bedsheet/attack_self(mob/user)
|
||||||
user.drop_item()
|
user.drop_item()
|
||||||
if(layer == initial(layer))
|
if(layer == initial(layer))
|
||||||
layer = ABOVE_MOB_LAYER
|
layer = ABOVE_MOB_LAYER
|
||||||
to_chat(user, "<span class='notice'>You cover yourself with [src].</span>")
|
to_chat(user, "<span class='notice'>You cover yourself with [src].</span>")
|
||||||
else
|
else
|
||||||
layer = initial(layer)
|
layer = initial(layer)
|
||||||
to_chat(user, "<span class='notice'>You smooth [src] out beneath you.</span>")
|
to_chat(user, "<span class='notice'>You smooth [src] out beneath you.</span>")
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user, params)
|
/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user, params)
|
||||||
if(istype(I, /obj/item/weapon/wirecutters) || I.is_sharp())
|
if(istype(I, /obj/item/weapon/wirecutters) || I.is_sharp())
|
||||||
var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3)
|
var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3)
|
||||||
transfer_fingerprints_to(C)
|
transfer_fingerprints_to(C)
|
||||||
C.add_fingerprint(user)
|
C.add_fingerprint(user)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
to_chat(user, "<span class='notice'>You tear [src] up.</span>")
|
to_chat(user, "<span class='notice'>You tear [src] up.</span>")
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/blue
|
/obj/item/weapon/bedsheet/blue
|
||||||
icon_state = "sheetblue"
|
icon_state = "sheetblue"
|
||||||
item_color = "blue"
|
item_color = "blue"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/green
|
/obj/item/weapon/bedsheet/green
|
||||||
icon_state = "sheetgreen"
|
icon_state = "sheetgreen"
|
||||||
item_color = "green"
|
item_color = "green"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/orange
|
/obj/item/weapon/bedsheet/orange
|
||||||
icon_state = "sheetorange"
|
icon_state = "sheetorange"
|
||||||
item_color = "orange"
|
item_color = "orange"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/purple
|
/obj/item/weapon/bedsheet/purple
|
||||||
icon_state = "sheetpurple"
|
icon_state = "sheetpurple"
|
||||||
item_color = "purple"
|
item_color = "purple"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/patriot
|
/obj/item/weapon/bedsheet/patriot
|
||||||
name = "patriotic bedsheet"
|
name = "patriotic bedsheet"
|
||||||
desc = "You've never felt more free than when sleeping on this."
|
desc = "You've never felt more free than when sleeping on this."
|
||||||
icon_state = "sheetUSA"
|
icon_state = "sheetUSA"
|
||||||
item_color = "sheetUSA"
|
item_color = "sheetUSA"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/rainbow
|
/obj/item/weapon/bedsheet/rainbow
|
||||||
name = "rainbow bedsheet"
|
name = "rainbow bedsheet"
|
||||||
desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together."
|
desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together."
|
||||||
icon_state = "sheetrainbow"
|
icon_state = "sheetrainbow"
|
||||||
item_color = "rainbow"
|
item_color = "rainbow"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/red
|
/obj/item/weapon/bedsheet/red
|
||||||
icon_state = "sheetred"
|
icon_state = "sheetred"
|
||||||
item_color = "red"
|
item_color = "red"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/yellow
|
/obj/item/weapon/bedsheet/yellow
|
||||||
icon_state = "sheetyellow"
|
icon_state = "sheetyellow"
|
||||||
item_color = "yellow"
|
item_color = "yellow"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/mime
|
/obj/item/weapon/bedsheet/mime
|
||||||
name = "mime's blanket"
|
name = "mime's blanket"
|
||||||
desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this."
|
desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this."
|
||||||
icon_state = "sheetmime"
|
icon_state = "sheetmime"
|
||||||
item_color = "mime"
|
item_color = "mime"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/clown
|
/obj/item/weapon/bedsheet/clown
|
||||||
name = "clown's blanket"
|
name = "clown's blanket"
|
||||||
desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas."
|
desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas."
|
||||||
icon_state = "sheetclown"
|
icon_state = "sheetclown"
|
||||||
item_color = "clown"
|
item_color = "clown"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/captain
|
/obj/item/weapon/bedsheet/captain
|
||||||
name = "captain's bedsheet"
|
name = "captain's bedsheet"
|
||||||
desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains."
|
desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains."
|
||||||
icon_state = "sheetcaptain"
|
icon_state = "sheetcaptain"
|
||||||
item_color = "captain"
|
item_color = "captain"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/rd
|
/obj/item/weapon/bedsheet/rd
|
||||||
name = "research director's bedsheet"
|
name = "research director's bedsheet"
|
||||||
desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day."
|
desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day."
|
||||||
icon_state = "sheetrd"
|
icon_state = "sheetrd"
|
||||||
item_color = "director"
|
item_color = "director"
|
||||||
|
|
||||||
// for Free Golems.
|
// for Free Golems.
|
||||||
/obj/item/weapon/bedsheet/rd/royal_cape
|
/obj/item/weapon/bedsheet/rd/royal_cape
|
||||||
name = "Royal Cape of the Liberator"
|
name = "Royal Cape of the Liberator"
|
||||||
desc = "Majestic."
|
desc = "Majestic."
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/medical
|
/obj/item/weapon/bedsheet/medical
|
||||||
name = "medical blanket"
|
name = "medical blanket"
|
||||||
desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station."
|
desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station."
|
||||||
icon_state = "sheetmedical"
|
icon_state = "sheetmedical"
|
||||||
item_color = "medical"
|
item_color = "medical"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/cmo
|
/obj/item/weapon/bedsheet/cmo
|
||||||
name = "chief medical officer's bedsheet"
|
name = "chief medical officer's bedsheet"
|
||||||
desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime."
|
desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime."
|
||||||
icon_state = "sheetcmo"
|
icon_state = "sheetcmo"
|
||||||
item_color = "cmo"
|
item_color = "cmo"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/hos
|
/obj/item/weapon/bedsheet/hos
|
||||||
name = "head of security's bedsheet"
|
name = "head of security's bedsheet"
|
||||||
desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!"
|
desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!"
|
||||||
icon_state = "sheethos"
|
icon_state = "sheethos"
|
||||||
item_color = "hosred"
|
item_color = "hosred"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/hop
|
/obj/item/weapon/bedsheet/hop
|
||||||
name = "head of personnel's bedsheet"
|
name = "head of personnel's bedsheet"
|
||||||
desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio."
|
desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio."
|
||||||
icon_state = "sheethop"
|
icon_state = "sheethop"
|
||||||
item_color = "hop"
|
item_color = "hop"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/ce
|
/obj/item/weapon/bedsheet/ce
|
||||||
name = "chief engineer's bedsheet"
|
name = "chief engineer's bedsheet"
|
||||||
desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil."
|
desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil."
|
||||||
icon_state = "sheetce"
|
icon_state = "sheetce"
|
||||||
item_color = "chief"
|
item_color = "chief"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/qm
|
/obj/item/weapon/bedsheet/qm
|
||||||
name = "quartermaster's bedsheet"
|
name = "quartermaster's bedsheet"
|
||||||
desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper."
|
desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper."
|
||||||
icon_state = "sheetqm"
|
icon_state = "sheetqm"
|
||||||
item_color = "qm"
|
item_color = "qm"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/brown
|
/obj/item/weapon/bedsheet/brown
|
||||||
icon_state = "sheetbrown"
|
icon_state = "sheetbrown"
|
||||||
item_color = "cargo"
|
item_color = "cargo"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/black
|
/obj/item/weapon/bedsheet/black
|
||||||
icon_state = "sheetblack"
|
icon_state = "sheetblack"
|
||||||
item_color = "black"
|
item_color = "black"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/centcom
|
/obj/item/weapon/bedsheet/centcom
|
||||||
name = "\improper Centcom bedsheet"
|
name = "\improper Centcom bedsheet"
|
||||||
desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials."
|
desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials."
|
||||||
icon_state = "sheetcentcom"
|
icon_state = "sheetcentcom"
|
||||||
item_color = "centcom"
|
item_color = "centcom"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/syndie
|
/obj/item/weapon/bedsheet/syndie
|
||||||
name = "syndicate bedsheet"
|
name = "syndicate bedsheet"
|
||||||
desc = "It has a syndicate emblem and it has an aura of evil."
|
desc = "It has a syndicate emblem and it has an aura of evil."
|
||||||
icon_state = "sheetsyndie"
|
icon_state = "sheetsyndie"
|
||||||
item_color = "syndie"
|
item_color = "syndie"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/cult
|
/obj/item/weapon/bedsheet/cult
|
||||||
name = "cultist's bedsheet"
|
name = "cultist's bedsheet"
|
||||||
desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence."
|
desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence."
|
||||||
icon_state = "sheetcult"
|
icon_state = "sheetcult"
|
||||||
item_color = "cult"
|
item_color = "cult"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/wiz
|
/obj/item/weapon/bedsheet/wiz
|
||||||
name = "wizard's bedsheet"
|
name = "wizard's bedsheet"
|
||||||
desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!"
|
desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!"
|
||||||
icon_state = "sheetwiz"
|
icon_state = "sheetwiz"
|
||||||
item_color = "wiz"
|
item_color = "wiz"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/nanotrasen
|
/obj/item/weapon/bedsheet/nanotrasen
|
||||||
name = "nanotrasen bedsheet"
|
name = "nanotrasen bedsheet"
|
||||||
desc = "It has the Nanotrasen logo on it and has an aura of duty."
|
desc = "It has the Nanotrasen logo on it and has an aura of duty."
|
||||||
icon_state = "sheetNT"
|
icon_state = "sheetNT"
|
||||||
item_color = "nanotrasen"
|
item_color = "nanotrasen"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/ian
|
/obj/item/weapon/bedsheet/ian
|
||||||
icon_state = "sheetian"
|
icon_state = "sheetian"
|
||||||
item_color = "ian"
|
item_color = "ian"
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/random
|
/obj/item/weapon/bedsheet/random
|
||||||
icon_state = "sheetrainbow"
|
icon_state = "sheetrainbow"
|
||||||
item_color = "rainbow"
|
item_color = "rainbow"
|
||||||
name = "random bedsheet"
|
name = "random bedsheet"
|
||||||
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
|
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
|
||||||
|
|
||||||
/obj/item/weapon/bedsheet/random/New()
|
/obj/item/weapon/bedsheet/random/New()
|
||||||
var/obj/item/weapon/bedsheet/B = pick(subtypesof(/obj/item/weapon/bedsheet) - /obj/item/weapon/bedsheet/random)
|
var/obj/item/weapon/bedsheet/B = pick(subtypesof(/obj/item/weapon/bedsheet) - /obj/item/weapon/bedsheet/random)
|
||||||
name = initial(B.name)
|
name = initial(B.name)
|
||||||
desc = initial(B.desc)
|
desc = initial(B.desc)
|
||||||
icon_state = initial(B.icon_state)
|
icon_state = initial(B.icon_state)
|
||||||
item_state = initial(B.item_state)
|
item_state = initial(B.item_state)
|
||||||
item_color = initial(B.item_color)
|
item_color = initial(B.item_color)
|
||||||
|
|
||||||
/obj/structure/bedsheetbin
|
/obj/structure/bedsheetbin
|
||||||
name = "linen bin"
|
name = "linen bin"
|
||||||
desc = "It looks rather cosy."
|
desc = "It looks rather cosy."
|
||||||
icon = 'icons/obj/structures.dmi'
|
icon = 'icons/obj/structures.dmi'
|
||||||
icon_state = "linenbin-full"
|
icon_state = "linenbin-full"
|
||||||
anchored = 1
|
anchored = 1
|
||||||
resistance_flags = FLAMMABLE
|
resistance_flags = FLAMMABLE
|
||||||
obj_integrity = 70
|
obj_integrity = 70
|
||||||
max_integrity = 70
|
max_integrity = 70
|
||||||
var/amount = 10
|
var/amount = 10
|
||||||
var/list/sheets = list()
|
var/list/sheets = list()
|
||||||
var/obj/item/hidden = null
|
var/obj/item/hidden = null
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/bedsheetbin/examine(mob/user)
|
/obj/structure/bedsheetbin/examine(mob/user)
|
||||||
..()
|
..()
|
||||||
if(amount < 1)
|
if(amount < 1)
|
||||||
to_chat(user, "There are no bed sheets in the bin.")
|
to_chat(user, "There are no bed sheets in the bin.")
|
||||||
else if(amount == 1)
|
else if(amount == 1)
|
||||||
to_chat(user, "There is one bed sheet in the bin.")
|
to_chat(user, "There is one bed sheet in the bin.")
|
||||||
else
|
else
|
||||||
to_chat(user, "There are [amount] bed sheets in the bin.")
|
to_chat(user, "There are [amount] bed sheets in the bin.")
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/bedsheetbin/update_icon()
|
/obj/structure/bedsheetbin/update_icon()
|
||||||
switch(amount)
|
switch(amount)
|
||||||
if(0)
|
if(0)
|
||||||
icon_state = "linenbin-empty"
|
icon_state = "linenbin-empty"
|
||||||
if(1 to 5)
|
if(1 to 5)
|
||||||
icon_state = "linenbin-half"
|
icon_state = "linenbin-half"
|
||||||
else
|
else
|
||||||
icon_state = "linenbin-full"
|
icon_state = "linenbin-full"
|
||||||
|
|
||||||
/obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume)
|
/obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume)
|
||||||
if(amount)
|
if(amount)
|
||||||
amount = 0
|
amount = 0
|
||||||
update_icon()
|
update_icon()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params)
|
/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params)
|
||||||
if(istype(I, /obj/item/weapon/bedsheet))
|
if(istype(I, /obj/item/weapon/bedsheet))
|
||||||
if(!user.drop_item())
|
if(!user.drop_item())
|
||||||
return
|
return
|
||||||
I.loc = src
|
I.loc = src
|
||||||
sheets.Add(I)
|
sheets.Add(I)
|
||||||
amount++
|
amount++
|
||||||
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
|
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
|
else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
|
||||||
if(!user.drop_item())
|
if(!user.drop_item())
|
||||||
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot hide it among the sheets!</span>")
|
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot hide it among the sheets!</span>")
|
||||||
return
|
return
|
||||||
I.loc = src
|
I.loc = src
|
||||||
hidden = I
|
hidden = I
|
||||||
to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>")
|
to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/bedsheetbin/attack_paw(mob/user)
|
/obj/structure/bedsheetbin/attack_paw(mob/user)
|
||||||
return attack_hand(user)
|
return attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/bedsheetbin/attack_hand(mob/user)
|
/obj/structure/bedsheetbin/attack_hand(mob/user)
|
||||||
if(user.lying)
|
if(user.lying)
|
||||||
return
|
return
|
||||||
if(amount >= 1)
|
if(amount >= 1)
|
||||||
amount--
|
amount--
|
||||||
|
|
||||||
var/obj/item/weapon/bedsheet/B
|
var/obj/item/weapon/bedsheet/B
|
||||||
if(sheets.len > 0)
|
if(sheets.len > 0)
|
||||||
B = sheets[sheets.len]
|
B = sheets[sheets.len]
|
||||||
sheets.Remove(B)
|
sheets.Remove(B)
|
||||||
|
|
||||||
else
|
else
|
||||||
B = new /obj/item/weapon/bedsheet(loc)
|
B = new /obj/item/weapon/bedsheet(loc)
|
||||||
|
|
||||||
B.loc = user.loc
|
B.loc = user.loc
|
||||||
user.put_in_hands(B)
|
user.put_in_hands(B)
|
||||||
to_chat(user, "<span class='notice'>You take [B] out of [src].</span>")
|
to_chat(user, "<span class='notice'>You take [B] out of [src].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
if(hidden)
|
if(hidden)
|
||||||
hidden.loc = user.loc
|
hidden.loc = user.loc
|
||||||
to_chat(user, "<span class='notice'>[hidden] falls out of [B]!</span>")
|
to_chat(user, "<span class='notice'>[hidden] falls out of [B]!</span>")
|
||||||
hidden = null
|
hidden = null
|
||||||
|
|
||||||
|
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
/obj/structure/bedsheetbin/attack_tk(mob/user)
|
/obj/structure/bedsheetbin/attack_tk(mob/user)
|
||||||
if(amount >= 1)
|
if(amount >= 1)
|
||||||
amount--
|
amount--
|
||||||
|
|
||||||
var/obj/item/weapon/bedsheet/B
|
var/obj/item/weapon/bedsheet/B
|
||||||
if(sheets.len > 0)
|
if(sheets.len > 0)
|
||||||
B = sheets[sheets.len]
|
B = sheets[sheets.len]
|
||||||
sheets.Remove(B)
|
sheets.Remove(B)
|
||||||
|
|
||||||
else
|
else
|
||||||
B = new /obj/item/weapon/bedsheet(loc)
|
B = new /obj/item/weapon/bedsheet(loc)
|
||||||
|
|
||||||
B.loc = loc
|
B.loc = loc
|
||||||
to_chat(user, "<span class='notice'>You telekinetically remove [B] from [src].</span>")
|
to_chat(user, "<span class='notice'>You telekinetically remove [B] from [src].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
if(hidden)
|
if(hidden)
|
||||||
hidden.loc = loc
|
hidden.loc = loc
|
||||||
hidden = null
|
hidden = null
|
||||||
|
|
||||||
|
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
|
|||||||
@@ -1,283 +1,283 @@
|
|||||||
/obj/structure/closet/secure_closet/captains
|
/obj/structure/closet/secure_closet/captains
|
||||||
name = "\proper captain's locker"
|
name = "\proper captain's locker"
|
||||||
req_access = list(GLOB.access_captain)
|
req_access = list(GLOB.access_captain)
|
||||||
icon_state = "cap"
|
icon_state = "cap"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/captains/PopulateContents()
|
/obj/structure/closet/secure_closet/captains/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/suit/hooded/wintercoat/captain(src)
|
new /obj/item/clothing/suit/hooded/wintercoat/captain(src)
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
new /obj/item/weapon/storage/backpack/captain(src)
|
new /obj/item/weapon/storage/backpack/captain(src)
|
||||||
else
|
else
|
||||||
new /obj/item/weapon/storage/backpack/satchel/cap(src)
|
new /obj/item/weapon/storage/backpack/satchel/cap(src)
|
||||||
new /obj/item/clothing/neck/cloak/cap(src)
|
new /obj/item/clothing/neck/cloak/cap(src)
|
||||||
new /obj/item/weapon/storage/daki(src)
|
new /obj/item/weapon/storage/daki(src)
|
||||||
new /obj/item/weapon/storage/backpack/dufflebag/captain(src)
|
new /obj/item/weapon/storage/backpack/dufflebag/captain(src)
|
||||||
new /obj/item/clothing/head/crown/fancy(src)
|
new /obj/item/clothing/head/crown/fancy(src)
|
||||||
new /obj/item/clothing/suit/captunic(src)
|
new /obj/item/clothing/suit/captunic(src)
|
||||||
new /obj/item/clothing/under/captainparade(src)
|
new /obj/item/clothing/under/captainparade(src)
|
||||||
new /obj/item/clothing/head/caphat/parade(src)
|
new /obj/item/clothing/head/caphat/parade(src)
|
||||||
new /obj/item/clothing/under/rank/captain(src)
|
new /obj/item/clothing/under/rank/captain(src)
|
||||||
new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src)
|
new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src)
|
||||||
new /obj/item/weapon/cartridge/captain(src)
|
new /obj/item/weapon/cartridge/captain(src)
|
||||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||||
new /obj/item/weapon/storage/box/silver_ids(src)
|
new /obj/item/weapon/storage/box/silver_ids(src)
|
||||||
new /obj/item/device/radio/headset/heads/captain/alt(src)
|
new /obj/item/device/radio/headset/heads/captain/alt(src)
|
||||||
new /obj/item/device/radio/headset/heads/captain(src)
|
new /obj/item/device/radio/headset/heads/captain(src)
|
||||||
new /obj/item/clothing/glasses/sunglasses/gar/supergar(src)
|
new /obj/item/clothing/glasses/sunglasses/gar/supergar(src)
|
||||||
new /obj/item/clothing/gloves/color/captain(src)
|
new /obj/item/clothing/gloves/color/captain(src)
|
||||||
new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
|
new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
|
||||||
new /obj/item/weapon/storage/belt/sabre(src)
|
new /obj/item/weapon/storage/belt/sabre(src)
|
||||||
new /obj/item/weapon/gun/energy/e_gun(src)
|
new /obj/item/weapon/gun/energy/e_gun(src)
|
||||||
new /obj/item/weapon/door_remote/captain(src)
|
new /obj/item/weapon/door_remote/captain(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/hop
|
/obj/structure/closet/secure_closet/hop
|
||||||
name = "\proper head of personnel's locker"
|
name = "\proper head of personnel's locker"
|
||||||
req_access = list(GLOB.access_hop)
|
req_access = list(GLOB.access_hop)
|
||||||
icon_state = "hop"
|
icon_state = "hop"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/hop/PopulateContents()
|
/obj/structure/closet/secure_closet/hop/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/neck/cloak/hop(src)
|
new /obj/item/clothing/neck/cloak/hop(src)
|
||||||
new /obj/item/clothing/under/rank/head_of_personnel(src)
|
new /obj/item/clothing/under/rank/head_of_personnel(src)
|
||||||
new /obj/item/clothing/head/hopcap(src)
|
new /obj/item/clothing/head/hopcap(src)
|
||||||
new /obj/item/weapon/cartridge/hop(src)
|
new /obj/item/weapon/cartridge/hop(src)
|
||||||
new /obj/item/device/radio/headset/heads/hop(src)
|
new /obj/item/device/radio/headset/heads/hop(src)
|
||||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||||
new /obj/item/weapon/storage/box/ids(src)
|
new /obj/item/weapon/storage/box/ids(src)
|
||||||
new /obj/item/weapon/storage/box/ids(src)
|
new /obj/item/weapon/storage/box/ids(src)
|
||||||
new /obj/item/device/megaphone/command(src)
|
new /obj/item/device/megaphone/command(src)
|
||||||
new /obj/item/clothing/suit/armor/vest/alt(src)
|
new /obj/item/clothing/suit/armor/vest/alt(src)
|
||||||
new /obj/item/device/assembly/flash/handheld(src)
|
new /obj/item/device/assembly/flash/handheld(src)
|
||||||
new /obj/item/clothing/glasses/sunglasses(src)
|
new /obj/item/clothing/glasses/sunglasses(src)
|
||||||
new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
|
new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
|
||||||
new /obj/item/weapon/gun/energy/e_gun(src)
|
new /obj/item/weapon/gun/energy/e_gun(src)
|
||||||
new /obj/item/clothing/neck/petcollar(src)
|
new /obj/item/clothing/neck/petcollar(src)
|
||||||
new /obj/item/weapon/door_remote/civillian(src)
|
new /obj/item/weapon/door_remote/civillian(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/hos
|
/obj/structure/closet/secure_closet/hos
|
||||||
name = "\proper head of security's locker"
|
name = "\proper head of security's locker"
|
||||||
req_access = list(GLOB.access_hos)
|
req_access = list(GLOB.access_hos)
|
||||||
icon_state = "hos"
|
icon_state = "hos"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/hos/PopulateContents()
|
/obj/structure/closet/secure_closet/hos/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/neck/cloak/hos(src)
|
new /obj/item/clothing/neck/cloak/hos(src)
|
||||||
new /obj/item/weapon/cartridge/hos(src)
|
new /obj/item/weapon/cartridge/hos(src)
|
||||||
new /obj/item/device/radio/headset/heads/hos(src)
|
new /obj/item/device/radio/headset/heads/hos(src)
|
||||||
new /obj/item/clothing/under/hosparadefem(src)
|
new /obj/item/clothing/under/hosparadefem(src)
|
||||||
new /obj/item/clothing/under/hosparademale(src)
|
new /obj/item/clothing/under/hosparademale(src)
|
||||||
new /obj/item/clothing/suit/armor/vest/leather(src)
|
new /obj/item/clothing/suit/armor/vest/leather(src)
|
||||||
new /obj/item/clothing/suit/armor/hos(src)
|
new /obj/item/clothing/suit/armor/hos(src)
|
||||||
new /obj/item/clothing/under/rank/head_of_security/alt(src)
|
new /obj/item/clothing/under/rank/head_of_security/alt(src)
|
||||||
new /obj/item/clothing/head/HoS(src)
|
new /obj/item/clothing/head/HoS(src)
|
||||||
new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src)
|
new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src)
|
||||||
new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src)
|
new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src)
|
||||||
new /obj/item/device/megaphone/sec(src)
|
new /obj/item/device/megaphone/sec(src)
|
||||||
new /obj/item/weapon/holosign_creator/security(src)
|
new /obj/item/weapon/holosign_creator/security(src)
|
||||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||||
new /obj/item/clothing/mask/gas/sechailer/swat(src)
|
new /obj/item/clothing/mask/gas/sechailer/swat(src)
|
||||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||||
new /obj/item/weapon/shield/riot/tele(src)
|
new /obj/item/weapon/shield/riot/tele(src)
|
||||||
new /obj/item/weapon/storage/belt/security/full(src)
|
new /obj/item/weapon/storage/belt/security/full(src)
|
||||||
new /obj/item/weapon/gun/energy/e_gun/hos(src)
|
new /obj/item/weapon/gun/energy/e_gun/hos(src)
|
||||||
new /obj/item/device/flashlight/seclite(src)
|
new /obj/item/device/flashlight/seclite(src)
|
||||||
new /obj/item/weapon/pinpointer(src)
|
new /obj/item/weapon/pinpointer(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/warden
|
/obj/structure/closet/secure_closet/warden
|
||||||
name = "\proper warden's locker"
|
name = "\proper warden's locker"
|
||||||
req_access = list(GLOB.access_armory)
|
req_access = list(GLOB.access_armory)
|
||||||
icon_state = "warden"
|
icon_state = "warden"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/warden/PopulateContents()
|
/obj/structure/closet/secure_closet/warden/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/device/radio/headset/headset_sec(src)
|
new /obj/item/device/radio/headset/headset_sec(src)
|
||||||
new /obj/item/clothing/suit/armor/vest/warden(src)
|
new /obj/item/clothing/suit/armor/vest/warden(src)
|
||||||
new /obj/item/clothing/head/warden(src)
|
new /obj/item/clothing/head/warden(src)
|
||||||
new /obj/item/clothing/head/beret/sec/navywarden(src)
|
new /obj/item/clothing/head/beret/sec/navywarden(src)
|
||||||
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
|
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
|
||||||
new /obj/item/clothing/under/rank/warden/navyblue(src)
|
new /obj/item/clothing/under/rank/warden/navyblue(src)
|
||||||
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
|
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
|
||||||
new /obj/item/weapon/holosign_creator/security(src)
|
new /obj/item/weapon/holosign_creator/security(src)
|
||||||
new /obj/item/clothing/mask/gas/sechailer(src)
|
new /obj/item/clothing/mask/gas/sechailer(src)
|
||||||
new /obj/item/weapon/storage/box/zipties(src)
|
new /obj/item/weapon/storage/box/zipties(src)
|
||||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||||
new /obj/item/weapon/storage/belt/security/full(src)
|
new /obj/item/weapon/storage/belt/security/full(src)
|
||||||
new /obj/item/device/flashlight/seclite(src)
|
new /obj/item/device/flashlight/seclite(src)
|
||||||
new /obj/item/clothing/gloves/krav_maga/sec(src)
|
new /obj/item/clothing/gloves/krav_maga/sec(src)
|
||||||
new /obj/item/weapon/door_remote/head_of_security(src)
|
new /obj/item/weapon/door_remote/head_of_security(src)
|
||||||
new /obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube(src)
|
new /obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security
|
/obj/structure/closet/secure_closet/security
|
||||||
name = "security officer's locker"
|
name = "security officer's locker"
|
||||||
req_access = list(GLOB.access_security)
|
req_access = list(GLOB.access_security)
|
||||||
icon_state = "sec"
|
icon_state = "sec"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/PopulateContents()
|
/obj/structure/closet/secure_closet/security/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/suit/armor/vest(src)
|
new /obj/item/clothing/suit/armor/vest(src)
|
||||||
new /obj/item/clothing/head/helmet/sec(src)
|
new /obj/item/clothing/head/helmet/sec(src)
|
||||||
new /obj/item/device/radio/headset/headset_sec(src)
|
new /obj/item/device/radio/headset/headset_sec(src)
|
||||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||||
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
|
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
|
||||||
new /obj/item/device/flashlight/seclite(src)
|
new /obj/item/device/flashlight/seclite(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/sec
|
/obj/structure/closet/secure_closet/security/sec
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/sec/PopulateContents()
|
/obj/structure/closet/secure_closet/security/sec/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/weapon/storage/belt/security/full(src)
|
new /obj/item/weapon/storage/belt/security/full(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/cargo
|
/obj/structure/closet/secure_closet/security/cargo
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/cargo/PopulateContents()
|
/obj/structure/closet/secure_closet/security/cargo/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/tie/armband/cargo(src)
|
new /obj/item/clothing/tie/armband/cargo(src)
|
||||||
new /obj/item/device/encryptionkey/headset_cargo(src)
|
new /obj/item/device/encryptionkey/headset_cargo(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/engine
|
/obj/structure/closet/secure_closet/security/engine
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/engine/PopulateContents()
|
/obj/structure/closet/secure_closet/security/engine/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/tie/armband/engine(src)
|
new /obj/item/clothing/tie/armband/engine(src)
|
||||||
new /obj/item/device/encryptionkey/headset_eng(src)
|
new /obj/item/device/encryptionkey/headset_eng(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/science
|
/obj/structure/closet/secure_closet/security/science
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/science/PopulateContents()
|
/obj/structure/closet/secure_closet/security/science/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/tie/armband/science(src)
|
new /obj/item/clothing/tie/armband/science(src)
|
||||||
new /obj/item/device/encryptionkey/headset_sci(src)
|
new /obj/item/device/encryptionkey/headset_sci(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/med
|
/obj/structure/closet/secure_closet/security/med
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/security/med/PopulateContents()
|
/obj/structure/closet/secure_closet/security/med/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/tie/armband/medblue(src)
|
new /obj/item/clothing/tie/armband/medblue(src)
|
||||||
new /obj/item/device/encryptionkey/headset_med(src)
|
new /obj/item/device/encryptionkey/headset_med(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/detective
|
/obj/structure/closet/secure_closet/detective
|
||||||
name = "\proper detective's cabinet"
|
name = "\proper detective's cabinet"
|
||||||
req_access = list(GLOB.access_forensics_lockers)
|
req_access = list(GLOB.access_forensics_lockers)
|
||||||
icon_state = "cabinet"
|
icon_state = "cabinet"
|
||||||
resistance_flags = FLAMMABLE
|
resistance_flags = FLAMMABLE
|
||||||
obj_integrity = 70
|
obj_integrity = 70
|
||||||
max_integrity = 70
|
max_integrity = 70
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/detective/PopulateContents()
|
/obj/structure/closet/secure_closet/detective/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/under/rank/det(src)
|
new /obj/item/clothing/under/rank/det(src)
|
||||||
new /obj/item/clothing/suit/det_suit(src)
|
new /obj/item/clothing/suit/det_suit(src)
|
||||||
new /obj/item/clothing/head/det_hat(src)
|
new /obj/item/clothing/head/det_hat(src)
|
||||||
new /obj/item/clothing/gloves/color/black(src)
|
new /obj/item/clothing/gloves/color/black(src)
|
||||||
new /obj/item/clothing/under/rank/det/grey(src)
|
new /obj/item/clothing/under/rank/det/grey(src)
|
||||||
new /obj/item/clothing/tie/waistcoat(src)
|
new /obj/item/clothing/tie/waistcoat(src)
|
||||||
new /obj/item/clothing/suit/det_suit/grey(src)
|
new /obj/item/clothing/suit/det_suit/grey(src)
|
||||||
new /obj/item/clothing/head/fedora(src)
|
new /obj/item/clothing/head/fedora(src)
|
||||||
new /obj/item/clothing/shoes/laceup(src)
|
new /obj/item/clothing/shoes/laceup(src)
|
||||||
new /obj/item/weapon/storage/box/evidence(src)
|
new /obj/item/weapon/storage/box/evidence(src)
|
||||||
new /obj/item/device/radio/headset/headset_sec(src)
|
new /obj/item/device/radio/headset/headset_sec(src)
|
||||||
new /obj/item/device/detective_scanner(src)
|
new /obj/item/device/detective_scanner(src)
|
||||||
new /obj/item/device/flashlight/seclite(src)
|
new /obj/item/device/flashlight/seclite(src)
|
||||||
new /obj/item/weapon/holosign_creator/security(src)
|
new /obj/item/weapon/holosign_creator/security(src)
|
||||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||||
new /obj/item/clothing/suit/armor/vest/det_suit(src)
|
new /obj/item/clothing/suit/armor/vest/det_suit(src)
|
||||||
new /obj/item/weapon/storage/belt/holster/full(src)
|
new /obj/item/weapon/storage/belt/holster/full(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/injection
|
/obj/structure/closet/secure_closet/injection
|
||||||
name = "lethal injections"
|
name = "lethal injections"
|
||||||
req_access = list(GLOB.access_hos)
|
req_access = list(GLOB.access_hos)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/injection/PopulateContents()
|
/obj/structure/closet/secure_closet/injection/PopulateContents()
|
||||||
..()
|
..()
|
||||||
for(var/i in 1 to 5)
|
for(var/i in 1 to 5)
|
||||||
new /obj/item/weapon/reagent_containers/syringe/lethal/execution(src)
|
new /obj/item/weapon/reagent_containers/syringe/lethal/execution(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/brig
|
/obj/structure/closet/secure_closet/brig
|
||||||
name = "brig locker"
|
name = "brig locker"
|
||||||
req_access = list(GLOB.access_brig)
|
req_access = list(GLOB.access_brig)
|
||||||
anchored = 1
|
anchored = 1
|
||||||
var/id = null
|
var/id = null
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/brig/PopulateContents()
|
/obj/structure/closet/secure_closet/brig/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/under/rank/prisoner( src )
|
new /obj/item/clothing/under/rank/prisoner( src )
|
||||||
new /obj/item/clothing/shoes/sneakers/orange( src )
|
new /obj/item/clothing/shoes/sneakers/orange( src )
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/courtroom
|
/obj/structure/closet/secure_closet/courtroom
|
||||||
name = "courtroom locker"
|
name = "courtroom locker"
|
||||||
req_access = list(GLOB.access_court)
|
req_access = list(GLOB.access_court)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/courtroom/PopulateContents()
|
/obj/structure/closet/secure_closet/courtroom/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/paper/Court (src)
|
new /obj/item/weapon/paper/Court (src)
|
||||||
new /obj/item/weapon/pen (src)
|
new /obj/item/weapon/pen (src)
|
||||||
new /obj/item/clothing/suit/judgerobe (src)
|
new /obj/item/clothing/suit/judgerobe (src)
|
||||||
new /obj/item/clothing/head/powdered_wig (src)
|
new /obj/item/clothing/head/powdered_wig (src)
|
||||||
new /obj/item/weapon/storage/briefcase(src)
|
new /obj/item/weapon/storage/briefcase(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/armory1
|
/obj/structure/closet/secure_closet/armory1
|
||||||
name = "armory armor locker"
|
name = "armory armor locker"
|
||||||
req_access = list(GLOB.access_armory)
|
req_access = list(GLOB.access_armory)
|
||||||
icon_state = "armory"
|
icon_state = "armory"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/armory1/PopulateContents()
|
/obj/structure/closet/secure_closet/armory1/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/clothing/suit/armor/laserproof(src)
|
new /obj/item/clothing/suit/armor/laserproof(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/clothing/suit/armor/riot(src)
|
new /obj/item/clothing/suit/armor/riot(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/clothing/head/helmet/riot(src)
|
new /obj/item/clothing/head/helmet/riot(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/shield/riot(src)
|
new /obj/item/weapon/shield/riot(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/armory2
|
/obj/structure/closet/secure_closet/armory2
|
||||||
name = "armory ballistics locker"
|
name = "armory ballistics locker"
|
||||||
req_access = list(GLOB.access_armory)
|
req_access = list(GLOB.access_armory)
|
||||||
icon_state = "armory"
|
icon_state = "armory"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/armory2/PopulateContents()
|
/obj/structure/closet/secure_closet/armory2/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/weapon/storage/box/firingpins(src)
|
new /obj/item/weapon/storage/box/firingpins(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/storage/box/rubbershot(src)
|
new /obj/item/weapon/storage/box/rubbershot(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/gun/ballistic/shotgun/riot(src)
|
new /obj/item/weapon/gun/ballistic/shotgun/riot(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/armory3
|
/obj/structure/closet/secure_closet/armory3
|
||||||
name = "armory energy gun locker"
|
name = "armory energy gun locker"
|
||||||
req_access = list(GLOB.access_armory)
|
req_access = list(GLOB.access_armory)
|
||||||
icon_state = "armory"
|
icon_state = "armory"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/armory3/PopulateContents()
|
/obj/structure/closet/secure_closet/armory3/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/weapon/storage/box/firingpins(src)
|
new /obj/item/weapon/storage/box/firingpins(src)
|
||||||
new /obj/item/weapon/gun/energy/ionrifle(src)
|
new /obj/item/weapon/gun/energy/ionrifle(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/gun/energy/e_gun(src)
|
new /obj/item/weapon/gun/energy/e_gun(src)
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/gun/energy/laser(src)
|
new /obj/item/weapon/gun/energy/laser(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/tac
|
/obj/structure/closet/secure_closet/tac
|
||||||
name = "armory tac locker"
|
name = "armory tac locker"
|
||||||
req_access = list(GLOB.access_armory)
|
req_access = list(GLOB.access_armory)
|
||||||
icon_state = "tac"
|
icon_state = "tac"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/tac/PopulateContents()
|
/obj/structure/closet/secure_closet/tac/PopulateContents()
|
||||||
..()
|
..()
|
||||||
new /obj/item/weapon/gun/ballistic/automatic/wt550(src)
|
new /obj/item/weapon/gun/ballistic/automatic/wt550(src)
|
||||||
new /obj/item/clothing/head/helmet/alt(src)
|
new /obj/item/clothing/head/helmet/alt(src)
|
||||||
new /obj/item/clothing/mask/gas/sechailer(src)
|
new /obj/item/clothing/mask/gas/sechailer(src)
|
||||||
new /obj/item/clothing/suit/armor/bulletproof(src)
|
new /obj/item/clothing/suit/armor/bulletproof(src)
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/lethalshots
|
/obj/structure/closet/secure_closet/lethalshots
|
||||||
name = "shotgun lethal rounds"
|
name = "shotgun lethal rounds"
|
||||||
req_access = list(GLOB.access_armory)
|
req_access = list(GLOB.access_armory)
|
||||||
icon_state = "tac"
|
icon_state = "tac"
|
||||||
|
|
||||||
/obj/structure/closet/secure_closet/lethalshots/PopulateContents()
|
/obj/structure/closet/secure_closet/lethalshots/PopulateContents()
|
||||||
..()
|
..()
|
||||||
for(var/i in 1 to 3)
|
for(var/i in 1 to 3)
|
||||||
new /obj/item/weapon/storage/box/lethalshot(src)
|
new /obj/item/weapon/storage/box/lethalshot(src)
|
||||||
|
|||||||
@@ -1,221 +1,221 @@
|
|||||||
//NOT using the existing /obj/machinery/door type, since that has some complications on its own, mainly based on its
|
//NOT using the existing /obj/machinery/door type, since that has some complications on its own, mainly based on its
|
||||||
//machineryness
|
//machineryness
|
||||||
|
|
||||||
/obj/structure/mineral_door
|
/obj/structure/mineral_door
|
||||||
name = "metal door"
|
name = "metal door"
|
||||||
density = 1
|
density = 1
|
||||||
anchored = 1
|
anchored = 1
|
||||||
opacity = 1
|
opacity = 1
|
||||||
|
|
||||||
icon = 'icons/obj/doors/mineral_doors.dmi'
|
icon = 'icons/obj/doors/mineral_doors.dmi'
|
||||||
icon_state = "metal"
|
icon_state = "metal"
|
||||||
|
|
||||||
var/initial_state
|
var/initial_state
|
||||||
var/state = 0 //closed, 1 == open
|
var/state = 0 //closed, 1 == open
|
||||||
var/isSwitchingStates = 0
|
var/isSwitchingStates = 0
|
||||||
var/close_delay = -1 //-1 if does not auto close.
|
var/close_delay = -1 //-1 if does not auto close.
|
||||||
obj_integrity = 200
|
obj_integrity = 200
|
||||||
max_integrity = 200
|
max_integrity = 200
|
||||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 50, acid = 50)
|
armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 50, acid = 50)
|
||||||
var/sheetType = /obj/item/stack/sheet/metal
|
var/sheetType = /obj/item/stack/sheet/metal
|
||||||
var/sheetAmount = 7
|
var/sheetAmount = 7
|
||||||
var/openSound = 'sound/effects/stonedoor_openclose.ogg'
|
var/openSound = 'sound/effects/stonedoor_openclose.ogg'
|
||||||
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
|
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
|
||||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||||
|
|
||||||
/obj/structure/mineral_door/New(location)
|
/obj/structure/mineral_door/New(location)
|
||||||
..()
|
..()
|
||||||
initial_state = icon_state
|
initial_state = icon_state
|
||||||
air_update_turf(1)
|
air_update_turf(1)
|
||||||
|
|
||||||
/obj/structure/mineral_door/Destroy()
|
/obj/structure/mineral_door/Destroy()
|
||||||
density = 0
|
density = 0
|
||||||
air_update_turf(1)
|
air_update_turf(1)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/structure/mineral_door/Move()
|
/obj/structure/mineral_door/Move()
|
||||||
var/turf/T = loc
|
var/turf/T = loc
|
||||||
..()
|
..()
|
||||||
move_update_air(T)
|
move_update_air(T)
|
||||||
|
|
||||||
/obj/structure/mineral_door/Bumped(atom/user)
|
/obj/structure/mineral_door/Bumped(atom/user)
|
||||||
..()
|
..()
|
||||||
if(!state)
|
if(!state)
|
||||||
return TryToSwitchState(user)
|
return TryToSwitchState(user)
|
||||||
|
|
||||||
/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral
|
/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral
|
||||||
if(isAI(user)) //so the AI can't open it
|
if(isAI(user)) //so the AI can't open it
|
||||||
return
|
return
|
||||||
else if(iscyborg(user)) //but cyborgs can
|
else if(iscyborg(user)) //but cyborgs can
|
||||||
if(get_dist(user,src) <= 1) //not remotely though
|
if(get_dist(user,src) <= 1) //not remotely though
|
||||||
return TryToSwitchState(user)
|
return TryToSwitchState(user)
|
||||||
|
|
||||||
/obj/structure/mineral_door/attack_paw(mob/user)
|
/obj/structure/mineral_door/attack_paw(mob/user)
|
||||||
return TryToSwitchState(user)
|
return TryToSwitchState(user)
|
||||||
|
|
||||||
/obj/structure/mineral_door/attack_hand(mob/user)
|
/obj/structure/mineral_door/attack_hand(mob/user)
|
||||||
return TryToSwitchState(user)
|
return TryToSwitchState(user)
|
||||||
|
|
||||||
/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0)
|
/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0)
|
||||||
if(istype(mover, /obj/effect/beam))
|
if(istype(mover, /obj/effect/beam))
|
||||||
return !opacity
|
return !opacity
|
||||||
return !density
|
return !density
|
||||||
|
|
||||||
/obj/structure/mineral_door/proc/TryToSwitchState(atom/user)
|
/obj/structure/mineral_door/proc/TryToSwitchState(atom/user)
|
||||||
if(isSwitchingStates)
|
if(isSwitchingStates)
|
||||||
return
|
return
|
||||||
if(isliving(user))
|
if(isliving(user))
|
||||||
var/mob/living/M = user
|
var/mob/living/M = user
|
||||||
if(world.time - M.last_bumped <= 60)
|
if(world.time - M.last_bumped <= 60)
|
||||||
return //NOTE do we really need that?
|
return //NOTE do we really need that?
|
||||||
if(M.client)
|
if(M.client)
|
||||||
if(iscarbon(M))
|
if(iscarbon(M))
|
||||||
var/mob/living/carbon/C = M
|
var/mob/living/carbon/C = M
|
||||||
if(!C.handcuffed)
|
if(!C.handcuffed)
|
||||||
SwitchState()
|
SwitchState()
|
||||||
else
|
else
|
||||||
SwitchState()
|
SwitchState()
|
||||||
else if(istype(user, /obj/mecha))
|
else if(istype(user, /obj/mecha))
|
||||||
SwitchState()
|
SwitchState()
|
||||||
|
|
||||||
/obj/structure/mineral_door/proc/SwitchState()
|
/obj/structure/mineral_door/proc/SwitchState()
|
||||||
if(state)
|
if(state)
|
||||||
Close()
|
Close()
|
||||||
else
|
else
|
||||||
Open()
|
Open()
|
||||||
|
|
||||||
/obj/structure/mineral_door/proc/Open()
|
/obj/structure/mineral_door/proc/Open()
|
||||||
isSwitchingStates = 1
|
isSwitchingStates = 1
|
||||||
playsound(loc, openSound, 100, 1)
|
playsound(loc, openSound, 100, 1)
|
||||||
flick("[initial_state]opening",src)
|
flick("[initial_state]opening",src)
|
||||||
sleep(10)
|
sleep(10)
|
||||||
density = 0
|
density = 0
|
||||||
opacity = 0
|
opacity = 0
|
||||||
state = 1
|
state = 1
|
||||||
air_update_turf(1)
|
air_update_turf(1)
|
||||||
update_icon()
|
update_icon()
|
||||||
isSwitchingStates = 0
|
isSwitchingStates = 0
|
||||||
|
|
||||||
if(close_delay != -1)
|
if(close_delay != -1)
|
||||||
addtimer(CALLBACK(src, .proc/Close), close_delay)
|
addtimer(CALLBACK(src, .proc/Close), close_delay)
|
||||||
|
|
||||||
/obj/structure/mineral_door/proc/Close()
|
/obj/structure/mineral_door/proc/Close()
|
||||||
if(isSwitchingStates || state != 1)
|
if(isSwitchingStates || state != 1)
|
||||||
return
|
return
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
for(var/mob/living/L in T)
|
for(var/mob/living/L in T)
|
||||||
return
|
return
|
||||||
isSwitchingStates = 1
|
isSwitchingStates = 1
|
||||||
playsound(loc, closeSound, 100, 1)
|
playsound(loc, closeSound, 100, 1)
|
||||||
flick("[initial_state]closing",src)
|
flick("[initial_state]closing",src)
|
||||||
sleep(10)
|
sleep(10)
|
||||||
density = 1
|
density = 1
|
||||||
opacity = 1
|
opacity = 1
|
||||||
state = 0
|
state = 0
|
||||||
air_update_turf(1)
|
air_update_turf(1)
|
||||||
update_icon()
|
update_icon()
|
||||||
isSwitchingStates = 0
|
isSwitchingStates = 0
|
||||||
|
|
||||||
/obj/structure/mineral_door/update_icon()
|
/obj/structure/mineral_door/update_icon()
|
||||||
if(state)
|
if(state)
|
||||||
icon_state = "[initial_state]open"
|
icon_state = "[initial_state]open"
|
||||||
else
|
else
|
||||||
icon_state = initial_state
|
icon_state = initial_state
|
||||||
|
|
||||||
/obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params)
|
/obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params)
|
||||||
if(istype(W,/obj/item/weapon/pickaxe))
|
if(istype(W,/obj/item/weapon/pickaxe))
|
||||||
var/obj/item/weapon/pickaxe/digTool = W
|
var/obj/item/weapon/pickaxe/digTool = W
|
||||||
to_chat(user, "<span class='notice'>You start digging the [name]...</span>")
|
to_chat(user, "<span class='notice'>You start digging the [name]...</span>")
|
||||||
if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src)
|
if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src)
|
||||||
to_chat(user, "<span class='notice'>You finish digging.</span>")
|
to_chat(user, "<span class='notice'>You finish digging.</span>")
|
||||||
deconstruct(TRUE)
|
deconstruct(TRUE)
|
||||||
else if(user.a_intent != INTENT_HARM)
|
else if(user.a_intent != INTENT_HARM)
|
||||||
attack_hand(user)
|
attack_hand(user)
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/structure/mineral_door/deconstruct(disassembled = TRUE)
|
/obj/structure/mineral_door/deconstruct(disassembled = TRUE)
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
if(disassembled)
|
if(disassembled)
|
||||||
new sheetType(T, sheetAmount)
|
new sheetType(T, sheetAmount)
|
||||||
else
|
else
|
||||||
new sheetType(T, max(sheetAmount - 2, 1))
|
new sheetType(T, max(sheetAmount - 2, 1))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/obj/structure/mineral_door/iron
|
/obj/structure/mineral_door/iron
|
||||||
name = "iron door"
|
name = "iron door"
|
||||||
obj_integrity = 300
|
obj_integrity = 300
|
||||||
max_integrity = 300
|
max_integrity = 300
|
||||||
|
|
||||||
/obj/structure/mineral_door/silver
|
/obj/structure/mineral_door/silver
|
||||||
name = "silver door"
|
name = "silver door"
|
||||||
icon_state = "silver"
|
icon_state = "silver"
|
||||||
sheetType = /obj/item/stack/sheet/mineral/silver
|
sheetType = /obj/item/stack/sheet/mineral/silver
|
||||||
obj_integrity = 300
|
obj_integrity = 300
|
||||||
max_integrity = 300
|
max_integrity = 300
|
||||||
|
|
||||||
/obj/structure/mineral_door/gold
|
/obj/structure/mineral_door/gold
|
||||||
name = "gold door"
|
name = "gold door"
|
||||||
icon_state = "gold"
|
icon_state = "gold"
|
||||||
sheetType = /obj/item/stack/sheet/mineral/gold
|
sheetType = /obj/item/stack/sheet/mineral/gold
|
||||||
|
|
||||||
/obj/structure/mineral_door/uranium
|
/obj/structure/mineral_door/uranium
|
||||||
name = "uranium door"
|
name = "uranium door"
|
||||||
icon_state = "uranium"
|
icon_state = "uranium"
|
||||||
sheetType = /obj/item/stack/sheet/mineral/uranium
|
sheetType = /obj/item/stack/sheet/mineral/uranium
|
||||||
obj_integrity = 300
|
obj_integrity = 300
|
||||||
max_integrity = 300
|
max_integrity = 300
|
||||||
light_range = 2
|
light_range = 2
|
||||||
|
|
||||||
/obj/structure/mineral_door/sandstone
|
/obj/structure/mineral_door/sandstone
|
||||||
name = "sandstone door"
|
name = "sandstone door"
|
||||||
icon_state = "sandstone"
|
icon_state = "sandstone"
|
||||||
sheetType = /obj/item/stack/sheet/mineral/sandstone
|
sheetType = /obj/item/stack/sheet/mineral/sandstone
|
||||||
obj_integrity = 100
|
obj_integrity = 100
|
||||||
max_integrity = 100
|
max_integrity = 100
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent
|
/obj/structure/mineral_door/transparent
|
||||||
opacity = 0
|
opacity = 0
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent/Close()
|
/obj/structure/mineral_door/transparent/Close()
|
||||||
..()
|
..()
|
||||||
opacity = 0
|
opacity = 0
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent/plasma
|
/obj/structure/mineral_door/transparent/plasma
|
||||||
name = "plasma door"
|
name = "plasma door"
|
||||||
icon_state = "plasma"
|
icon_state = "plasma"
|
||||||
sheetType = /obj/item/stack/sheet/mineral/plasma
|
sheetType = /obj/item/stack/sheet/mineral/plasma
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/weapon/W, mob/user, params)
|
/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/weapon/W, mob/user, params)
|
||||||
if(W.is_hot())
|
if(W.is_hot())
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1)
|
message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1)
|
||||||
log_game("Plasma mineral door ignited by [key_name(user)] in [COORD(T)]")
|
log_game("Plasma mineral door ignited by [key_name(user)] in [COORD(T)]")
|
||||||
TemperatureAct()
|
TemperatureAct()
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||||
if(exposed_temperature > 300)
|
if(exposed_temperature > 300)
|
||||||
TemperatureAct()
|
TemperatureAct()
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct()
|
/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct()
|
||||||
atmos_spawn_air("plasma=500;TEMP=1000")
|
atmos_spawn_air("plasma=500;TEMP=1000")
|
||||||
deconstruct(FALSE)
|
deconstruct(FALSE)
|
||||||
|
|
||||||
/obj/structure/mineral_door/transparent/diamond
|
/obj/structure/mineral_door/transparent/diamond
|
||||||
name = "diamond door"
|
name = "diamond door"
|
||||||
icon_state = "diamond"
|
icon_state = "diamond"
|
||||||
sheetType = /obj/item/stack/sheet/mineral/diamond
|
sheetType = /obj/item/stack/sheet/mineral/diamond
|
||||||
obj_integrity = 1000
|
obj_integrity = 1000
|
||||||
max_integrity = 1000
|
max_integrity = 1000
|
||||||
|
|
||||||
/obj/structure/mineral_door/wood
|
/obj/structure/mineral_door/wood
|
||||||
name = "wood door"
|
name = "wood door"
|
||||||
icon_state = "wood"
|
icon_state = "wood"
|
||||||
openSound = 'sound/effects/doorcreaky.ogg'
|
openSound = 'sound/effects/doorcreaky.ogg'
|
||||||
closeSound = 'sound/effects/doorcreaky.ogg'
|
closeSound = 'sound/effects/doorcreaky.ogg'
|
||||||
sheetType = /obj/item/stack/sheet/mineral/wood
|
sheetType = /obj/item/stack/sheet/mineral/wood
|
||||||
resistance_flags = FLAMMABLE
|
resistance_flags = FLAMMABLE
|
||||||
obj_integrity = 200
|
obj_integrity = 200
|
||||||
max_integrity = 200
|
max_integrity = 200
|
||||||
|
|||||||
@@ -387,8 +387,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
for(var/obj/effect/landmark/L in GLOB.landmarks_list)
|
for(var/obj/effect/landmark/L in GLOB.landmarks_list)
|
||||||
if(L.name=="carpspawn")
|
if(L.name=="carpspawn")
|
||||||
ninja_spawn += L
|
ninja_spawn += L
|
||||||
var/datum/antagonist/ninja/ninjadatum = new_character.mind.has_antag_datum(ANTAG_DATUM_NINJA)
|
var/datum/antagonist/ninja/ninjadatum = new_character.mind.has_antag_datum(ANTAG_DATUM_NINJA)
|
||||||
ninjadatum.equip_space_ninja()
|
ninjadatum.equip_space_ninja()
|
||||||
if(ninja_spawn.len)
|
if(ninja_spawn.len)
|
||||||
var/obj/effect/landmark/ninja_spawn_here = pick(ninja_spawn)
|
var/obj/effect/landmark/ninja_spawn_here = pick(ninja_spawn)
|
||||||
new_character.loc = ninja_spawn_here.loc
|
new_character.loc = ninja_spawn_here.loc
|
||||||
@@ -586,7 +586,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
|
|
||||||
empulse(O, heavy, light)
|
empulse(O, heavy, light)
|
||||||
log_admin("[key_name(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])")
|
log_admin("[key_name(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])")
|
||||||
message_admins("[key_name_admin(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])")
|
message_admins("[key_name_admin(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])")
|
||||||
SSblackbox.add_details("admin_verb","EM Pulse") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
SSblackbox.add_details("admin_verb","EM Pulse") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,115 +1,115 @@
|
|||||||
/obj/item/device/assembly/timer
|
/obj/item/device/assembly/timer
|
||||||
name = "timer"
|
name = "timer"
|
||||||
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
||||||
icon_state = "timer"
|
icon_state = "timer"
|
||||||
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
||||||
origin_tech = "magnets=1;engineering=1"
|
origin_tech = "magnets=1;engineering=1"
|
||||||
attachable = 1
|
attachable = 1
|
||||||
|
|
||||||
var/timing = 0
|
var/timing = 0
|
||||||
var/time = 5
|
var/time = 5
|
||||||
var/saved_time = 5
|
var/saved_time = 5
|
||||||
var/loop = 0
|
var/loop = 0
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/New()
|
/obj/item/device/assembly/timer/New()
|
||||||
..()
|
..()
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/describe()
|
/obj/item/device/assembly/timer/describe()
|
||||||
if(timing)
|
if(timing)
|
||||||
return "The timer is counting down from [time]!"
|
return "The timer is counting down from [time]!"
|
||||||
return "The timer is set for [time] seconds."
|
return "The timer is set for [time] seconds."
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/activate()
|
/obj/item/device/assembly/timer/activate()
|
||||||
if(!..())
|
if(!..())
|
||||||
return 0//Cooldown check
|
return 0//Cooldown check
|
||||||
timing = !timing
|
timing = !timing
|
||||||
update_icon()
|
update_icon()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/toggle_secure()
|
/obj/item/device/assembly/timer/toggle_secure()
|
||||||
secured = !secured
|
secured = !secured
|
||||||
if(secured)
|
if(secured)
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
else
|
else
|
||||||
timing = 0
|
timing = 0
|
||||||
STOP_PROCESSING(SSobj, src)
|
STOP_PROCESSING(SSobj, src)
|
||||||
update_icon()
|
update_icon()
|
||||||
return secured
|
return secured
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/proc/timer_end()
|
/obj/item/device/assembly/timer/proc/timer_end()
|
||||||
if(!secured || next_activate > world.time)
|
if(!secured || next_activate > world.time)
|
||||||
return FALSE
|
return FALSE
|
||||||
pulse(0)
|
pulse(0)
|
||||||
audible_message("\icon[src] *beep* *beep*", null, 3)
|
audible_message("\icon[src] *beep* *beep*", null, 3)
|
||||||
if(loop)
|
if(loop)
|
||||||
timing = 1
|
timing = 1
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/process()
|
/obj/item/device/assembly/timer/process()
|
||||||
if(timing)
|
if(timing)
|
||||||
time--
|
time--
|
||||||
if(time <= 0)
|
if(time <= 0)
|
||||||
timing = 0
|
timing = 0
|
||||||
timer_end()
|
timer_end()
|
||||||
time = saved_time
|
time = saved_time
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/update_icon()
|
/obj/item/device/assembly/timer/update_icon()
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
attached_overlays = list()
|
attached_overlays = list()
|
||||||
if(timing)
|
if(timing)
|
||||||
add_overlay("timer_timing")
|
add_overlay("timer_timing")
|
||||||
attached_overlays += "timer_timing"
|
attached_overlays += "timer_timing"
|
||||||
if(holder)
|
if(holder)
|
||||||
holder.update_icon()
|
holder.update_icon()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires
|
/obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires
|
||||||
if(is_secured(user))
|
if(is_secured(user))
|
||||||
var/second = time % 60
|
var/second = time % 60
|
||||||
var/minute = (time - second) / 60
|
var/minute = (time - second) / 60
|
||||||
var/dat = "<TT><B>Timing Unit</B>\n[(timing ? "<A href='?src=\ref[src];time=0'>Timing</A>" : "<A href='?src=\ref[src];time=1'>Not Timing</A>")] [minute]:[second]\n<A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT>"
|
var/dat = "<TT><B>Timing Unit</B>\n[(timing ? "<A href='?src=\ref[src];time=0'>Timing</A>" : "<A href='?src=\ref[src];time=1'>Not Timing</A>")] [minute]:[second]\n<A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT>"
|
||||||
dat += "<BR><BR><A href='?src=\ref[src];repeat=[(loop ? "0'>Stop repeating" : "1'>Set to repeat")]</A>"
|
dat += "<BR><BR><A href='?src=\ref[src];repeat=[(loop ? "0'>Stop repeating" : "1'>Set to repeat")]</A>"
|
||||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||||
var/datum/browser/popup = new(user, "timer", name)
|
var/datum/browser/popup = new(user, "timer", name)
|
||||||
popup.set_content(dat)
|
popup.set_content(dat)
|
||||||
popup.open()
|
popup.open()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/assembly/timer/Topic(href, href_list)
|
/obj/item/device/assembly/timer/Topic(href, href_list)
|
||||||
..()
|
..()
|
||||||
if(usr.incapacitated() || !in_range(loc, usr))
|
if(usr.incapacitated() || !in_range(loc, usr))
|
||||||
usr << browse(null, "window=timer")
|
usr << browse(null, "window=timer")
|
||||||
onclose(usr, "timer")
|
onclose(usr, "timer")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(href_list["time"])
|
if(href_list["time"])
|
||||||
timing = text2num(href_list["time"])
|
timing = text2num(href_list["time"])
|
||||||
if(timing && istype(holder, /obj/item/device/transfer_valve))
|
if(timing && istype(holder, /obj/item/device/transfer_valve))
|
||||||
var/timer_message = "[ADMIN_LOOKUPFLW(usr)] activated [src] attachment on [holder]."
|
var/timer_message = "[ADMIN_LOOKUPFLW(usr)] activated [src] attachment on [holder]."
|
||||||
message_admins(timer_message)
|
message_admins(timer_message)
|
||||||
GLOB.bombers += timer_message
|
GLOB.bombers += timer_message
|
||||||
log_game("[key_name(usr)] activated [src] attachment on [holder]")
|
log_game("[key_name(usr)] activated [src] attachment on [holder]")
|
||||||
update_icon()
|
update_icon()
|
||||||
if(href_list["repeat"])
|
if(href_list["repeat"])
|
||||||
loop = text2num(href_list["repeat"])
|
loop = text2num(href_list["repeat"])
|
||||||
|
|
||||||
if(href_list["tp"])
|
if(href_list["tp"])
|
||||||
var/tp = text2num(href_list["tp"])
|
var/tp = text2num(href_list["tp"])
|
||||||
time += tp
|
time += tp
|
||||||
time = min(max(round(time), 1), 600)
|
time = min(max(round(time), 1), 600)
|
||||||
saved_time = time
|
saved_time = time
|
||||||
|
|
||||||
if(href_list["close"])
|
if(href_list["close"])
|
||||||
usr << browse(null, "window=timer")
|
usr << browse(null, "window=timer")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(usr)
|
if(usr)
|
||||||
attack_self(usr)
|
attack_self(usr)
|
||||||
|
|||||||
@@ -1,142 +1,142 @@
|
|||||||
#define PUMP_OUT "out"
|
#define PUMP_OUT "out"
|
||||||
#define PUMP_IN "in"
|
#define PUMP_IN "in"
|
||||||
#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE * 30)
|
#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE * 30)
|
||||||
#define PUMP_MIN_PRESSURE (ONE_ATMOSPHERE / 10)
|
#define PUMP_MIN_PRESSURE (ONE_ATMOSPHERE / 10)
|
||||||
#define PUMP_DEFAULT_PRESSURE (ONE_ATMOSPHERE)
|
#define PUMP_DEFAULT_PRESSURE (ONE_ATMOSPHERE)
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump
|
/obj/machinery/portable_atmospherics/pump
|
||||||
name = "portable air pump"
|
name = "portable air pump"
|
||||||
icon_state = "psiphon:0"
|
icon_state = "psiphon:0"
|
||||||
density = 1
|
density = 1
|
||||||
|
|
||||||
var/on = FALSE
|
var/on = FALSE
|
||||||
var/direction = PUMP_OUT
|
var/direction = PUMP_OUT
|
||||||
var/obj/machinery/atmospherics/components/binary/pump/pump
|
var/obj/machinery/atmospherics/components/binary/pump/pump
|
||||||
|
|
||||||
volume = 1000
|
volume = 1000
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/Initialize()
|
/obj/machinery/portable_atmospherics/pump/Initialize()
|
||||||
..()
|
..()
|
||||||
pump = new(src, FALSE)
|
pump = new(src, FALSE)
|
||||||
pump.on = TRUE
|
pump.on = TRUE
|
||||||
pump.stat = 0
|
pump.stat = 0
|
||||||
pump.build_network()
|
pump.build_network()
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/Destroy()
|
/obj/machinery/portable_atmospherics/pump/Destroy()
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
T.assume_air(air_contents)
|
T.assume_air(air_contents)
|
||||||
air_update_turf()
|
air_update_turf()
|
||||||
qdel(pump)
|
qdel(pump)
|
||||||
pump = null
|
pump = null
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/update_icon()
|
/obj/machinery/portable_atmospherics/pump/update_icon()
|
||||||
icon_state = "psiphon:[on]"
|
icon_state = "psiphon:[on]"
|
||||||
|
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
if(holding)
|
if(holding)
|
||||||
add_overlay("siphon-open")
|
add_overlay("siphon-open")
|
||||||
if(connected_port)
|
if(connected_port)
|
||||||
add_overlay("siphon-connector")
|
add_overlay("siphon-connector")
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/process_atmos()
|
/obj/machinery/portable_atmospherics/pump/process_atmos()
|
||||||
..()
|
..()
|
||||||
if(!on)
|
if(!on)
|
||||||
pump.AIR1 = null
|
pump.AIR1 = null
|
||||||
pump.AIR2 = null
|
pump.AIR2 = null
|
||||||
return
|
return
|
||||||
|
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
if(direction == PUMP_OUT) // Hook up the internal pump.
|
if(direction == PUMP_OUT) // Hook up the internal pump.
|
||||||
pump.AIR1 = holding ? holding.air_contents : air_contents
|
pump.AIR1 = holding ? holding.air_contents : air_contents
|
||||||
pump.AIR2 = holding ? air_contents : T.return_air()
|
pump.AIR2 = holding ? air_contents : T.return_air()
|
||||||
else
|
else
|
||||||
pump.AIR1 = holding ? air_contents : T.return_air()
|
pump.AIR1 = holding ? air_contents : T.return_air()
|
||||||
pump.AIR2 = holding ? holding.air_contents : air_contents
|
pump.AIR2 = holding ? holding.air_contents : air_contents
|
||||||
|
|
||||||
pump.process_atmos() // Pump gas.
|
pump.process_atmos() // Pump gas.
|
||||||
if(!holding)
|
if(!holding)
|
||||||
air_update_turf() // Update the environment if needed.
|
air_update_turf() // Update the environment if needed.
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/emp_act(severity)
|
/obj/machinery/portable_atmospherics/pump/emp_act(severity)
|
||||||
if(is_operational())
|
if(is_operational())
|
||||||
if(prob(50 / severity))
|
if(prob(50 / severity))
|
||||||
on = !on
|
on = !on
|
||||||
if(prob(100 / severity))
|
if(prob(100 / severity))
|
||||||
direction = PUMP_OUT
|
direction = PUMP_OUT
|
||||||
pump.target_pressure = rand(0, 100 * ONE_ATMOSPHERE)
|
pump.target_pressure = rand(0, 100 * ONE_ATMOSPHERE)
|
||||||
update_icon()
|
update_icon()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
/obj/machinery/portable_atmospherics/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "portable_pump", name, 420, 415, master_ui, state)
|
ui = new(user, src, ui_key, "portable_pump", name, 420, 415, master_ui, state)
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/ui_data()
|
/obj/machinery/portable_atmospherics/pump/ui_data()
|
||||||
var/data = list()
|
var/data = list()
|
||||||
data["on"] = on
|
data["on"] = on
|
||||||
data["direction"] = direction
|
data["direction"] = direction
|
||||||
data["connected"] = connected_port ? 1 : 0
|
data["connected"] = connected_port ? 1 : 0
|
||||||
data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
|
data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
|
||||||
data["target_pressure"] = round(pump.target_pressure ? pump.target_pressure : 0)
|
data["target_pressure"] = round(pump.target_pressure ? pump.target_pressure : 0)
|
||||||
data["default_pressure"] = round(PUMP_DEFAULT_PRESSURE)
|
data["default_pressure"] = round(PUMP_DEFAULT_PRESSURE)
|
||||||
data["min_pressure"] = round(PUMP_MIN_PRESSURE)
|
data["min_pressure"] = round(PUMP_MIN_PRESSURE)
|
||||||
data["max_pressure"] = round(PUMP_MAX_PRESSURE)
|
data["max_pressure"] = round(PUMP_MAX_PRESSURE)
|
||||||
|
|
||||||
if(holding)
|
if(holding)
|
||||||
data["holding"] = list()
|
data["holding"] = list()
|
||||||
data["holding"]["name"] = holding.name
|
data["holding"]["name"] = holding.name
|
||||||
data["holding"]["pressure"] = round(holding.air_contents.return_pressure())
|
data["holding"]["pressure"] = round(holding.air_contents.return_pressure())
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/pump/ui_act(action, params)
|
/obj/machinery/portable_atmospherics/pump/ui_act(action, params)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
switch(action)
|
switch(action)
|
||||||
if("power")
|
if("power")
|
||||||
on = !on
|
on = !on
|
||||||
if(on && !holding)
|
if(on && !holding)
|
||||||
var/plasma = air_contents.gases["plasma"]
|
var/plasma = air_contents.gases["plasma"]
|
||||||
var/n2o = air_contents.gases["n2o"]
|
var/n2o = air_contents.gases["n2o"]
|
||||||
if(n2o || plasma)
|
if(n2o || plasma)
|
||||||
var/area/A = get_area(src)
|
var/area/A = get_area(src)
|
||||||
message_admins("[ADMIN_LOOKUPFLW(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [A][ADMIN_JMP(src)]")
|
message_admins("[ADMIN_LOOKUPFLW(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [A][ADMIN_JMP(src)]")
|
||||||
log_admin("[key_name(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [A][COORD(src)]")
|
log_admin("[key_name(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [A][COORD(src)]")
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("direction")
|
if("direction")
|
||||||
if(direction == PUMP_OUT)
|
if(direction == PUMP_OUT)
|
||||||
direction = PUMP_IN
|
direction = PUMP_IN
|
||||||
else
|
else
|
||||||
direction = PUMP_OUT
|
direction = PUMP_OUT
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("pressure")
|
if("pressure")
|
||||||
var/pressure = params["pressure"]
|
var/pressure = params["pressure"]
|
||||||
if(pressure == "reset")
|
if(pressure == "reset")
|
||||||
pressure = PUMP_DEFAULT_PRESSURE
|
pressure = PUMP_DEFAULT_PRESSURE
|
||||||
. = TRUE
|
. = TRUE
|
||||||
else if(pressure == "min")
|
else if(pressure == "min")
|
||||||
pressure = PUMP_MIN_PRESSURE
|
pressure = PUMP_MIN_PRESSURE
|
||||||
. = TRUE
|
. = TRUE
|
||||||
else if(pressure == "max")
|
else if(pressure == "max")
|
||||||
pressure = PUMP_MAX_PRESSURE
|
pressure = PUMP_MAX_PRESSURE
|
||||||
. = TRUE
|
. = TRUE
|
||||||
else if(pressure == "input")
|
else if(pressure == "input")
|
||||||
pressure = input("New release pressure ([PUMP_MIN_PRESSURE]-[PUMP_MAX_PRESSURE] kPa):", name, pump.target_pressure) as num|null
|
pressure = input("New release pressure ([PUMP_MIN_PRESSURE]-[PUMP_MAX_PRESSURE] kPa):", name, pump.target_pressure) as num|null
|
||||||
if(!isnull(pressure) && !..())
|
if(!isnull(pressure) && !..())
|
||||||
. = TRUE
|
. = TRUE
|
||||||
else if(text2num(pressure) != null)
|
else if(text2num(pressure) != null)
|
||||||
pressure = text2num(pressure)
|
pressure = text2num(pressure)
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if(.)
|
if(.)
|
||||||
pump.target_pressure = Clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE)
|
pump.target_pressure = Clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE)
|
||||||
investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", "atmos")
|
investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", "atmos")
|
||||||
if("eject")
|
if("eject")
|
||||||
if(holding)
|
if(holding)
|
||||||
holding.loc = get_turf(src)
|
holding.loc = get_turf(src)
|
||||||
holding = null
|
holding = null
|
||||||
. = TRUE
|
. = TRUE
|
||||||
update_icon()
|
update_icon()
|
||||||
@@ -75,8 +75,6 @@
|
|||||||
H.dna.features["ears"] = "None"
|
H.dna.features["ears"] = "None"
|
||||||
H.regenerate_icons()
|
H.regenerate_icons()
|
||||||
|
|
||||||
handle_roundstart_items(H)
|
|
||||||
|
|
||||||
/datum/job/proc/get_access()
|
/datum/job/proc/get_access()
|
||||||
if(!config) //Needed for robots.
|
if(!config) //Needed for robots.
|
||||||
return src.minimal_access.Copy()
|
return src.minimal_access.Copy()
|
||||||
|
|||||||
@@ -1,93 +1,93 @@
|
|||||||
|
|
||||||
|
|
||||||
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins)
|
||||||
if(!z_levels || !z_levels.len)
|
if(!z_levels || !z_levels.len)
|
||||||
WARNING("No Z levels provided - Not generating ruins")
|
WARNING("No Z levels provided - Not generating ruins")
|
||||||
return
|
return
|
||||||
|
|
||||||
for(var/zl in z_levels)
|
for(var/zl in z_levels)
|
||||||
var/turf/T = locate(1, 1, zl)
|
var/turf/T = locate(1, 1, zl)
|
||||||
if(!T)
|
if(!T)
|
||||||
WARNING("Z level [zl] does not exist - Not generating ruins")
|
WARNING("Z level [zl] does not exist - Not generating ruins")
|
||||||
return
|
return
|
||||||
|
|
||||||
var/overall_sanity = 100
|
var/overall_sanity = 100
|
||||||
var/list/ruins = potentialRuins.Copy()
|
var/list/ruins = potentialRuins.Copy()
|
||||||
|
|
||||||
while(budget > 0 && overall_sanity > 0)
|
while(budget > 0 && overall_sanity > 0)
|
||||||
// Pick a ruin
|
// Pick a ruin
|
||||||
var/datum/map_template/ruin/ruin = null
|
var/datum/map_template/ruin/ruin = null
|
||||||
if(ruins && ruins.len)
|
if(ruins && ruins.len)
|
||||||
ruin = ruins[pick(ruins)]
|
ruin = ruins[pick(ruins)]
|
||||||
else
|
else
|
||||||
log_world("Ruin loader had no ruins to pick from with [budget] left to spend.")
|
log_world("Ruin loader had no ruins to pick from with [budget] left to spend.")
|
||||||
break
|
break
|
||||||
// Can we afford it
|
// Can we afford it
|
||||||
if(ruin.cost > budget)
|
if(ruin.cost > budget)
|
||||||
overall_sanity--
|
overall_sanity--
|
||||||
continue
|
continue
|
||||||
// If so, try to place it
|
// If so, try to place it
|
||||||
var/sanity = 100
|
var/sanity = 100
|
||||||
// And if we can't fit it anywhere, give up, try again
|
// And if we can't fit it anywhere, give up, try again
|
||||||
|
|
||||||
while(sanity > 0)
|
while(sanity > 0)
|
||||||
sanity--
|
sanity--
|
||||||
var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2)
|
var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2)
|
||||||
var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2)
|
var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2)
|
||||||
var/z_level = pick(z_levels)
|
var/z_level = pick(z_levels)
|
||||||
var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level)
|
var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level)
|
||||||
var/valid = TRUE
|
var/valid = TRUE
|
||||||
|
|
||||||
for(var/turf/check in ruin.get_affected_turfs(T,1))
|
for(var/turf/check in ruin.get_affected_turfs(T,1))
|
||||||
var/area/new_area = get_area(check)
|
var/area/new_area = get_area(check)
|
||||||
if(!(istype(new_area, whitelist)))
|
if(!(istype(new_area, whitelist)))
|
||||||
valid = FALSE
|
valid = FALSE
|
||||||
break
|
break
|
||||||
|
|
||||||
if(!valid)
|
if(!valid)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
log_world("Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])")
|
log_world("Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])")
|
||||||
|
|
||||||
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
|
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
|
||||||
R.Load(ruins,ruin)
|
R.Load(ruins,ruin)
|
||||||
budget -= ruin.cost
|
budget -= ruin.cost
|
||||||
if(!ruin.allow_duplicates)
|
if(!ruin.allow_duplicates)
|
||||||
ruins -= ruin.name
|
ruins -= ruin.name
|
||||||
break
|
break
|
||||||
|
|
||||||
if(!overall_sanity)
|
if(!overall_sanity)
|
||||||
log_world("Ruin loader gave up with [budget] left to spend.")
|
log_world("Ruin loader gave up with [budget] left to spend.")
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/ruin_loader
|
/obj/effect/ruin_loader
|
||||||
name = "random ruin"
|
name = "random ruin"
|
||||||
icon = 'icons/obj/weapons.dmi'
|
icon = 'icons/obj/weapons.dmi'
|
||||||
icon_state = "syndballoon"
|
icon_state = "syndballoon"
|
||||||
invisibility = 0
|
invisibility = 0
|
||||||
|
|
||||||
/obj/effect/ruin_loader/proc/Load(list/potentialRuins, datum/map_template/template)
|
/obj/effect/ruin_loader/proc/Load(list/potentialRuins, datum/map_template/template)
|
||||||
var/list/possible_ruins = list()
|
var/list/possible_ruins = list()
|
||||||
for(var/A in potentialRuins)
|
for(var/A in potentialRuins)
|
||||||
var/datum/map_template/T = potentialRuins[A]
|
var/datum/map_template/T = potentialRuins[A]
|
||||||
if(!T.loaded)
|
if(!T.loaded)
|
||||||
possible_ruins += T
|
possible_ruins += T
|
||||||
if(!template && possible_ruins.len)
|
if(!template && possible_ruins.len)
|
||||||
template = safepick(possible_ruins)
|
template = safepick(possible_ruins)
|
||||||
if(!template)
|
if(!template)
|
||||||
return FALSE
|
return FALSE
|
||||||
var/turf/central_turf = get_turf(src)
|
var/turf/central_turf = get_turf(src)
|
||||||
for(var/i in template.get_affected_turfs(central_turf, 1))
|
for(var/i in template.get_affected_turfs(central_turf, 1))
|
||||||
var/turf/T = i
|
var/turf/T = i
|
||||||
for(var/mob/living/simple_animal/monster in T)
|
for(var/mob/living/simple_animal/monster in T)
|
||||||
qdel(monster)
|
qdel(monster)
|
||||||
for(var/obj/structure/flora/ash/plant in T)
|
for(var/obj/structure/flora/ash/plant in T)
|
||||||
qdel(plant)
|
qdel(plant)
|
||||||
template.load(central_turf,centered = TRUE)
|
template.load(central_turf,centered = TRUE)
|
||||||
template.loaded++
|
template.loaded++
|
||||||
var/datum/map_template/ruin = template
|
var/datum/map_template/ruin = template
|
||||||
if(istype(ruin))
|
if(istype(ruin))
|
||||||
new /obj/effect/landmark/ruin(central_turf, ruin)
|
new /obj/effect/landmark/ruin(central_turf, ruin)
|
||||||
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -24,10 +24,10 @@
|
|||||||
loc = pick(GLOB.newplayer_start)
|
loc = pick(GLOB.newplayer_start)
|
||||||
else
|
else
|
||||||
loc = locate(1,1,1)
|
loc = locate(1,1,1)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/mob/dead/new_player/prepare_huds()
|
/mob/dead/new_player/prepare_huds()
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/dead/new_player/proc/new_player_panel()
|
/mob/dead/new_player/proc/new_player_panel()
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
if(href_list["late_join"])
|
if(href_list["late_join"])
|
||||||
if(!SSticker || !SSticker.IsRoundInProgress())
|
if(!SSticker || !SSticker.IsRoundInProgress())
|
||||||
to_chat(usr, "<span class='danger'>The round is either not ready, or has already finished...</span>")
|
to_chat(usr, "<span class='danger'>The round is either not ready, or has already finished...</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -371,7 +371,6 @@
|
|||||||
if(SHUTTLE_CALL)
|
if(SHUTTLE_CALL)
|
||||||
if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergencyCallTime)*0.5)
|
if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergencyCallTime)*0.5)
|
||||||
SSticker.mode.make_antag_chance(humanc)
|
SSticker.mode.make_antag_chance(humanc)
|
||||||
handle_roundstart_items(character)
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee)
|
/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee)
|
||||||
|
|||||||
@@ -354,8 +354,8 @@
|
|||||||
dropItemToGround(I)
|
dropItemToGround(I)
|
||||||
drop_all_held_items()
|
drop_all_held_items()
|
||||||
|
|
||||||
/obj/item/proc/equip_to_best_slot(var/mob/M, override_held_check = FALSE)
|
/obj/item/proc/equip_to_best_slot(var/mob/M)
|
||||||
if((src != M.get_active_held_item()) && !override_held_check)
|
if(src != M.get_active_held_item())
|
||||||
to_chat(M, "<span class='warning'>You are not holding anything to equip!</span>")
|
to_chat(M, "<span class='warning'>You are not holding anything to equip!</span>")
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
|
|||||||
@@ -1,245 +1,245 @@
|
|||||||
/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0)
|
/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0)
|
||||||
return dna.species.can_equip(I, slot, disable_warning, src)
|
return dna.species.can_equip(I, slot, disable_warning, src)
|
||||||
|
|
||||||
// Return the item currently in the slot ID
|
// Return the item currently in the slot ID
|
||||||
/mob/living/carbon/human/get_item_by_slot(slot_id)
|
/mob/living/carbon/human/get_item_by_slot(slot_id)
|
||||||
switch(slot_id)
|
switch(slot_id)
|
||||||
if(slot_back)
|
if(slot_back)
|
||||||
return back
|
return back
|
||||||
if(slot_wear_mask)
|
if(slot_wear_mask)
|
||||||
return wear_mask
|
return wear_mask
|
||||||
if(slot_neck)
|
if(slot_neck)
|
||||||
return wear_neck
|
return wear_neck
|
||||||
if(slot_handcuffed)
|
if(slot_handcuffed)
|
||||||
return handcuffed
|
return handcuffed
|
||||||
if(slot_legcuffed)
|
if(slot_legcuffed)
|
||||||
return legcuffed
|
return legcuffed
|
||||||
if(slot_belt)
|
if(slot_belt)
|
||||||
return belt
|
return belt
|
||||||
if(slot_wear_id)
|
if(slot_wear_id)
|
||||||
return wear_id
|
return wear_id
|
||||||
if(slot_ears)
|
if(slot_ears)
|
||||||
return ears
|
return ears
|
||||||
if(slot_glasses)
|
if(slot_glasses)
|
||||||
return glasses
|
return glasses
|
||||||
if(slot_gloves)
|
if(slot_gloves)
|
||||||
return gloves
|
return gloves
|
||||||
if(slot_head)
|
if(slot_head)
|
||||||
return head
|
return head
|
||||||
if(slot_shoes)
|
if(slot_shoes)
|
||||||
return shoes
|
return shoes
|
||||||
if(slot_wear_suit)
|
if(slot_wear_suit)
|
||||||
return wear_suit
|
return wear_suit
|
||||||
if(slot_w_uniform)
|
if(slot_w_uniform)
|
||||||
return w_uniform
|
return w_uniform
|
||||||
if(slot_l_store)
|
if(slot_l_store)
|
||||||
return l_store
|
return l_store
|
||||||
if(slot_r_store)
|
if(slot_r_store)
|
||||||
return r_store
|
return r_store
|
||||||
if(slot_s_store)
|
if(slot_s_store)
|
||||||
return s_store
|
return s_store
|
||||||
return null
|
return null
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/get_all_slots()
|
/mob/living/carbon/human/proc/get_all_slots()
|
||||||
. = get_head_slots() | get_body_slots()
|
. = get_head_slots() | get_body_slots()
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/get_body_slots()
|
/mob/living/carbon/human/proc/get_body_slots()
|
||||||
return list(
|
return list(
|
||||||
back,
|
back,
|
||||||
s_store,
|
s_store,
|
||||||
handcuffed,
|
handcuffed,
|
||||||
legcuffed,
|
legcuffed,
|
||||||
wear_suit,
|
wear_suit,
|
||||||
gloves,
|
gloves,
|
||||||
shoes,
|
shoes,
|
||||||
belt,
|
belt,
|
||||||
wear_id,
|
wear_id,
|
||||||
l_store,
|
l_store,
|
||||||
r_store,
|
r_store,
|
||||||
w_uniform
|
w_uniform
|
||||||
)
|
)
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/get_head_slots()
|
/mob/living/carbon/human/proc/get_head_slots()
|
||||||
return list(
|
return list(
|
||||||
head,
|
head,
|
||||||
wear_mask,
|
wear_mask,
|
||||||
glasses,
|
glasses,
|
||||||
ears,
|
ears,
|
||||||
)
|
)
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/get_storage_slots()
|
/mob/living/carbon/human/proc/get_storage_slots()
|
||||||
return list(
|
return list(
|
||||||
back,
|
back,
|
||||||
belt,
|
belt,
|
||||||
l_store,
|
l_store,
|
||||||
r_store,
|
r_store,
|
||||||
s_store,
|
s_store,
|
||||||
)
|
)
|
||||||
|
|
||||||
//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible()
|
//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible()
|
||||||
/mob/living/carbon/human/equip_to_slot(obj/item/I, slot)
|
/mob/living/carbon/human/equip_to_slot(obj/item/I, slot)
|
||||||
if(!..()) //a check failed or the item has already found its slot
|
if(!..()) //a check failed or the item has already found its slot
|
||||||
return
|
return
|
||||||
|
|
||||||
var/not_handled = FALSE //Added in case we make this type path deeper one day
|
var/not_handled = FALSE //Added in case we make this type path deeper one day
|
||||||
switch(slot)
|
switch(slot)
|
||||||
if(slot_belt)
|
if(slot_belt)
|
||||||
belt = I
|
belt = I
|
||||||
update_inv_belt()
|
update_inv_belt()
|
||||||
if(slot_wear_id)
|
if(slot_wear_id)
|
||||||
wear_id = I
|
wear_id = I
|
||||||
sec_hud_set_ID()
|
sec_hud_set_ID()
|
||||||
update_inv_wear_id()
|
update_inv_wear_id()
|
||||||
if(slot_ears)
|
if(slot_ears)
|
||||||
ears = I
|
ears = I
|
||||||
update_inv_ears()
|
update_inv_ears()
|
||||||
if(slot_glasses)
|
if(slot_glasses)
|
||||||
glasses = I
|
glasses = I
|
||||||
var/obj/item/clothing/glasses/G = I
|
var/obj/item/clothing/glasses/G = I
|
||||||
if(G.glass_colour_type)
|
if(G.glass_colour_type)
|
||||||
update_glasses_color(G, 1)
|
update_glasses_color(G, 1)
|
||||||
if(G.tint)
|
if(G.tint)
|
||||||
update_tint()
|
update_tint()
|
||||||
if(G.vision_correction)
|
if(G.vision_correction)
|
||||||
clear_fullscreen("nearsighted")
|
clear_fullscreen("nearsighted")
|
||||||
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
|
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
|
||||||
update_sight()
|
update_sight()
|
||||||
update_inv_glasses()
|
update_inv_glasses()
|
||||||
if(slot_gloves)
|
if(slot_gloves)
|
||||||
gloves = I
|
gloves = I
|
||||||
update_inv_gloves()
|
update_inv_gloves()
|
||||||
if(slot_shoes)
|
if(slot_shoes)
|
||||||
shoes = I
|
shoes = I
|
||||||
update_inv_shoes()
|
update_inv_shoes()
|
||||||
if(slot_wear_suit)
|
if(slot_wear_suit)
|
||||||
wear_suit = I
|
wear_suit = I
|
||||||
if(I.flags_inv & HIDEJUMPSUIT)
|
if(I.flags_inv & HIDEJUMPSUIT)
|
||||||
update_inv_w_uniform()
|
update_inv_w_uniform()
|
||||||
if(wear_suit.breakouttime) //when equipping a straightjacket
|
if(wear_suit.breakouttime) //when equipping a straightjacket
|
||||||
stop_pulling() //can't pull if restrained
|
stop_pulling() //can't pull if restrained
|
||||||
update_action_buttons_icon() //certain action buttons will no longer be usable.
|
update_action_buttons_icon() //certain action buttons will no longer be usable.
|
||||||
update_inv_wear_suit()
|
update_inv_wear_suit()
|
||||||
if(slot_w_uniform)
|
if(slot_w_uniform)
|
||||||
w_uniform = I
|
w_uniform = I
|
||||||
update_suit_sensors()
|
update_suit_sensors()
|
||||||
update_inv_w_uniform()
|
update_inv_w_uniform()
|
||||||
if(slot_l_store)
|
if(slot_l_store)
|
||||||
l_store = I
|
l_store = I
|
||||||
update_inv_pockets()
|
update_inv_pockets()
|
||||||
if(slot_r_store)
|
if(slot_r_store)
|
||||||
r_store = I
|
r_store = I
|
||||||
update_inv_pockets()
|
update_inv_pockets()
|
||||||
if(slot_s_store)
|
if(slot_s_store)
|
||||||
s_store = I
|
s_store = I
|
||||||
update_inv_s_store()
|
update_inv_s_store()
|
||||||
else
|
else
|
||||||
to_chat(src, "<span class='danger'>You are trying to equip this item to an unsupported inventory slot. Report this to a coder!</span>")
|
to_chat(src, "<span class='danger'>You are trying to equip this item to an unsupported inventory slot. Report this to a coder!</span>")
|
||||||
|
|
||||||
//Item is handled and in slot, valid to call callback, for this proc should always be true
|
//Item is handled and in slot, valid to call callback, for this proc should always be true
|
||||||
if(!not_handled)
|
if(!not_handled)
|
||||||
I.equipped(src, slot)
|
I.equipped(src, slot)
|
||||||
|
|
||||||
return not_handled //For future deeper overrides
|
return not_handled //For future deeper overrides
|
||||||
|
|
||||||
/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE)
|
/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE)
|
||||||
var/index = get_held_index_of_item(I)
|
var/index = get_held_index_of_item(I)
|
||||||
. = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should.
|
. = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should.
|
||||||
if(!. || !I)
|
if(!. || !I)
|
||||||
return
|
return
|
||||||
if(index && dna.species.mutanthands)
|
if(index && dna.species.mutanthands)
|
||||||
put_in_hand(new dna.species.mutanthands(), index)
|
put_in_hand(new dna.species.mutanthands(), index)
|
||||||
if(I == wear_suit)
|
if(I == wear_suit)
|
||||||
if(s_store && invdrop)
|
if(s_store && invdrop)
|
||||||
dropItemToGround(s_store, TRUE) //It makes no sense for your suit storage to stay on you if you drop your suit.
|
dropItemToGround(s_store, TRUE) //It makes no sense for your suit storage to stay on you if you drop your suit.
|
||||||
if(wear_suit.breakouttime) //when unequipping a straightjacket
|
if(wear_suit.breakouttime) //when unequipping a straightjacket
|
||||||
update_action_buttons_icon() //certain action buttons may be usable again.
|
update_action_buttons_icon() //certain action buttons may be usable again.
|
||||||
wear_suit = null
|
wear_suit = null
|
||||||
if(I.flags_inv & HIDEJUMPSUIT)
|
if(I.flags_inv & HIDEJUMPSUIT)
|
||||||
update_inv_w_uniform()
|
update_inv_w_uniform()
|
||||||
update_inv_wear_suit()
|
update_inv_wear_suit()
|
||||||
else if(I == w_uniform)
|
else if(I == w_uniform)
|
||||||
if(invdrop)
|
if(invdrop)
|
||||||
if(r_store)
|
if(r_store)
|
||||||
dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop.
|
dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop.
|
||||||
if(l_store)
|
if(l_store)
|
||||||
dropItemToGround(l_store, TRUE)
|
dropItemToGround(l_store, TRUE)
|
||||||
if(wear_id)
|
if(wear_id)
|
||||||
dropItemToGround(wear_id)
|
dropItemToGround(wear_id)
|
||||||
if(belt)
|
if(belt)
|
||||||
dropItemToGround(belt)
|
dropItemToGround(belt)
|
||||||
w_uniform = null
|
w_uniform = null
|
||||||
update_suit_sensors()
|
update_suit_sensors()
|
||||||
update_inv_w_uniform(invdrop)
|
update_inv_w_uniform(invdrop)
|
||||||
else if(I == gloves)
|
else if(I == gloves)
|
||||||
gloves = null
|
gloves = null
|
||||||
update_inv_gloves()
|
update_inv_gloves()
|
||||||
else if(I == glasses)
|
else if(I == glasses)
|
||||||
glasses = null
|
glasses = null
|
||||||
var/obj/item/clothing/glasses/G = I
|
var/obj/item/clothing/glasses/G = I
|
||||||
if(G.glass_colour_type)
|
if(G.glass_colour_type)
|
||||||
update_glasses_color(G, 0)
|
update_glasses_color(G, 0)
|
||||||
if(G.tint)
|
if(G.tint)
|
||||||
update_tint()
|
update_tint()
|
||||||
if(G.vision_correction)
|
if(G.vision_correction)
|
||||||
if(disabilities & NEARSIGHT)
|
if(disabilities & NEARSIGHT)
|
||||||
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
||||||
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
|
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
|
||||||
update_sight()
|
update_sight()
|
||||||
update_inv_glasses()
|
update_inv_glasses()
|
||||||
else if(I == ears)
|
else if(I == ears)
|
||||||
ears = null
|
ears = null
|
||||||
update_inv_ears()
|
update_inv_ears()
|
||||||
else if(I == shoes)
|
else if(I == shoes)
|
||||||
shoes = null
|
shoes = null
|
||||||
update_inv_shoes()
|
update_inv_shoes()
|
||||||
else if(I == belt)
|
else if(I == belt)
|
||||||
belt = null
|
belt = null
|
||||||
update_inv_belt()
|
update_inv_belt()
|
||||||
else if(I == wear_id)
|
else if(I == wear_id)
|
||||||
wear_id = null
|
wear_id = null
|
||||||
sec_hud_set_ID()
|
sec_hud_set_ID()
|
||||||
update_inv_wear_id()
|
update_inv_wear_id()
|
||||||
else if(I == r_store)
|
else if(I == r_store)
|
||||||
r_store = null
|
r_store = null
|
||||||
update_inv_pockets()
|
update_inv_pockets()
|
||||||
else if(I == l_store)
|
else if(I == l_store)
|
||||||
l_store = null
|
l_store = null
|
||||||
update_inv_pockets()
|
update_inv_pockets()
|
||||||
else if(I == s_store)
|
else if(I == s_store)
|
||||||
s_store = null
|
s_store = null
|
||||||
update_inv_s_store()
|
update_inv_s_store()
|
||||||
|
|
||||||
/mob/living/carbon/human/wear_mask_update(obj/item/clothing/C, toggle_off = 1)
|
/mob/living/carbon/human/wear_mask_update(obj/item/clothing/C, toggle_off = 1)
|
||||||
if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR)))
|
if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR)))
|
||||||
update_hair()
|
update_hair()
|
||||||
if(toggle_off && internal && !getorganslot("breathing_tube"))
|
if(toggle_off && internal && !getorganslot("breathing_tube"))
|
||||||
update_internals_hud_icon(0)
|
update_internals_hud_icon(0)
|
||||||
internal = null
|
internal = null
|
||||||
if(C.flags_inv & HIDEEYES)
|
if(C.flags_inv & HIDEEYES)
|
||||||
update_inv_glasses()
|
update_inv_glasses()
|
||||||
sec_hud_set_security_status()
|
sec_hud_set_security_status()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/head_update(obj/item/I, forced)
|
/mob/living/carbon/human/head_update(obj/item/I, forced)
|
||||||
if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced)
|
if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced)
|
||||||
update_hair()
|
update_hair()
|
||||||
if(I.flags_inv & HIDEEYES || forced)
|
if(I.flags_inv & HIDEEYES || forced)
|
||||||
update_inv_glasses()
|
update_inv_glasses()
|
||||||
if(I.flags_inv & HIDEEARS || forced)
|
if(I.flags_inv & HIDEEARS || forced)
|
||||||
update_body()
|
update_body()
|
||||||
sec_hud_set_security_status()
|
sec_hud_set_security_status()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
|
/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
|
||||||
var/datum/outfit/O = null
|
var/datum/outfit/O = null
|
||||||
|
|
||||||
if(ispath(outfit))
|
if(ispath(outfit))
|
||||||
O = new outfit
|
O = new outfit
|
||||||
else
|
else
|
||||||
O = outfit
|
O = outfit
|
||||||
if(!istype(O))
|
if(!istype(O))
|
||||||
return 0
|
return 0
|
||||||
if(!O)
|
if(!O)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return O.equip(src, visualsOnly)
|
return O.equip(src, visualsOnly)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,50 +1,50 @@
|
|||||||
/datum/species/zombie
|
/datum/species/zombie
|
||||||
// 1spooky
|
// 1spooky
|
||||||
name = "High Functioning Zombie"
|
name = "High Functioning Zombie"
|
||||||
id = "zombie"
|
id = "zombie"
|
||||||
say_mod = "moans"
|
say_mod = "moans"
|
||||||
sexes = 0
|
sexes = 0
|
||||||
blacklisted = 1
|
blacklisted = 1
|
||||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||||
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT)
|
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT)
|
||||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||||
|
|
||||||
/datum/species/zombie/infectious
|
/datum/species/zombie/infectious
|
||||||
name = "Infectious Zombie"
|
name = "Infectious Zombie"
|
||||||
id = "memezombies"
|
id = "memezombies"
|
||||||
limbs_id = "zombie"
|
limbs_id = "zombie"
|
||||||
mutanthands = /obj/item/zombie_hand
|
mutanthands = /obj/item/zombie_hand
|
||||||
no_equip = list(slot_wear_mask, slot_head)
|
no_equip = list(slot_wear_mask, slot_head)
|
||||||
armor = 20 // 120 damage to KO a zombie, which kills it
|
armor = 20 // 120 damage to KO a zombie, which kills it
|
||||||
speedmod = 2
|
speedmod = 2
|
||||||
mutanteyes = /obj/item/organ/eyes/night_vision/zombie
|
mutanteyes = /obj/item/organ/eyes/night_vision/zombie
|
||||||
|
|
||||||
/datum/species/zombie/infectious/spec_life(mob/living/carbon/C)
|
/datum/species/zombie/infectious/spec_life(mob/living/carbon/C)
|
||||||
. = ..()
|
. = ..()
|
||||||
C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW
|
C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW
|
||||||
if(C.InCritical())
|
if(C.InCritical())
|
||||||
C.death()
|
C.death()
|
||||||
// Zombies only move around when not in crit, they instantly
|
// Zombies only move around when not in crit, they instantly
|
||||||
// succumb otherwise, and will standup again soon
|
// succumb otherwise, and will standup again soon
|
||||||
|
|
||||||
/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
// Deal with the source of this zombie corruption
|
// Deal with the source of this zombie corruption
|
||||||
// Infection organ needs to be handled separately from mutant_organs
|
// Infection organ needs to be handled separately from mutant_organs
|
||||||
// because it persists through species transitions
|
// because it persists through species transitions
|
||||||
var/obj/item/organ/zombie_infection/infection
|
var/obj/item/organ/zombie_infection/infection
|
||||||
infection = C.getorganslot("zombie_infection")
|
infection = C.getorganslot("zombie_infection")
|
||||||
if(!infection)
|
if(!infection)
|
||||||
infection = new()
|
infection = new()
|
||||||
infection.Insert(C)
|
infection.Insert(C)
|
||||||
|
|
||||||
|
|
||||||
// Your skin falls off
|
// Your skin falls off
|
||||||
/datum/species/krokodil_addict
|
/datum/species/krokodil_addict
|
||||||
name = "Human"
|
name = "Human"
|
||||||
id = "goofzombies"
|
id = "goofzombies"
|
||||||
limbs_id = "zombie" //They look like zombies
|
limbs_id = "zombie" //They look like zombies
|
||||||
sexes = 0
|
sexes = 0
|
||||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||||
|
|||||||
@@ -1,274 +1,274 @@
|
|||||||
//Cat
|
//Cat
|
||||||
/mob/living/simple_animal/pet/cat
|
/mob/living/simple_animal/pet/cat
|
||||||
name = "cat"
|
name = "cat"
|
||||||
desc = "Kitty!!"
|
desc = "Kitty!!"
|
||||||
icon = 'icons/mob/pets.dmi'
|
icon = 'icons/mob/pets.dmi'
|
||||||
icon_state = "cat2"
|
icon_state = "cat2"
|
||||||
icon_living = "cat2"
|
icon_living = "cat2"
|
||||||
icon_dead = "cat2_dead"
|
icon_dead = "cat2_dead"
|
||||||
gender = MALE
|
gender = MALE
|
||||||
speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
|
speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
|
||||||
speak_emote = list("purrs", "meows")
|
speak_emote = list("purrs", "meows")
|
||||||
emote_hear = list("meows", "mews")
|
emote_hear = list("meows", "mews")
|
||||||
emote_see = list("shakes its head", "shivers")
|
emote_see = list("shakes its head", "shivers")
|
||||||
speak_chance = 1
|
speak_chance = 1
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
see_in_dark = 6
|
see_in_dark = 6
|
||||||
ventcrawler = VENTCRAWLER_ALWAYS
|
ventcrawler = VENTCRAWLER_ALWAYS
|
||||||
pass_flags = PASSTABLE
|
pass_flags = PASSTABLE
|
||||||
mob_size = MOB_SIZE_SMALL
|
mob_size = MOB_SIZE_SMALL
|
||||||
minbodytemp = 200
|
minbodytemp = 200
|
||||||
maxbodytemp = 400
|
maxbodytemp = 400
|
||||||
unsuitable_atmos_damage = 1
|
unsuitable_atmos_damage = 1
|
||||||
animal_species = /mob/living/simple_animal/pet/cat
|
animal_species = /mob/living/simple_animal/pet/cat
|
||||||
childtype = list(/mob/living/simple_animal/pet/cat/kitten)
|
childtype = list(/mob/living/simple_animal/pet/cat/kitten)
|
||||||
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
|
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
|
||||||
response_help = "pets"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks"
|
response_harm = "kicks"
|
||||||
var/turns_since_scan = 0
|
var/turns_since_scan = 0
|
||||||
var/mob/living/simple_animal/mouse/movement_target
|
var/mob/living/simple_animal/mouse/movement_target
|
||||||
gold_core_spawnable = 2
|
gold_core_spawnable = 2
|
||||||
devourable = TRUE
|
devourable = TRUE
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Initialize()
|
/mob/living/simple_animal/pet/cat/Initialize()
|
||||||
..()
|
..()
|
||||||
verbs += /mob/living/proc/lay_down
|
verbs += /mob/living/proc/lay_down
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/update_canmove()
|
/mob/living/simple_animal/pet/cat/update_canmove()
|
||||||
..()
|
..()
|
||||||
if(client)
|
if(client)
|
||||||
if (resting)
|
if (resting)
|
||||||
icon_state = "[icon_living]_rest"
|
icon_state = "[icon_living]_rest"
|
||||||
else
|
else
|
||||||
icon_state = "[icon_living]"
|
icon_state = "[icon_living]"
|
||||||
|
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/space
|
/mob/living/simple_animal/pet/cat/space
|
||||||
name = "space cat"
|
name = "space cat"
|
||||||
desc = "It's a cat... in space!"
|
desc = "It's a cat... in space!"
|
||||||
icon_state = "spacecat"
|
icon_state = "spacecat"
|
||||||
icon_living = "spacecat"
|
icon_living = "spacecat"
|
||||||
icon_dead = "spacecat_dead"
|
icon_dead = "spacecat_dead"
|
||||||
unsuitable_atmos_damage = 0
|
unsuitable_atmos_damage = 0
|
||||||
minbodytemp = TCMB
|
minbodytemp = TCMB
|
||||||
maxbodytemp = T0C + 40
|
maxbodytemp = T0C + 40
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/original
|
/mob/living/simple_animal/pet/cat/original
|
||||||
name = "Batsy"
|
name = "Batsy"
|
||||||
desc = "The product of alien DNA and bored geneticists."
|
desc = "The product of alien DNA and bored geneticists."
|
||||||
gender = FEMALE
|
gender = FEMALE
|
||||||
icon_state = "original"
|
icon_state = "original"
|
||||||
icon_living = "original"
|
icon_living = "original"
|
||||||
icon_dead = "original_dead"
|
icon_dead = "original_dead"
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/kitten
|
/mob/living/simple_animal/pet/cat/kitten
|
||||||
name = "kitten"
|
name = "kitten"
|
||||||
desc = "D'aaawwww."
|
desc = "D'aaawwww."
|
||||||
icon_state = "kitten"
|
icon_state = "kitten"
|
||||||
icon_living = "kitten"
|
icon_living = "kitten"
|
||||||
icon_dead = "kitten_dead"
|
icon_dead = "kitten_dead"
|
||||||
density = 0
|
density = 0
|
||||||
pass_flags = PASSMOB
|
pass_flags = PASSMOB
|
||||||
mob_size = MOB_SIZE_SMALL
|
mob_size = MOB_SIZE_SMALL
|
||||||
|
|
||||||
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
||||||
/mob/living/simple_animal/pet/cat/Runtime
|
/mob/living/simple_animal/pet/cat/Runtime
|
||||||
name = "Runtime"
|
name = "Runtime"
|
||||||
desc = "GCAT"
|
desc = "GCAT"
|
||||||
icon_state = "cat"
|
icon_state = "cat"
|
||||||
icon_living = "cat"
|
icon_living = "cat"
|
||||||
icon_dead = "cat_dead"
|
icon_dead = "cat_dead"
|
||||||
gender = FEMALE
|
gender = FEMALE
|
||||||
gold_core_spawnable = 0
|
gold_core_spawnable = 0
|
||||||
var/list/family = list()//var restored from savefile, has count of each child type
|
var/list/family = list()//var restored from savefile, has count of each child type
|
||||||
var/list/children = list()//Actual mob instances of children
|
var/list/children = list()//Actual mob instances of children
|
||||||
var/cats_deployed = 0
|
var/cats_deployed = 0
|
||||||
var/memory_saved = 0
|
var/memory_saved = 0
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/Initialize()
|
/mob/living/simple_animal/pet/cat/Runtime/Initialize()
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
icon_state = "original"
|
icon_state = "original"
|
||||||
icon_living = "original"
|
icon_living = "original"
|
||||||
icon_dead = "original_dead"
|
icon_dead = "original_dead"
|
||||||
Read_Memory()
|
Read_Memory()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/Life()
|
/mob/living/simple_animal/pet/cat/Runtime/Life()
|
||||||
if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP)
|
if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP)
|
||||||
Deploy_The_Cats()
|
Deploy_The_Cats()
|
||||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||||
Write_Memory()
|
Write_Memory()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/make_babies()
|
/mob/living/simple_animal/pet/cat/Runtime/make_babies()
|
||||||
var/mob/baby = ..()
|
var/mob/baby = ..()
|
||||||
if(baby)
|
if(baby)
|
||||||
children += baby
|
children += baby
|
||||||
return baby
|
return baby
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/death()
|
/mob/living/simple_animal/pet/cat/Runtime/death()
|
||||||
if(!memory_saved)
|
if(!memory_saved)
|
||||||
Write_Memory(1)
|
Write_Memory(1)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory()
|
/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory()
|
||||||
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
||||||
S["family"] >> family
|
S["family"] >> family
|
||||||
|
|
||||||
if(isnull(family))
|
if(isnull(family))
|
||||||
family = list()
|
family = list()
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead)
|
/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead)
|
||||||
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
||||||
family = list()
|
family = list()
|
||||||
if(!dead)
|
if(!dead)
|
||||||
for(var/mob/living/simple_animal/pet/cat/kitten/C in children)
|
for(var/mob/living/simple_animal/pet/cat/kitten/C in children)
|
||||||
if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats
|
if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats
|
||||||
continue
|
continue
|
||||||
if(C.type in family)
|
if(C.type in family)
|
||||||
family[C.type] += 1
|
family[C.type] += 1
|
||||||
else
|
else
|
||||||
family[C.type] = 1
|
family[C.type] = 1
|
||||||
S["family"] << family
|
S["family"] << family
|
||||||
memory_saved = 1
|
memory_saved = 1
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats()
|
/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats()
|
||||||
cats_deployed = 1
|
cats_deployed = 1
|
||||||
for(var/cat_type in family)
|
for(var/cat_type in family)
|
||||||
if(family[cat_type] > 0)
|
if(family[cat_type] > 0)
|
||||||
for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS)
|
for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS)
|
||||||
new cat_type(loc)
|
new cat_type(loc)
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Proc
|
/mob/living/simple_animal/pet/cat/Proc
|
||||||
name = "Proc"
|
name = "Proc"
|
||||||
gender = MALE
|
gender = MALE
|
||||||
gold_core_spawnable = 0
|
gold_core_spawnable = 0
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/Life()
|
/mob/living/simple_animal/pet/cat/Life()
|
||||||
if(!stat && !buckled && !client)
|
if(!stat && !buckled && !client)
|
||||||
if(prob(1))
|
if(prob(1))
|
||||||
emote("me", 1, pick("stretches out for a belly rub.", "wags its tail.", "lies down."))
|
emote("me", 1, pick("stretches out for a belly rub.", "wags its tail.", "lies down."))
|
||||||
icon_state = "[icon_living]_rest"
|
icon_state = "[icon_living]_rest"
|
||||||
resting = 1
|
resting = 1
|
||||||
update_canmove()
|
update_canmove()
|
||||||
else if (prob(1))
|
else if (prob(1))
|
||||||
emote("me", 1, pick("sits down.", "crouches on its hind legs.", "looks alert."))
|
emote("me", 1, pick("sits down.", "crouches on its hind legs.", "looks alert."))
|
||||||
icon_state = "[icon_living]_sit"
|
icon_state = "[icon_living]_sit"
|
||||||
resting = 1
|
resting = 1
|
||||||
update_canmove()
|
update_canmove()
|
||||||
else if (prob(1))
|
else if (prob(1))
|
||||||
if (resting)
|
if (resting)
|
||||||
emote("me", 1, pick("gets up and meows.", "walks around.", "stops resting."))
|
emote("me", 1, pick("gets up and meows.", "walks around.", "stops resting."))
|
||||||
icon_state = "[icon_living]"
|
icon_state = "[icon_living]"
|
||||||
resting = 0
|
resting = 0
|
||||||
update_canmove()
|
update_canmove()
|
||||||
else
|
else
|
||||||
emote("me", 1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat."))
|
emote("me", 1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat."))
|
||||||
|
|
||||||
//MICE!
|
//MICE!
|
||||||
if((src.loc) && isturf(src.loc))
|
if((src.loc) && isturf(src.loc))
|
||||||
if(!stat && !resting && !buckled)
|
if(!stat && !resting && !buckled)
|
||||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||||
if(!M.stat && Adjacent(M))
|
if(!M.stat && Adjacent(M))
|
||||||
emote("me", 1, "splats \the [M]!")
|
emote("me", 1, "splats \the [M]!")
|
||||||
M.splat()
|
M.splat()
|
||||||
movement_target = null
|
movement_target = null
|
||||||
stop_automated_movement = 0
|
stop_automated_movement = 0
|
||||||
break
|
break
|
||||||
for(var/obj/item/toy/cattoy/T in view(1,src))
|
for(var/obj/item/toy/cattoy/T in view(1,src))
|
||||||
if (T.cooldown < (world.time - 400))
|
if (T.cooldown < (world.time - 400))
|
||||||
emote("me", 1, "bats \the [T] around with its paw!")
|
emote("me", 1, "bats \the [T] around with its paw!")
|
||||||
T.cooldown = world.time
|
T.cooldown = world.time
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
make_babies()
|
make_babies()
|
||||||
|
|
||||||
if(!stat && !resting && !buckled)
|
if(!stat && !resting && !buckled)
|
||||||
turns_since_scan++
|
turns_since_scan++
|
||||||
if(turns_since_scan > 5)
|
if(turns_since_scan > 5)
|
||||||
walk_to(src,0)
|
walk_to(src,0)
|
||||||
turns_since_scan = 0
|
turns_since_scan = 0
|
||||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||||
movement_target = null
|
movement_target = null
|
||||||
stop_automated_movement = 0
|
stop_automated_movement = 0
|
||||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||||
movement_target = null
|
movement_target = null
|
||||||
stop_automated_movement = 0
|
stop_automated_movement = 0
|
||||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
||||||
if(isturf(snack.loc) && !snack.stat)
|
if(isturf(snack.loc) && !snack.stat)
|
||||||
movement_target = snack
|
movement_target = snack
|
||||||
break
|
break
|
||||||
if(movement_target)
|
if(movement_target)
|
||||||
stop_automated_movement = 1
|
stop_automated_movement = 1
|
||||||
walk_to(src,movement_target,0,3)
|
walk_to(src,movement_target,0,3)
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/attack_hand(mob/living/carbon/human/M)
|
/mob/living/simple_animal/pet/cat/attack_hand(mob/living/carbon/human/M)
|
||||||
. = ..()
|
. = ..()
|
||||||
switch(M.a_intent)
|
switch(M.a_intent)
|
||||||
if("help")
|
if("help")
|
||||||
wuv(1, M)
|
wuv(1, M)
|
||||||
if("harm")
|
if("harm")
|
||||||
wuv(-1, M)
|
wuv(-1, M)
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/proc/wuv(change, mob/M)
|
/mob/living/simple_animal/pet/cat/proc/wuv(change, mob/M)
|
||||||
if(change)
|
if(change)
|
||||||
if(change > 0)
|
if(change > 0)
|
||||||
if(M && stat != DEAD)
|
if(M && stat != DEAD)
|
||||||
new /obj/effect/overlay/temp/heart(loc)
|
new /obj/effect/overlay/temp/heart(loc)
|
||||||
emote("me", 1, "purrs!")
|
emote("me", 1, "purrs!")
|
||||||
else
|
else
|
||||||
if(M && stat != DEAD)
|
if(M && stat != DEAD)
|
||||||
emote("me", 1, "hisses!")
|
emote("me", 1, "hisses!")
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/cak //I told you I'd do it, Remie
|
/mob/living/simple_animal/pet/cat/cak //I told you I'd do it, Remie
|
||||||
name = "Keeki"
|
name = "Keeki"
|
||||||
desc = "It's a cat made out of cake."
|
desc = "It's a cat made out of cake."
|
||||||
icon_state = "cak"
|
icon_state = "cak"
|
||||||
icon_living = "cak"
|
icon_living = "cak"
|
||||||
icon_dead = "cak_dead"
|
icon_dead = "cak_dead"
|
||||||
health = 50
|
health = 50
|
||||||
maxHealth = 50
|
maxHealth = 50
|
||||||
gender = FEMALE
|
gender = FEMALE
|
||||||
harm_intent_damage = 10
|
harm_intent_damage = 10
|
||||||
butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday = 3, \
|
butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday = 3, \
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
|
/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
|
||||||
response_harm = "takes a bite out of"
|
response_harm = "takes a bite out of"
|
||||||
attacked_sound = 'sound/items/eatfood.ogg'
|
attacked_sound = 'sound/items/eatfood.ogg'
|
||||||
deathmessage = "loses its false life and collapses!"
|
deathmessage = "loses its false life and collapses!"
|
||||||
death_sound = "bodyfall"
|
death_sound = "bodyfall"
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts)
|
/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts)
|
||||||
..()
|
..()
|
||||||
var/obj/item/organ/brain/B = locate(/obj/item/organ/brain) in contents
|
var/obj/item/organ/brain/B = locate(/obj/item/organ/brain) in contents
|
||||||
if(!B || !B.brainmob || !B.brainmob.mind)
|
if(!B || !B.brainmob || !B.brainmob.mind)
|
||||||
return
|
return
|
||||||
B.brainmob.mind.transfer_to(src)
|
B.brainmob.mind.transfer_to(src)
|
||||||
to_chat(src, "<font size=3><b>Y</b></font><b>ou are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \
|
to_chat(src, "<font size=3><b>Y</b></font><b>ou are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \
|
||||||
so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \
|
so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \
|
||||||
free cake to the station!</b>")
|
free cake to the station!</b>")
|
||||||
var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change")
|
var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change")
|
||||||
if(new_name)
|
if(new_name)
|
||||||
to_chat(src, "<span class='notice'>Your name is now <b>\"new_name\"</b>!</span>")
|
to_chat(src, "<span class='notice'>Your name is now <b>\"new_name\"</b>!</span>")
|
||||||
name = new_name
|
name = new_name
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/cak/Life()
|
/mob/living/simple_animal/pet/cat/cak/Life()
|
||||||
..()
|
..()
|
||||||
if(stat)
|
if(stat)
|
||||||
return
|
return
|
||||||
if(health < maxHealth)
|
if(health < maxHealth)
|
||||||
adjustBruteLoss(-8) //Fast life regen
|
adjustBruteLoss(-8) //Fast life regen
|
||||||
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts!
|
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts!
|
||||||
if(D.icon_state != "donut2")
|
if(D.icon_state != "donut2")
|
||||||
D.name = "frosted donut"
|
D.name = "frosted donut"
|
||||||
D.icon_state = "donut2"
|
D.icon_state = "donut2"
|
||||||
D.reagents.add_reagent("sprinkles", 2)
|
D.reagents.add_reagent("sprinkles", 2)
|
||||||
D.bonus_reagents = list("sprinkles" = 2, "sugar" = 1)
|
D.bonus_reagents = list("sprinkles" = 2, "sugar" = 1)
|
||||||
D.filling_color = "#FF69B4"
|
D.filling_color = "#FF69B4"
|
||||||
|
|
||||||
/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L)
|
/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L)
|
||||||
..()
|
..()
|
||||||
if(L.a_intent == INTENT_HARM && L.reagents && !stat)
|
if(L.a_intent == INTENT_HARM && L.reagents && !stat)
|
||||||
L.reagents.add_reagent("nutriment", 0.4)
|
L.reagents.add_reagent("nutriment", 0.4)
|
||||||
L.reagents.add_reagent("vitamin", 0.4)
|
L.reagents.add_reagent("vitamin", 0.4)
|
||||||
|
|||||||
@@ -1,122 +1,122 @@
|
|||||||
/obj/item/weapon/clipboard
|
/obj/item/weapon/clipboard
|
||||||
name = "clipboard"
|
name = "clipboard"
|
||||||
icon = 'icons/obj/bureaucracy.dmi'
|
icon = 'icons/obj/bureaucracy.dmi'
|
||||||
icon_state = "clipboard"
|
icon_state = "clipboard"
|
||||||
item_state = "clipboard"
|
item_state = "clipboard"
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
w_class = WEIGHT_CLASS_SMALL
|
w_class = WEIGHT_CLASS_SMALL
|
||||||
throw_speed = 3
|
throw_speed = 3
|
||||||
throw_range = 7
|
throw_range = 7
|
||||||
var/obj/item/weapon/pen/haspen //The stored pen.
|
var/obj/item/weapon/pen/haspen //The stored pen.
|
||||||
var/obj/item/weapon/paper/toppaper //The topmost piece of paper.
|
var/obj/item/weapon/paper/toppaper //The topmost piece of paper.
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
resistance_flags = FLAMMABLE
|
resistance_flags = FLAMMABLE
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/Initialize()
|
/obj/item/weapon/clipboard/Initialize()
|
||||||
update_icon()
|
update_icon()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/Destroy()
|
/obj/item/weapon/clipboard/Destroy()
|
||||||
QDEL_NULL(haspen)
|
QDEL_NULL(haspen)
|
||||||
QDEL_NULL(toppaper) //let movable/Destroy handle the rest
|
QDEL_NULL(toppaper) //let movable/Destroy handle the rest
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/update_icon()
|
/obj/item/weapon/clipboard/update_icon()
|
||||||
cut_overlays()
|
cut_overlays()
|
||||||
if(toppaper)
|
if(toppaper)
|
||||||
add_overlay(toppaper.icon_state)
|
add_overlay(toppaper.icon_state)
|
||||||
copy_overlays(toppaper)
|
copy_overlays(toppaper)
|
||||||
if(haspen)
|
if(haspen)
|
||||||
add_overlay("clipboard_pen")
|
add_overlay("clipboard_pen")
|
||||||
add_overlay("clipboard_over")
|
add_overlay("clipboard_over")
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user, params)
|
/obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user, params)
|
||||||
if(istype(W, /obj/item/weapon/paper))
|
if(istype(W, /obj/item/weapon/paper))
|
||||||
if(!user.transferItemToLoc(W, src))
|
if(!user.transferItemToLoc(W, src))
|
||||||
return
|
return
|
||||||
toppaper = W
|
toppaper = W
|
||||||
to_chat(user, "<span class='notice'>You clip the paper onto \the [src].</span>")
|
to_chat(user, "<span class='notice'>You clip the paper onto \the [src].</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
else if(toppaper)
|
else if(toppaper)
|
||||||
toppaper.attackby(user.get_active_held_item(), user)
|
toppaper.attackby(user.get_active_held_item(), user)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/attack_self(mob/user)
|
/obj/item/weapon/clipboard/attack_self(mob/user)
|
||||||
var/dat = "<title>Clipboard</title>"
|
var/dat = "<title>Clipboard</title>"
|
||||||
if(haspen)
|
if(haspen)
|
||||||
dat += "<A href='?src=\ref[src];pen=1'>Remove Pen</A><BR><HR>"
|
dat += "<A href='?src=\ref[src];pen=1'>Remove Pen</A><BR><HR>"
|
||||||
else
|
else
|
||||||
dat += "<A href='?src=\ref[src];addpen=1'>Add Pen</A><BR><HR>"
|
dat += "<A href='?src=\ref[src];addpen=1'>Add Pen</A><BR><HR>"
|
||||||
|
|
||||||
//The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete
|
//The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete
|
||||||
if(toppaper)
|
if(toppaper)
|
||||||
var/obj/item/weapon/paper/P = toppaper
|
var/obj/item/weapon/paper/P = toppaper
|
||||||
dat += "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR><HR>"
|
dat += "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR><HR>"
|
||||||
|
|
||||||
for(P in src)
|
for(P in src)
|
||||||
if(P == toppaper)
|
if(P == toppaper)
|
||||||
continue
|
continue
|
||||||
dat += "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];top=\ref[P]'>Move to top</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
|
dat += "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];top=\ref[P]'>Move to top</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
|
||||||
user << browse(dat, "window=clipboard")
|
user << browse(dat, "window=clipboard")
|
||||||
onclose(user, "clipboard")
|
onclose(user, "clipboard")
|
||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/clipboard/Topic(href, href_list)
|
/obj/item/weapon/clipboard/Topic(href, href_list)
|
||||||
..()
|
..()
|
||||||
if(usr.stat || usr.restrained())
|
if(usr.stat || usr.restrained())
|
||||||
return
|
return
|
||||||
|
|
||||||
if(usr.contents.Find(src))
|
if(usr.contents.Find(src))
|
||||||
|
|
||||||
if(href_list["pen"])
|
if(href_list["pen"])
|
||||||
if(haspen)
|
if(haspen)
|
||||||
haspen.loc = usr.loc
|
haspen.loc = usr.loc
|
||||||
usr.put_in_hands(haspen)
|
usr.put_in_hands(haspen)
|
||||||
haspen = null
|
haspen = null
|
||||||
|
|
||||||
if(href_list["addpen"])
|
if(href_list["addpen"])
|
||||||
if(!haspen)
|
if(!haspen)
|
||||||
var/obj/item/held = usr.get_active_held_item()
|
var/obj/item/held = usr.get_active_held_item()
|
||||||
if(istype(held, /obj/item/weapon/pen))
|
if(istype(held, /obj/item/weapon/pen))
|
||||||
var/obj/item/weapon/pen/W = held
|
var/obj/item/weapon/pen/W = held
|
||||||
if(!usr.transferItemToLoc(W, src))
|
if(!usr.transferItemToLoc(W, src))
|
||||||
return
|
return
|
||||||
haspen = W
|
haspen = W
|
||||||
to_chat(usr, "<span class='notice'>You slot [W] into [src].</span>")
|
to_chat(usr, "<span class='notice'>You slot [W] into [src].</span>")
|
||||||
|
|
||||||
if(href_list["write"])
|
if(href_list["write"])
|
||||||
var/obj/item/P = locate(href_list["write"])
|
var/obj/item/P = locate(href_list["write"])
|
||||||
if(istype(P) && P.loc == src)
|
if(istype(P) && P.loc == src)
|
||||||
if(usr.get_active_held_item())
|
if(usr.get_active_held_item())
|
||||||
P.attackby(usr.get_active_held_item(), usr)
|
P.attackby(usr.get_active_held_item(), usr)
|
||||||
|
|
||||||
if(href_list["remove"])
|
if(href_list["remove"])
|
||||||
var/obj/item/P = locate(href_list["remove"])
|
var/obj/item/P = locate(href_list["remove"])
|
||||||
if(istype(P) && P.loc == src)
|
if(istype(P) && P.loc == src)
|
||||||
P.loc = usr.loc
|
P.loc = usr.loc
|
||||||
usr.put_in_hands(P)
|
usr.put_in_hands(P)
|
||||||
if(P == toppaper)
|
if(P == toppaper)
|
||||||
toppaper = null
|
toppaper = null
|
||||||
var/obj/item/weapon/paper/newtop = locate(/obj/item/weapon/paper) in src
|
var/obj/item/weapon/paper/newtop = locate(/obj/item/weapon/paper) in src
|
||||||
if(newtop && (newtop != P))
|
if(newtop && (newtop != P))
|
||||||
toppaper = newtop
|
toppaper = newtop
|
||||||
else
|
else
|
||||||
toppaper = null
|
toppaper = null
|
||||||
|
|
||||||
if(href_list["read"])
|
if(href_list["read"])
|
||||||
var/obj/item/weapon/paper/P = locate(href_list["read"])
|
var/obj/item/weapon/paper/P = locate(href_list["read"])
|
||||||
if(istype(P) && P.loc == src)
|
if(istype(P) && P.loc == src)
|
||||||
usr.examinate(P)
|
usr.examinate(P)
|
||||||
|
|
||||||
if(href_list["top"])
|
if(href_list["top"])
|
||||||
var/obj/item/P = locate(href_list["top"])
|
var/obj/item/P = locate(href_list["top"])
|
||||||
if(istype(P) && P.loc == src)
|
if(istype(P) && P.loc == src)
|
||||||
toppaper = P
|
toppaper = P
|
||||||
to_chat(usr, "<span class='notice'>You move [P.name] to the top.</span>")
|
to_chat(usr, "<span class='notice'>You move [P.name] to the top.</span>")
|
||||||
|
|
||||||
//Update everything
|
//Update everything
|
||||||
attack_self(usr)
|
attack_self(usr)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|||||||
@@ -78,8 +78,8 @@
|
|||||||
name = "folder- 'TOP SECRET'"
|
name = "folder- 'TOP SECRET'"
|
||||||
desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\""
|
desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\""
|
||||||
|
|
||||||
/obj/item/weapon/folder/documents/Initialize()
|
/obj/item/weapon/folder/documents/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
new /obj/item/documents/nanotrasen(src)
|
new /obj/item/documents/nanotrasen(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
@@ -91,20 +91,20 @@
|
|||||||
/obj/item/weapon/folder/syndicate/red
|
/obj/item/weapon/folder/syndicate/red
|
||||||
icon_state = "folder_sred"
|
icon_state = "folder_sred"
|
||||||
|
|
||||||
/obj/item/weapon/folder/syndicate/red/Initialize()
|
/obj/item/weapon/folder/syndicate/red/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
new /obj/item/documents/syndicate/red(src)
|
new /obj/item/documents/syndicate/red(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/folder/syndicate/blue
|
/obj/item/weapon/folder/syndicate/blue
|
||||||
icon_state = "folder_sblue"
|
icon_state = "folder_sblue"
|
||||||
|
|
||||||
/obj/item/weapon/folder/syndicate/blue/Initialize()
|
/obj/item/weapon/folder/syndicate/blue/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
new /obj/item/documents/syndicate/blue(src)
|
new /obj/item/documents/syndicate/blue(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/folder/syndicate/mining/Initialize()
|
/obj/item/weapon/folder/syndicate/mining/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
new /obj/item/documents/syndicate/mining(src)
|
new /obj/item/documents/syndicate/mining(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
|
|||||||
|
|
||||||
/obj/machinery/gravity_generator
|
/obj/machinery/gravity_generator
|
||||||
name = "gravitational generator"
|
name = "gravitational generator"
|
||||||
desc = "A device which produces a graviton field when set up."
|
desc = "A device which produces a graviton field when set up."
|
||||||
icon = 'icons/obj/machines/gravity_generator.dmi'
|
icon = 'icons/obj/machines/gravity_generator.dmi'
|
||||||
anchored = 1
|
anchored = 1
|
||||||
density = 1
|
density = 1
|
||||||
@@ -304,17 +304,17 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
|
|||||||
// Sound the alert if gravity was just enabled or disabled.
|
// Sound the alert if gravity was just enabled or disabled.
|
||||||
var/alert = 0
|
var/alert = 0
|
||||||
var/area/A = get_area(src)
|
var/area/A = get_area(src)
|
||||||
if(SSticker.IsRoundInProgress())
|
if(SSticker.IsRoundInProgress())
|
||||||
if(on) // If we turned on and the game is live.
|
if(on) // If we turned on and the game is live.
|
||||||
if(gravity_in_level() == 0)
|
if(gravity_in_level() == 0)
|
||||||
alert = 1
|
alert = 1
|
||||||
investigate_log("was brought online and is now producing gravity for this level.", "gravity")
|
investigate_log("was brought online and is now producing gravity for this level.", "gravity")
|
||||||
message_admins("The gravity generator was brought online [A][ADMIN_COORDJMP(src)]")
|
message_admins("The gravity generator was brought online [A][ADMIN_COORDJMP(src)]")
|
||||||
else
|
else
|
||||||
if(gravity_in_level() == 1)
|
if(gravity_in_level() == 1)
|
||||||
alert = 1
|
alert = 1
|
||||||
investigate_log("was brought offline and there is now no gravity for this level.", "gravity")
|
investigate_log("was brought offline and there is now no gravity for this level.", "gravity")
|
||||||
message_admins("The gravity generator was brought offline with no backup generator. [A][ADMIN_COORDJMP(src)]")
|
message_admins("The gravity generator was brought offline with no backup generator. [A][ADMIN_COORDJMP(src)]")
|
||||||
|
|
||||||
update_icon()
|
update_icon()
|
||||||
update_list()
|
update_list()
|
||||||
|
|||||||
@@ -1,493 +1,493 @@
|
|||||||
/obj/machinery/power/emitter
|
/obj/machinery/power/emitter
|
||||||
name = "Emitter"
|
name = "Emitter"
|
||||||
desc = "A heavy duty industrial laser.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
desc = "A heavy duty industrial laser.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||||
icon = 'icons/obj/singularity.dmi'
|
icon = 'icons/obj/singularity.dmi'
|
||||||
icon_state = "emitter"
|
icon_state = "emitter"
|
||||||
var/icon_state_on = "emitter_+a"
|
var/icon_state_on = "emitter_+a"
|
||||||
anchored = 0
|
anchored = 0
|
||||||
density = 1
|
density = 1
|
||||||
req_access = list(GLOB.access_engine_equip)
|
req_access = list(GLOB.access_engine_equip)
|
||||||
|
|
||||||
// The following 3 vars are mostly for the prototype
|
// The following 3 vars are mostly for the prototype
|
||||||
var/manual = FALSE
|
var/manual = FALSE
|
||||||
var/charge = 0
|
var/charge = 0
|
||||||
var/atom/target = null
|
var/atom/target = null
|
||||||
|
|
||||||
use_power = 0
|
use_power = 0
|
||||||
idle_power_usage = 10
|
idle_power_usage = 10
|
||||||
active_power_usage = 300
|
active_power_usage = 300
|
||||||
|
|
||||||
var/active = 0
|
var/active = 0
|
||||||
var/powered = 0
|
var/powered = 0
|
||||||
var/fire_delay = 100
|
var/fire_delay = 100
|
||||||
var/maximum_fire_delay = 100
|
var/maximum_fire_delay = 100
|
||||||
var/minimum_fire_delay = 20
|
var/minimum_fire_delay = 20
|
||||||
var/last_shot = 0
|
var/last_shot = 0
|
||||||
var/shot_number = 0
|
var/shot_number = 0
|
||||||
var/state = 0
|
var/state = 0
|
||||||
var/locked = 0
|
var/locked = 0
|
||||||
|
|
||||||
var/projectile_type = /obj/item/projectile/beam/emitter
|
var/projectile_type = /obj/item/projectile/beam/emitter
|
||||||
|
|
||||||
var/projectile_sound = 'sound/weapons/emitter.ogg'
|
var/projectile_sound = 'sound/weapons/emitter.ogg'
|
||||||
|
|
||||||
var/datum/effect_system/spark_spread/sparks
|
var/datum/effect_system/spark_spread/sparks
|
||||||
|
|
||||||
/obj/machinery/power/emitter/New()
|
/obj/machinery/power/emitter/New()
|
||||||
..()
|
..()
|
||||||
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null)
|
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null)
|
||||||
B.apply_default_parts(src)
|
B.apply_default_parts(src)
|
||||||
RefreshParts()
|
RefreshParts()
|
||||||
wires = new /datum/wires/emitter(src)
|
wires = new /datum/wires/emitter(src)
|
||||||
|
|
||||||
/obj/item/weapon/circuitboard/machine/emitter
|
/obj/item/weapon/circuitboard/machine/emitter
|
||||||
name = "Emitter (Machine Board)"
|
name = "Emitter (Machine Board)"
|
||||||
build_path = /obj/machinery/power/emitter
|
build_path = /obj/machinery/power/emitter
|
||||||
origin_tech = "programming=3;powerstorage=4;engineering=4"
|
origin_tech = "programming=3;powerstorage=4;engineering=4"
|
||||||
req_components = list(
|
req_components = list(
|
||||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||||
/obj/item/weapon/stock_parts/manipulator = 1)
|
/obj/item/weapon/stock_parts/manipulator = 1)
|
||||||
|
|
||||||
/obj/machinery/power/emitter/RefreshParts()
|
/obj/machinery/power/emitter/RefreshParts()
|
||||||
var/max_firedelay = 120
|
var/max_firedelay = 120
|
||||||
var/firedelay = 120
|
var/firedelay = 120
|
||||||
var/min_firedelay = 24
|
var/min_firedelay = 24
|
||||||
var/power_usage = 350
|
var/power_usage = 350
|
||||||
for(var/obj/item/weapon/stock_parts/micro_laser/L in component_parts)
|
for(var/obj/item/weapon/stock_parts/micro_laser/L in component_parts)
|
||||||
max_firedelay -= 20 * L.rating
|
max_firedelay -= 20 * L.rating
|
||||||
min_firedelay -= 4 * L.rating
|
min_firedelay -= 4 * L.rating
|
||||||
firedelay -= 20 * L.rating
|
firedelay -= 20 * L.rating
|
||||||
maximum_fire_delay = max_firedelay
|
maximum_fire_delay = max_firedelay
|
||||||
minimum_fire_delay = min_firedelay
|
minimum_fire_delay = min_firedelay
|
||||||
fire_delay = firedelay
|
fire_delay = firedelay
|
||||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||||
power_usage -= 50 * M.rating
|
power_usage -= 50 * M.rating
|
||||||
active_power_usage = power_usage
|
active_power_usage = power_usage
|
||||||
|
|
||||||
/obj/machinery/power/emitter/verb/rotate()
|
/obj/machinery/power/emitter/verb/rotate()
|
||||||
set name = "Rotate"
|
set name = "Rotate"
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
set src in oview(1)
|
set src in oview(1)
|
||||||
|
|
||||||
if(usr.stat || !usr.canmove || usr.restrained())
|
if(usr.stat || !usr.canmove || usr.restrained())
|
||||||
return
|
return
|
||||||
if (src.anchored)
|
if (src.anchored)
|
||||||
to_chat(usr, "<span class='warning'>It is fastened to the floor!</span>")
|
to_chat(usr, "<span class='warning'>It is fastened to the floor!</span>")
|
||||||
return 0
|
return 0
|
||||||
src.setDir(turn(src.dir, 270))
|
src.setDir(turn(src.dir, 270))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/power/emitter/AltClick(mob/user)
|
/obj/machinery/power/emitter/AltClick(mob/user)
|
||||||
..()
|
..()
|
||||||
if(user.incapacitated())
|
if(user.incapacitated())
|
||||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||||
return
|
return
|
||||||
if(!in_range(src, user))
|
if(!in_range(src, user))
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
rotate()
|
rotate()
|
||||||
|
|
||||||
/obj/machinery/power/emitter/Initialize()
|
/obj/machinery/power/emitter/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(state == 2 && anchored)
|
if(state == 2 && anchored)
|
||||||
connect_to_network()
|
connect_to_network()
|
||||||
|
|
||||||
sparks = new
|
sparks = new
|
||||||
sparks.attach(src)
|
sparks.attach(src)
|
||||||
sparks.set_up(5, TRUE, src)
|
sparks.set_up(5, TRUE, src)
|
||||||
|
|
||||||
/obj/machinery/power/emitter/Destroy()
|
/obj/machinery/power/emitter/Destroy()
|
||||||
if(SSticker && SSticker.IsRoundInProgress())
|
if(SSticker && SSticker.IsRoundInProgress())
|
||||||
message_admins("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
message_admins("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||||
log_game("Emitter deleted at ([x],[y],[z])")
|
log_game("Emitter deleted at ([x],[y],[z])")
|
||||||
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z]) at [get_area(src)]","singulo")
|
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z]) at [get_area(src)]","singulo")
|
||||||
QDEL_NULL(sparks)
|
QDEL_NULL(sparks)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/power/emitter/update_icon()
|
/obj/machinery/power/emitter/update_icon()
|
||||||
if (active && powernet && avail(active_power_usage))
|
if (active && powernet && avail(active_power_usage))
|
||||||
icon_state = icon_state_on
|
icon_state = icon_state_on
|
||||||
else
|
else
|
||||||
icon_state = initial(icon_state)
|
icon_state = initial(icon_state)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/emitter/attack_hand(mob/user)
|
/obj/machinery/power/emitter/attack_hand(mob/user)
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
if(state == 2)
|
if(state == 2)
|
||||||
if(!powernet)
|
if(!powernet)
|
||||||
to_chat(user, "<span class='warning'>The emitter isn't connected to a wire!</span>")
|
to_chat(user, "<span class='warning'>The emitter isn't connected to a wire!</span>")
|
||||||
return 1
|
return 1
|
||||||
if(!src.locked)
|
if(!src.locked)
|
||||||
if(src.active==1)
|
if(src.active==1)
|
||||||
src.active = 0
|
src.active = 0
|
||||||
to_chat(user, "<span class='notice'>You turn off \the [src].</span>")
|
to_chat(user, "<span class='notice'>You turn off \the [src].</span>")
|
||||||
message_admins("Emitter turned off by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(src)]",0,1)
|
message_admins("Emitter turned off by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(src)]",0,1)
|
||||||
log_game("Emitter turned off by [key_name(user)] in [COORD(src)]")
|
log_game("Emitter turned off by [key_name(user)] in [COORD(src)]")
|
||||||
investigate_log("turned <font color='red'>off</font> by [key_name(user)] at [get_area(src)]","singulo")
|
investigate_log("turned <font color='red'>off</font> by [key_name(user)] at [get_area(src)]","singulo")
|
||||||
else
|
else
|
||||||
src.active = 1
|
src.active = 1
|
||||||
to_chat(user, "<span class='notice'>You turn on \the [src].</span>")
|
to_chat(user, "<span class='notice'>You turn on \the [src].</span>")
|
||||||
src.shot_number = 0
|
src.shot_number = 0
|
||||||
src.fire_delay = maximum_fire_delay
|
src.fire_delay = maximum_fire_delay
|
||||||
investigate_log("turned <font color='green'>on</font> by [key_name(user)] at [get_area(src)]","singulo")
|
investigate_log("turned <font color='green'>on</font> by [key_name(user)] at [get_area(src)]","singulo")
|
||||||
update_icon()
|
update_icon()
|
||||||
else
|
else
|
||||||
to_chat(user, "<span class='warning'>The controls are locked!</span>")
|
to_chat(user, "<span class='warning'>The controls are locked!</span>")
|
||||||
else
|
else
|
||||||
to_chat(user, "<span class='warning'>The [src] needs to be firmly secured to the floor first!</span>")
|
to_chat(user, "<span class='warning'>The [src] needs to be firmly secured to the floor first!</span>")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/power/emitter/attack_animal(mob/living/simple_animal/M)
|
/obj/machinery/power/emitter/attack_animal(mob/living/simple_animal/M)
|
||||||
if(ismegafauna(M) && anchored)
|
if(ismegafauna(M) && anchored)
|
||||||
state = 0
|
state = 0
|
||||||
anchored = FALSE
|
anchored = FALSE
|
||||||
M.visible_message("<span class='warning'>[M] rips [src] free from its moorings!</span>")
|
M.visible_message("<span class='warning'>[M] rips [src] free from its moorings!</span>")
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
if(!anchored)
|
if(!anchored)
|
||||||
step(src, get_dir(M, src))
|
step(src, get_dir(M, src))
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/emitter/emp_act(severity)//Emitters are hardened but still might have issues
|
/obj/machinery/power/emitter/emp_act(severity)//Emitters are hardened but still might have issues
|
||||||
// add_load(1000)
|
// add_load(1000)
|
||||||
/* if((severity == 1)&&prob(1)&&prob(1))
|
/* if((severity == 1)&&prob(1)&&prob(1))
|
||||||
if(src.active)
|
if(src.active)
|
||||||
src.active = 0
|
src.active = 0
|
||||||
src.use_power = 1 */
|
src.use_power = 1 */
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/emitter/process()
|
/obj/machinery/power/emitter/process()
|
||||||
if(stat & (BROKEN))
|
if(stat & (BROKEN))
|
||||||
return
|
return
|
||||||
if(src.state != 2 || (!powernet && active_power_usage))
|
if(src.state != 2 || (!powernet && active_power_usage))
|
||||||
src.active = 0
|
src.active = 0
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
if(src.active == 1)
|
if(src.active == 1)
|
||||||
if(!active_power_usage || avail(active_power_usage))
|
if(!active_power_usage || avail(active_power_usage))
|
||||||
add_load(active_power_usage)
|
add_load(active_power_usage)
|
||||||
if(!powered)
|
if(!powered)
|
||||||
powered = 1
|
powered = 1
|
||||||
update_icon()
|
update_icon()
|
||||||
investigate_log("regained power and turned <font color='green'>on</font> at [get_area(src)]","singulo")
|
investigate_log("regained power and turned <font color='green'>on</font> at [get_area(src)]","singulo")
|
||||||
else
|
else
|
||||||
if(powered)
|
if(powered)
|
||||||
powered = 0
|
powered = 0
|
||||||
update_icon()
|
update_icon()
|
||||||
investigate_log("lost power and turned <font color='red'>off</font> at [get_area(src)]","singulo")
|
investigate_log("lost power and turned <font color='red'>off</font> at [get_area(src)]","singulo")
|
||||||
log_game("Emitter lost power in ([x],[y],[z])")
|
log_game("Emitter lost power in ([x],[y],[z])")
|
||||||
return
|
return
|
||||||
if(charge <=80)
|
if(charge <=80)
|
||||||
charge+=5
|
charge+=5
|
||||||
if(!check_delay() || manual == TRUE)
|
if(!check_delay() || manual == TRUE)
|
||||||
return FALSE
|
return FALSE
|
||||||
fire_beam(target)
|
fire_beam(target)
|
||||||
|
|
||||||
/obj/machinery/power/emitter/proc/check_delay()
|
/obj/machinery/power/emitter/proc/check_delay()
|
||||||
if((src.last_shot + src.fire_delay) <= world.time)
|
if((src.last_shot + src.fire_delay) <= world.time)
|
||||||
return TRUE
|
return TRUE
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/obj/machinery/power/emitter/proc/fire_beam_pulse()
|
/obj/machinery/power/emitter/proc/fire_beam_pulse()
|
||||||
if(!check_delay())
|
if(!check_delay())
|
||||||
return FALSE
|
return FALSE
|
||||||
if(state != 2)
|
if(state != 2)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(avail(active_power_usage))
|
if(avail(active_power_usage))
|
||||||
add_load(active_power_usage)
|
add_load(active_power_usage)
|
||||||
fire_beam()
|
fire_beam()
|
||||||
|
|
||||||
/obj/machinery/power/emitter/proc/fire_beam(atom/targeted_atom, mob/user)
|
/obj/machinery/power/emitter/proc/fire_beam(atom/targeted_atom, mob/user)
|
||||||
var/turf/targets_from = get_turf(src)
|
var/turf/targets_from = get_turf(src)
|
||||||
if(targeted_atom && (targeted_atom == user || targeted_atom == targets_from || targeted_atom == src))
|
if(targeted_atom && (targeted_atom == user || targeted_atom == targets_from || targeted_atom == src))
|
||||||
return
|
return
|
||||||
var/obj/item/projectile/P = new projectile_type(targets_from)
|
var/obj/item/projectile/P = new projectile_type(targets_from)
|
||||||
playsound(src.loc, projectile_sound, 50, 1)
|
playsound(src.loc, projectile_sound, 50, 1)
|
||||||
if(prob(35))
|
if(prob(35))
|
||||||
sparks.start()
|
sparks.start()
|
||||||
switch(dir)
|
switch(dir)
|
||||||
if(NORTH)
|
if(NORTH)
|
||||||
P.yo = 20
|
P.yo = 20
|
||||||
P.xo = 0
|
P.xo = 0
|
||||||
if(NORTHEAST)
|
if(NORTHEAST)
|
||||||
P.yo = 20
|
P.yo = 20
|
||||||
P.xo = 20
|
P.xo = 20
|
||||||
if(EAST)
|
if(EAST)
|
||||||
P.yo = 0
|
P.yo = 0
|
||||||
P.xo = 20
|
P.xo = 20
|
||||||
if(SOUTHEAST)
|
if(SOUTHEAST)
|
||||||
P.yo = -20
|
P.yo = -20
|
||||||
P.xo = 20
|
P.xo = 20
|
||||||
if(WEST)
|
if(WEST)
|
||||||
P.yo = 0
|
P.yo = 0
|
||||||
P.xo = -20
|
P.xo = -20
|
||||||
if(SOUTHWEST)
|
if(SOUTHWEST)
|
||||||
P.yo = -20
|
P.yo = -20
|
||||||
P.xo = -20
|
P.xo = -20
|
||||||
if(NORTHWEST)
|
if(NORTHWEST)
|
||||||
P.yo = 20
|
P.yo = 20
|
||||||
P.xo = -20
|
P.xo = -20
|
||||||
else // Any other
|
else // Any other
|
||||||
P.yo = -20
|
P.yo = -20
|
||||||
P.xo = 0
|
P.xo = 0
|
||||||
if(target)
|
if(target)
|
||||||
P.yo = targeted_atom.y - targets_from.y
|
P.yo = targeted_atom.y - targets_from.y
|
||||||
P.xo = targeted_atom.x - targets_from.x
|
P.xo = targeted_atom.x - targets_from.x
|
||||||
P.current = targets_from
|
P.current = targets_from
|
||||||
P.starting = targets_from
|
P.starting = targets_from
|
||||||
P.firer = src
|
P.firer = src
|
||||||
P.original = targeted_atom
|
P.original = targeted_atom
|
||||||
if(!manual)
|
if(!manual)
|
||||||
last_shot = world.time
|
last_shot = world.time
|
||||||
if(shot_number < 3)
|
if(shot_number < 3)
|
||||||
fire_delay = 20
|
fire_delay = 20
|
||||||
shot_number ++
|
shot_number ++
|
||||||
else
|
else
|
||||||
fire_delay = rand(minimum_fire_delay,maximum_fire_delay)
|
fire_delay = rand(minimum_fire_delay,maximum_fire_delay)
|
||||||
shot_number = 0
|
shot_number = 0
|
||||||
if(!target)
|
if(!target)
|
||||||
P.setDir(src.dir)
|
P.setDir(src.dir)
|
||||||
P.starting = loc
|
P.starting = loc
|
||||||
else
|
else
|
||||||
if(QDELETED(target))
|
if(QDELETED(target))
|
||||||
target = null
|
target = null
|
||||||
P.fire()
|
P.fire()
|
||||||
return P
|
return P
|
||||||
|
|
||||||
/obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user, silent)
|
/obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user, silent)
|
||||||
if(state == EM_WELDED)
|
if(state == EM_WELDED)
|
||||||
if(!silent)
|
if(!silent)
|
||||||
to_chat(user, "<span class='warning'>[src] is welded to the floor!</span>")
|
to_chat(user, "<span class='warning'>[src] is welded to the floor!</span>")
|
||||||
return FAILED_UNFASTEN
|
return FAILED_UNFASTEN
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/power/emitter/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20)
|
/obj/machinery/power/emitter/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(. == SUCCESSFUL_UNFASTEN)
|
if(. == SUCCESSFUL_UNFASTEN)
|
||||||
if(anchored)
|
if(anchored)
|
||||||
state = EM_SECURED
|
state = EM_SECURED
|
||||||
else
|
else
|
||||||
state = EM_UNSECURED
|
state = EM_UNSECURED
|
||||||
|
|
||||||
/obj/machinery/power/emitter/attackby(obj/item/W, mob/user, params)
|
/obj/machinery/power/emitter/attackby(obj/item/W, mob/user, params)
|
||||||
if(istype(W, /obj/item/weapon/wrench))
|
if(istype(W, /obj/item/weapon/wrench))
|
||||||
if(active)
|
if(active)
|
||||||
to_chat(user, "<span class='warning'>Turn \the [src] off first!</span>")
|
to_chat(user, "<span class='warning'>Turn \the [src] off first!</span>")
|
||||||
return
|
return
|
||||||
default_unfasten_wrench(user, W, 0)
|
default_unfasten_wrench(user, W, 0)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(istype(W, /obj/item/weapon/weldingtool))
|
if(istype(W, /obj/item/weapon/weldingtool))
|
||||||
var/obj/item/weapon/weldingtool/WT = W
|
var/obj/item/weapon/weldingtool/WT = W
|
||||||
if(active)
|
if(active)
|
||||||
to_chat(user, "Turn \the [src] off first.")
|
to_chat(user, "Turn \the [src] off first.")
|
||||||
return
|
return
|
||||||
switch(state)
|
switch(state)
|
||||||
if(EM_UNSECURED)
|
if(EM_UNSECURED)
|
||||||
to_chat(user, "<span class='warning'>The [src.name] needs to be wrenched to the floor!</span>")
|
to_chat(user, "<span class='warning'>The [src.name] needs to be wrenched to the floor!</span>")
|
||||||
if(EM_SECURED)
|
if(EM_SECURED)
|
||||||
if(WT.remove_fuel(0,user))
|
if(WT.remove_fuel(0,user))
|
||||||
playsound(loc, WT.usesound, 50, 1)
|
playsound(loc, WT.usesound, 50, 1)
|
||||||
user.visible_message("[user.name] starts to weld the [name] to the floor.", \
|
user.visible_message("[user.name] starts to weld the [name] to the floor.", \
|
||||||
"<span class='notice'>You start to weld \the [src] to the floor...</span>", \
|
"<span class='notice'>You start to weld \the [src] to the floor...</span>", \
|
||||||
"<span class='italics'>You hear welding.</span>")
|
"<span class='italics'>You hear welding.</span>")
|
||||||
if(do_after(user,20*W.toolspeed, target = src) && WT.isOn())
|
if(do_after(user,20*W.toolspeed, target = src) && WT.isOn())
|
||||||
state = EM_WELDED
|
state = EM_WELDED
|
||||||
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
|
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
|
||||||
connect_to_network()
|
connect_to_network()
|
||||||
if(EM_WELDED)
|
if(EM_WELDED)
|
||||||
if(WT.remove_fuel(0,user))
|
if(WT.remove_fuel(0,user))
|
||||||
playsound(loc, WT.usesound, 50, 1)
|
playsound(loc, WT.usesound, 50, 1)
|
||||||
user.visible_message("[user.name] starts to cut the [name] free from the floor.", \
|
user.visible_message("[user.name] starts to cut the [name] free from the floor.", \
|
||||||
"<span class='notice'>You start to cut \the [src] free from the floor...</span>", \
|
"<span class='notice'>You start to cut \the [src] free from the floor...</span>", \
|
||||||
"<span class='italics'>You hear welding.</span>")
|
"<span class='italics'>You hear welding.</span>")
|
||||||
if(do_after(user,20*W.toolspeed, target = src) && WT.isOn())
|
if(do_after(user,20*W.toolspeed, target = src) && WT.isOn())
|
||||||
state = EM_SECURED
|
state = EM_SECURED
|
||||||
to_chat(user, "<span class='notice'>You cut \the [src] free from the floor.</span>")
|
to_chat(user, "<span class='notice'>You cut \the [src] free from the floor.</span>")
|
||||||
disconnect_from_network()
|
disconnect_from_network()
|
||||||
return
|
return
|
||||||
|
|
||||||
if(W.GetID())
|
if(W.GetID())
|
||||||
if(emagged)
|
if(emagged)
|
||||||
to_chat(user, "<span class='warning'>The lock seems to be broken!</span>")
|
to_chat(user, "<span class='warning'>The lock seems to be broken!</span>")
|
||||||
return
|
return
|
||||||
if(allowed(user))
|
if(allowed(user))
|
||||||
if(active)
|
if(active)
|
||||||
locked = !locked
|
locked = !locked
|
||||||
to_chat(user, "<span class='notice'>You [src.locked ? "lock" : "unlock"] the controls.</span>")
|
to_chat(user, "<span class='notice'>You [src.locked ? "lock" : "unlock"] the controls.</span>")
|
||||||
else
|
else
|
||||||
to_chat(user, "<span class='warning'>The controls can only be locked when \the [src] is online!</span>")
|
to_chat(user, "<span class='warning'>The controls can only be locked when \the [src] is online!</span>")
|
||||||
else
|
else
|
||||||
to_chat(user, "<span class='danger'>Access denied.</span>")
|
to_chat(user, "<span class='danger'>Access denied.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(is_wire_tool(W) && panel_open)
|
if(is_wire_tool(W) && panel_open)
|
||||||
wires.interact(user)
|
wires.interact(user)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_deconstruction_screwdriver(user, "emitter_open", "emitter", W))
|
if(default_deconstruction_screwdriver(user, "emitter_open", "emitter", W))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(exchange_parts(user, W))
|
if(exchange_parts(user, W))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_pry_open(W))
|
if(default_pry_open(W))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_deconstruction_crowbar(W))
|
if(default_deconstruction_crowbar(W))
|
||||||
return
|
return
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/power/emitter/emag_act(mob/user)
|
/obj/machinery/power/emitter/emag_act(mob/user)
|
||||||
if(!emagged)
|
if(!emagged)
|
||||||
locked = 0
|
locked = 0
|
||||||
emagged = 1
|
emagged = 1
|
||||||
if(user)
|
if(user)
|
||||||
user.visible_message("[user.name] emags the [src.name].","<span class='notice'>You short out the lock.</span>")
|
user.visible_message("[user.name] emags the [src.name].","<span class='notice'>You short out the lock.</span>")
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/emitter/prototype
|
/obj/machinery/power/emitter/prototype
|
||||||
name = "Prototype Emitter"
|
name = "Prototype Emitter"
|
||||||
icon = 'icons/obj/turrets.dmi'
|
icon = 'icons/obj/turrets.dmi'
|
||||||
icon_state = "protoemitter"
|
icon_state = "protoemitter"
|
||||||
icon_state_on = "protoemitter_+a"
|
icon_state_on = "protoemitter_+a"
|
||||||
can_buckle = TRUE
|
can_buckle = TRUE
|
||||||
buckle_lying = 0
|
buckle_lying = 0
|
||||||
var/view_range = 12
|
var/view_range = 12
|
||||||
var/datum/action/innate/protoemitter/firing/auto
|
var/datum/action/innate/protoemitter/firing/auto
|
||||||
|
|
||||||
//BUCKLE HOOKS
|
//BUCKLE HOOKS
|
||||||
|
|
||||||
/obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob,force = 0)
|
/obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob,force = 0)
|
||||||
playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
|
playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||||
manual = FALSE
|
manual = FALSE
|
||||||
for(var/obj/item/I in buckled_mob.held_items)
|
for(var/obj/item/I in buckled_mob.held_items)
|
||||||
if(istype(I, /obj/item/weapon/turret_control))
|
if(istype(I, /obj/item/weapon/turret_control))
|
||||||
qdel(I)
|
qdel(I)
|
||||||
if(istype(buckled_mob))
|
if(istype(buckled_mob))
|
||||||
buckled_mob.pixel_x = 0
|
buckled_mob.pixel_x = 0
|
||||||
buckled_mob.pixel_y = 0
|
buckled_mob.pixel_y = 0
|
||||||
if(buckled_mob.client)
|
if(buckled_mob.client)
|
||||||
buckled_mob.client.change_view(world.view)
|
buckled_mob.client.change_view(world.view)
|
||||||
auto.Remove(buckled_mob)
|
auto.Remove(buckled_mob)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/M, mob/living/carbon/user)
|
/obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/M, mob/living/carbon/user)
|
||||||
if(user.incapacitated() || !istype(user))
|
if(user.incapacitated() || !istype(user))
|
||||||
return
|
return
|
||||||
for(var/atom/movable/A in get_turf(src))
|
for(var/atom/movable/A in get_turf(src))
|
||||||
if(A.density && (A != src && A != M))
|
if(A.density && (A != src && A != M))
|
||||||
return
|
return
|
||||||
M.forceMove(get_turf(src))
|
M.forceMove(get_turf(src))
|
||||||
..()
|
..()
|
||||||
playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
|
playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||||
M.pixel_y = 14
|
M.pixel_y = 14
|
||||||
layer = 4.1
|
layer = 4.1
|
||||||
if(M.client)
|
if(M.client)
|
||||||
M.client.change_view(view_range)
|
M.client.change_view(view_range)
|
||||||
if(!auto)
|
if(!auto)
|
||||||
auto = new()
|
auto = new()
|
||||||
auto.Grant(M, src)
|
auto.Grant(M, src)
|
||||||
|
|
||||||
/datum/action/innate/protoemitter
|
/datum/action/innate/protoemitter
|
||||||
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS
|
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS
|
||||||
var/obj/machinery/power/emitter/prototype/PE
|
var/obj/machinery/power/emitter/prototype/PE
|
||||||
var/mob/living/carbon/U
|
var/mob/living/carbon/U
|
||||||
|
|
||||||
|
|
||||||
/datum/action/innate/protoemitter/Grant(mob/living/carbon/L, obj/machinery/power/emitter/prototype/proto)
|
/datum/action/innate/protoemitter/Grant(mob/living/carbon/L, obj/machinery/power/emitter/prototype/proto)
|
||||||
PE = proto
|
PE = proto
|
||||||
U = L
|
U = L
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/datum/action/innate/protoemitter/firing
|
/datum/action/innate/protoemitter/firing
|
||||||
name = "Switch to Manual Firing"
|
name = "Switch to Manual Firing"
|
||||||
desc = "The emitter will only fire on your command and at your designated target"
|
desc = "The emitter will only fire on your command and at your designated target"
|
||||||
button_icon_state = "mech_zoom_on"
|
button_icon_state = "mech_zoom_on"
|
||||||
|
|
||||||
/datum/action/innate/protoemitter/firing/Activate()
|
/datum/action/innate/protoemitter/firing/Activate()
|
||||||
if(PE.manual)
|
if(PE.manual)
|
||||||
playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1)
|
playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||||
PE.manual = FALSE
|
PE.manual = FALSE
|
||||||
name = "Switch to Manual Firing"
|
name = "Switch to Manual Firing"
|
||||||
desc = "The emitter will only fire on your command and at your designated target"
|
desc = "The emitter will only fire on your command and at your designated target"
|
||||||
button_icon_state = "mech_zoom_on"
|
button_icon_state = "mech_zoom_on"
|
||||||
for(var/obj/item/I in U.held_items)
|
for(var/obj/item/I in U.held_items)
|
||||||
if(istype(I, /obj/item/weapon/turret_control))
|
if(istype(I, /obj/item/weapon/turret_control))
|
||||||
qdel(I)
|
qdel(I)
|
||||||
UpdateButtonIcon()
|
UpdateButtonIcon()
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1)
|
playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||||
name = "Switch to Automatic Firing"
|
name = "Switch to Automatic Firing"
|
||||||
desc = "Emitters will switch to periodic firing at your last target"
|
desc = "Emitters will switch to periodic firing at your last target"
|
||||||
button_icon_state = "mech_zoom_off"
|
button_icon_state = "mech_zoom_off"
|
||||||
PE.manual = TRUE
|
PE.manual = TRUE
|
||||||
for(var/V in U.held_items)
|
for(var/V in U.held_items)
|
||||||
var/obj/item/I = V
|
var/obj/item/I = V
|
||||||
if(istype(I))
|
if(istype(I))
|
||||||
if(U.dropItemToGround(I))
|
if(U.dropItemToGround(I))
|
||||||
var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
|
var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
|
||||||
U.put_in_hands(TC)
|
U.put_in_hands(TC)
|
||||||
else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand
|
else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand
|
||||||
var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
|
var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
|
||||||
U.put_in_hands(TC)
|
U.put_in_hands(TC)
|
||||||
UpdateButtonIcon()
|
UpdateButtonIcon()
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/turret_control
|
/obj/item/weapon/turret_control
|
||||||
name = "turret controls"
|
name = "turret controls"
|
||||||
icon_state = "offhand"
|
icon_state = "offhand"
|
||||||
w_class = WEIGHT_CLASS_HUGE
|
w_class = WEIGHT_CLASS_HUGE
|
||||||
flags = ABSTRACT | NODROP
|
flags = ABSTRACT | NODROP
|
||||||
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON
|
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON
|
||||||
var/delay = 0
|
var/delay = 0
|
||||||
|
|
||||||
/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user)
|
/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user)
|
||||||
..()
|
..()
|
||||||
var/obj/machinery/power/emitter/E = user.buckled
|
var/obj/machinery/power/emitter/E = user.buckled
|
||||||
E.setDir(get_dir(E,targeted_atom))
|
E.setDir(get_dir(E,targeted_atom))
|
||||||
user.setDir(E.dir)
|
user.setDir(E.dir)
|
||||||
switch(E.dir)
|
switch(E.dir)
|
||||||
if(NORTH)
|
if(NORTH)
|
||||||
E.layer = 3.9
|
E.layer = 3.9
|
||||||
user.pixel_x = 0
|
user.pixel_x = 0
|
||||||
user.pixel_y = -14
|
user.pixel_y = -14
|
||||||
if(NORTHEAST)
|
if(NORTHEAST)
|
||||||
E.layer = 3.9
|
E.layer = 3.9
|
||||||
user.pixel_x = -8
|
user.pixel_x = -8
|
||||||
user.pixel_y = -12
|
user.pixel_y = -12
|
||||||
if(EAST)
|
if(EAST)
|
||||||
E.layer = 4.1
|
E.layer = 4.1
|
||||||
user.pixel_x = -14
|
user.pixel_x = -14
|
||||||
user.pixel_y = 0
|
user.pixel_y = 0
|
||||||
if(SOUTHEAST)
|
if(SOUTHEAST)
|
||||||
E.layer = 3.9
|
E.layer = 3.9
|
||||||
user.pixel_x = -8
|
user.pixel_x = -8
|
||||||
user.pixel_y = 12
|
user.pixel_y = 12
|
||||||
if(SOUTH)
|
if(SOUTH)
|
||||||
E.layer = 4.1
|
E.layer = 4.1
|
||||||
user.pixel_x = 0
|
user.pixel_x = 0
|
||||||
user.pixel_y = 14
|
user.pixel_y = 14
|
||||||
if(SOUTHWEST)
|
if(SOUTHWEST)
|
||||||
E.layer = 3.9
|
E.layer = 3.9
|
||||||
user.pixel_x = 8
|
user.pixel_x = 8
|
||||||
user.pixel_y = 12
|
user.pixel_y = 12
|
||||||
if(WEST)
|
if(WEST)
|
||||||
E.layer = 4.1
|
E.layer = 4.1
|
||||||
user.pixel_x = 14
|
user.pixel_x = 14
|
||||||
user.pixel_y = 0
|
user.pixel_y = 0
|
||||||
if(NORTHWEST)
|
if(NORTHWEST)
|
||||||
E.layer = 3.9
|
E.layer = 3.9
|
||||||
user.pixel_x = 8
|
user.pixel_x = 8
|
||||||
user.pixel_y = -12
|
user.pixel_y = -12
|
||||||
|
|
||||||
if(E.charge >= 10 && world.time > delay)
|
if(E.charge >= 10 && world.time > delay)
|
||||||
E.charge -= 10
|
E.charge -= 10
|
||||||
E.target = targeted_atom
|
E.target = targeted_atom
|
||||||
E.fire_beam(targeted_atom, user)
|
E.fire_beam(targeted_atom, user)
|
||||||
delay = world.time + 10
|
delay = world.time + 10
|
||||||
else if (E.charge < 10)
|
else if (E.charge < 10)
|
||||||
playsound(get_turf(user),'sound/machines/buzz-sigh.ogg', 50, 1)
|
playsound(get_turf(user),'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||||
|
|||||||
@@ -1,328 +1,328 @@
|
|||||||
/obj/machinery/particle_accelerator/control_box
|
/obj/machinery/particle_accelerator/control_box
|
||||||
name = "Particle Accelerator Control Console"
|
name = "Particle Accelerator Control Console"
|
||||||
desc = "This controls the density of the particles."
|
desc = "This controls the density of the particles."
|
||||||
icon = 'icons/obj/machines/particle_accelerator.dmi'
|
icon = 'icons/obj/machines/particle_accelerator.dmi'
|
||||||
icon_state = "control_box"
|
icon_state = "control_box"
|
||||||
anchored = 0
|
anchored = 0
|
||||||
density = 1
|
density = 1
|
||||||
use_power = 0
|
use_power = 0
|
||||||
idle_power_usage = 500
|
idle_power_usage = 500
|
||||||
active_power_usage = 10000
|
active_power_usage = 10000
|
||||||
dir = NORTH
|
dir = NORTH
|
||||||
var/strength_upper_limit = 2
|
var/strength_upper_limit = 2
|
||||||
var/interface_control = 1
|
var/interface_control = 1
|
||||||
var/list/obj/structure/particle_accelerator/connected_parts
|
var/list/obj/structure/particle_accelerator/connected_parts
|
||||||
var/assembled = 0
|
var/assembled = 0
|
||||||
var/construction_state = PA_CONSTRUCTION_UNSECURED
|
var/construction_state = PA_CONSTRUCTION_UNSECURED
|
||||||
var/active = 0
|
var/active = 0
|
||||||
var/strength = 0
|
var/strength = 0
|
||||||
var/powered = 0
|
var/powered = 0
|
||||||
mouse_opacity = 2
|
mouse_opacity = 2
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/New()
|
/obj/machinery/particle_accelerator/control_box/New()
|
||||||
wires = new /datum/wires/particle_accelerator/control_box(src)
|
wires = new /datum/wires/particle_accelerator/control_box(src)
|
||||||
connected_parts = list()
|
connected_parts = list()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/Destroy()
|
/obj/machinery/particle_accelerator/control_box/Destroy()
|
||||||
if(active)
|
if(active)
|
||||||
toggle_power()
|
toggle_power()
|
||||||
for(var/CP in connected_parts)
|
for(var/CP in connected_parts)
|
||||||
var/obj/structure/particle_accelerator/part = CP
|
var/obj/structure/particle_accelerator/part = CP
|
||||||
part.master = null
|
part.master = null
|
||||||
connected_parts.Cut()
|
connected_parts.Cut()
|
||||||
qdel(wires)
|
qdel(wires)
|
||||||
wires = null
|
wires = null
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user)
|
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user)
|
||||||
if(construction_state == PA_CONSTRUCTION_COMPLETE)
|
if(construction_state == PA_CONSTRUCTION_COMPLETE)
|
||||||
interact(user)
|
interact(user)
|
||||||
else if(construction_state == PA_CONSTRUCTION_PANEL_OPEN)
|
else if(construction_state == PA_CONSTRUCTION_PANEL_OPEN)
|
||||||
wires.interact(user)
|
wires.interact(user)
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/update_state()
|
/obj/machinery/particle_accelerator/control_box/proc/update_state()
|
||||||
if(construction_state < PA_CONSTRUCTION_COMPLETE)
|
if(construction_state < PA_CONSTRUCTION_COMPLETE)
|
||||||
use_power = 0
|
use_power = 0
|
||||||
assembled = 0
|
assembled = 0
|
||||||
active = 0
|
active = 0
|
||||||
for(var/CP in connected_parts)
|
for(var/CP in connected_parts)
|
||||||
var/obj/structure/particle_accelerator/part = CP
|
var/obj/structure/particle_accelerator/part = CP
|
||||||
part.strength = null
|
part.strength = null
|
||||||
part.powered = 0
|
part.powered = 0
|
||||||
part.update_icon()
|
part.update_icon()
|
||||||
connected_parts.Cut()
|
connected_parts.Cut()
|
||||||
return
|
return
|
||||||
if(!part_scan())
|
if(!part_scan())
|
||||||
use_power = 1
|
use_power = 1
|
||||||
active = 0
|
active = 0
|
||||||
connected_parts.Cut()
|
connected_parts.Cut()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/update_icon()
|
/obj/machinery/particle_accelerator/control_box/update_icon()
|
||||||
if(active)
|
if(active)
|
||||||
icon_state = "control_boxp1"
|
icon_state = "control_boxp1"
|
||||||
else
|
else
|
||||||
if(use_power)
|
if(use_power)
|
||||||
if(assembled)
|
if(assembled)
|
||||||
icon_state = "control_boxp"
|
icon_state = "control_boxp"
|
||||||
else
|
else
|
||||||
icon_state = "ucontrol_boxp"
|
icon_state = "ucontrol_boxp"
|
||||||
else
|
else
|
||||||
switch(construction_state)
|
switch(construction_state)
|
||||||
if(PA_CONSTRUCTION_UNSECURED, PA_CONSTRUCTION_UNWIRED)
|
if(PA_CONSTRUCTION_UNSECURED, PA_CONSTRUCTION_UNWIRED)
|
||||||
icon_state = "control_box"
|
icon_state = "control_box"
|
||||||
if(PA_CONSTRUCTION_PANEL_OPEN)
|
if(PA_CONSTRUCTION_PANEL_OPEN)
|
||||||
icon_state = "control_boxw"
|
icon_state = "control_boxw"
|
||||||
else
|
else
|
||||||
icon_state = "control_boxc"
|
icon_state = "control_boxc"
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/Topic(href, href_list)
|
/obj/machinery/particle_accelerator/control_box/Topic(href, href_list)
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!interface_control)
|
if(!interface_control)
|
||||||
to_chat(usr, "<span class='error'>ERROR: Request timed out. Check wire contacts.</span>")
|
to_chat(usr, "<span class='error'>ERROR: Request timed out. Check wire contacts.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(href_list["close"])
|
if(href_list["close"])
|
||||||
usr << browse(null, "window=pacontrol")
|
usr << browse(null, "window=pacontrol")
|
||||||
usr.unset_machine()
|
usr.unset_machine()
|
||||||
return
|
return
|
||||||
if(href_list["togglep"])
|
if(href_list["togglep"])
|
||||||
if(!wires.is_cut(WIRE_POWER))
|
if(!wires.is_cut(WIRE_POWER))
|
||||||
toggle_power()
|
toggle_power()
|
||||||
|
|
||||||
else if(href_list["scan"])
|
else if(href_list["scan"])
|
||||||
part_scan()
|
part_scan()
|
||||||
|
|
||||||
else if(href_list["strengthup"])
|
else if(href_list["strengthup"])
|
||||||
if(!wires.is_cut(WIRE_STRENGTH))
|
if(!wires.is_cut(WIRE_STRENGTH))
|
||||||
add_strength()
|
add_strength()
|
||||||
|
|
||||||
else if(href_list["strengthdown"])
|
else if(href_list["strengthdown"])
|
||||||
if(!wires.is_cut(WIRE_STRENGTH))
|
if(!wires.is_cut(WIRE_STRENGTH))
|
||||||
remove_strength()
|
remove_strength()
|
||||||
|
|
||||||
updateDialog()
|
updateDialog()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/strength_change()
|
/obj/machinery/particle_accelerator/control_box/proc/strength_change()
|
||||||
for(var/CP in connected_parts)
|
for(var/CP in connected_parts)
|
||||||
var/obj/structure/particle_accelerator/part = CP
|
var/obj/structure/particle_accelerator/part = CP
|
||||||
part.strength = strength
|
part.strength = strength
|
||||||
part.update_icon()
|
part.update_icon()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/add_strength(s)
|
/obj/machinery/particle_accelerator/control_box/proc/add_strength(s)
|
||||||
if(assembled && (strength < strength_upper_limit))
|
if(assembled && (strength < strength_upper_limit))
|
||||||
strength++
|
strength++
|
||||||
strength_change()
|
strength_change()
|
||||||
|
|
||||||
message_admins("PA Control Computer increased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_COORDJMP(src)]",0,1)
|
message_admins("PA Control Computer increased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_COORDJMP(src)]",0,1)
|
||||||
log_game("PA Control Computer increased to [strength] by [key_name(usr)] in [COORD(src)]")
|
log_game("PA Control Computer increased to [strength] by [key_name(usr)] in [COORD(src)]")
|
||||||
investigate_log("increased to <font color='red'>[strength]</font> by [key_name(usr)]","singulo")
|
investigate_log("increased to <font color='red'>[strength]</font> by [key_name(usr)]","singulo")
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/remove_strength(s)
|
/obj/machinery/particle_accelerator/control_box/proc/remove_strength(s)
|
||||||
if(assembled && (strength > 0))
|
if(assembled && (strength > 0))
|
||||||
strength--
|
strength--
|
||||||
strength_change()
|
strength_change()
|
||||||
|
|
||||||
message_admins("PA Control Computer decreased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_COORDJMP(src)]",0,1)
|
message_admins("PA Control Computer decreased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_COORDJMP(src)]",0,1)
|
||||||
log_game("PA Control Computer decreased to [strength] by [key_name(usr)] in [COORD(src)]")
|
log_game("PA Control Computer decreased to [strength] by [key_name(usr)] in [COORD(src)]")
|
||||||
investigate_log("decreased to <font color='green'>[strength]</font> by [key_name(usr)]","singulo")
|
investigate_log("decreased to <font color='green'>[strength]</font> by [key_name(usr)]","singulo")
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/power_change()
|
/obj/machinery/particle_accelerator/control_box/power_change()
|
||||||
..()
|
..()
|
||||||
if(stat & NOPOWER)
|
if(stat & NOPOWER)
|
||||||
active = 0
|
active = 0
|
||||||
use_power = 0
|
use_power = 0
|
||||||
else if(!stat && construction_state == PA_CONSTRUCTION_COMPLETE)
|
else if(!stat && construction_state == PA_CONSTRUCTION_COMPLETE)
|
||||||
use_power = 1
|
use_power = 1
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/process()
|
/obj/machinery/particle_accelerator/control_box/process()
|
||||||
if(active)
|
if(active)
|
||||||
//a part is missing!
|
//a part is missing!
|
||||||
if(connected_parts.len < 6)
|
if(connected_parts.len < 6)
|
||||||
investigate_log("lost a connected part; It <font color='red'>powered down</font>.","singulo")
|
investigate_log("lost a connected part; It <font color='red'>powered down</font>.","singulo")
|
||||||
toggle_power()
|
toggle_power()
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
//emit some particles
|
//emit some particles
|
||||||
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
|
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
|
||||||
PE.emit_particle(strength)
|
PE.emit_particle(strength)
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/part_scan()
|
/obj/machinery/particle_accelerator/control_box/proc/part_scan()
|
||||||
var/ldir = turn(dir,-90)
|
var/ldir = turn(dir,-90)
|
||||||
var/rdir = turn(dir,90)
|
var/rdir = turn(dir,90)
|
||||||
var/odir = turn(dir,180)
|
var/odir = turn(dir,180)
|
||||||
var/turf/T = loc
|
var/turf/T = loc
|
||||||
|
|
||||||
assembled = 0
|
assembled = 0
|
||||||
critical_machine = FALSE
|
critical_machine = FALSE
|
||||||
|
|
||||||
var/obj/structure/particle_accelerator/fuel_chamber/F = locate() in orange(1,src)
|
var/obj/structure/particle_accelerator/fuel_chamber/F = locate() in orange(1,src)
|
||||||
if(!F)
|
if(!F)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
setDir(F.dir)
|
setDir(F.dir)
|
||||||
connected_parts.Cut()
|
connected_parts.Cut()
|
||||||
|
|
||||||
T = get_step(T,rdir)
|
T = get_step(T,rdir)
|
||||||
if(!check_part(T,/obj/structure/particle_accelerator/fuel_chamber))
|
if(!check_part(T,/obj/structure/particle_accelerator/fuel_chamber))
|
||||||
return 0
|
return 0
|
||||||
T = get_step(T,odir)
|
T = get_step(T,odir)
|
||||||
if(!check_part(T,/obj/structure/particle_accelerator/end_cap))
|
if(!check_part(T,/obj/structure/particle_accelerator/end_cap))
|
||||||
return 0
|
return 0
|
||||||
T = get_step(T,dir)
|
T = get_step(T,dir)
|
||||||
T = get_step(T,dir)
|
T = get_step(T,dir)
|
||||||
if(!check_part(T,/obj/structure/particle_accelerator/power_box))
|
if(!check_part(T,/obj/structure/particle_accelerator/power_box))
|
||||||
return 0
|
return 0
|
||||||
T = get_step(T,dir)
|
T = get_step(T,dir)
|
||||||
if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/center))
|
if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/center))
|
||||||
return 0
|
return 0
|
||||||
T = get_step(T,ldir)
|
T = get_step(T,ldir)
|
||||||
if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/left))
|
if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/left))
|
||||||
return 0
|
return 0
|
||||||
T = get_step(T,rdir)
|
T = get_step(T,rdir)
|
||||||
T = get_step(T,rdir)
|
T = get_step(T,rdir)
|
||||||
if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/right))
|
if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/right))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
assembled = 1
|
assembled = 1
|
||||||
critical_machine = TRUE //Only counts if the PA is actually assembled.
|
critical_machine = TRUE //Only counts if the PA is actually assembled.
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/check_part(turf/T, type)
|
/obj/machinery/particle_accelerator/control_box/proc/check_part(turf/T, type)
|
||||||
var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T
|
var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T
|
||||||
if(istype(PA, type) && (PA.construction_state == PA_CONSTRUCTION_COMPLETE))
|
if(istype(PA, type) && (PA.construction_state == PA_CONSTRUCTION_COMPLETE))
|
||||||
if(PA.connect_master(src))
|
if(PA.connect_master(src))
|
||||||
connected_parts.Add(PA)
|
connected_parts.Add(PA)
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
|
/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
|
||||||
active = !active
|
active = !active
|
||||||
investigate_log("turned [active?"<font color='green'>ON</font>":"<font color='red'>OFF</font>"] by [usr ? key_name(usr) : "outside forces"]","singulo")
|
investigate_log("turned [active?"<font color='green'>ON</font>":"<font color='red'>OFF</font>"] by [usr ? key_name(usr) : "outside forces"]","singulo")
|
||||||
message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name_admin(usr) : "outside forces"](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name_admin(usr) : "outside forces"](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||||
log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] in ([x],[y],[z])")
|
log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] in ([x],[y],[z])")
|
||||||
if(active)
|
if(active)
|
||||||
use_power = 2
|
use_power = 2
|
||||||
for(var/CP in connected_parts)
|
for(var/CP in connected_parts)
|
||||||
var/obj/structure/particle_accelerator/part = CP
|
var/obj/structure/particle_accelerator/part = CP
|
||||||
part.strength = strength
|
part.strength = strength
|
||||||
part.powered = 1
|
part.powered = 1
|
||||||
part.update_icon()
|
part.update_icon()
|
||||||
else
|
else
|
||||||
use_power = 1
|
use_power = 1
|
||||||
for(var/CP in connected_parts)
|
for(var/CP in connected_parts)
|
||||||
var/obj/structure/particle_accelerator/part = CP
|
var/obj/structure/particle_accelerator/part = CP
|
||||||
part.strength = null
|
part.strength = null
|
||||||
part.powered = 0
|
part.powered = 0
|
||||||
part.update_icon()
|
part.update_icon()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/interact(mob/user)
|
/obj/machinery/particle_accelerator/control_box/interact(mob/user)
|
||||||
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
||||||
if(!issilicon(user))
|
if(!issilicon(user))
|
||||||
user.unset_machine()
|
user.unset_machine()
|
||||||
user << browse(null, "window=pacontrol")
|
user << browse(null, "window=pacontrol")
|
||||||
return
|
return
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
|
|
||||||
var/dat = ""
|
var/dat = ""
|
||||||
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR><BR>"
|
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR><BR>"
|
||||||
dat += "<h3>Status</h3>"
|
dat += "<h3>Status</h3>"
|
||||||
if(!assembled)
|
if(!assembled)
|
||||||
dat += "Unable to detect all parts!<BR>"
|
dat += "Unable to detect all parts!<BR>"
|
||||||
dat += "<A href='?src=\ref[src];scan=1'>Run Scan</A><BR><BR>"
|
dat += "<A href='?src=\ref[src];scan=1'>Run Scan</A><BR><BR>"
|
||||||
else
|
else
|
||||||
dat += "All parts in place.<BR><BR>"
|
dat += "All parts in place.<BR><BR>"
|
||||||
dat += "Power:"
|
dat += "Power:"
|
||||||
if(active)
|
if(active)
|
||||||
dat += "On<BR>"
|
dat += "On<BR>"
|
||||||
else
|
else
|
||||||
dat += "Off <BR>"
|
dat += "Off <BR>"
|
||||||
dat += "<A href='?src=\ref[src];togglep=1'>Toggle Power</A><BR><BR>"
|
dat += "<A href='?src=\ref[src];togglep=1'>Toggle Power</A><BR><BR>"
|
||||||
dat += "Particle Strength: [strength] "
|
dat += "Particle Strength: [strength] "
|
||||||
dat += "<A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
dat += "<A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
||||||
|
|
||||||
var/datum/browser/popup = new(user, "pacontrol", name, 420, 300)
|
var/datum/browser/popup = new(user, "pacontrol", name, 420, 300)
|
||||||
popup.set_content(dat)
|
popup.set_content(dat)
|
||||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||||
popup.open()
|
popup.open()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/examine(mob/user)
|
/obj/machinery/particle_accelerator/control_box/examine(mob/user)
|
||||||
..()
|
..()
|
||||||
switch(construction_state)
|
switch(construction_state)
|
||||||
if(PA_CONSTRUCTION_UNSECURED)
|
if(PA_CONSTRUCTION_UNSECURED)
|
||||||
to_chat(user, "Looks like it's not attached to the flooring")
|
to_chat(user, "Looks like it's not attached to the flooring")
|
||||||
if(PA_CONSTRUCTION_UNWIRED)
|
if(PA_CONSTRUCTION_UNWIRED)
|
||||||
to_chat(user, "It is missing some cables")
|
to_chat(user, "It is missing some cables")
|
||||||
if(PA_CONSTRUCTION_PANEL_OPEN)
|
if(PA_CONSTRUCTION_PANEL_OPEN)
|
||||||
to_chat(user, "The panel is open")
|
to_chat(user, "The panel is open")
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/attackby(obj/item/W, mob/user, params)
|
/obj/machinery/particle_accelerator/control_box/attackby(obj/item/W, mob/user, params)
|
||||||
var/did_something = FALSE
|
var/did_something = FALSE
|
||||||
|
|
||||||
switch(construction_state)
|
switch(construction_state)
|
||||||
if(PA_CONSTRUCTION_UNSECURED)
|
if(PA_CONSTRUCTION_UNSECURED)
|
||||||
if(istype(W, /obj/item/weapon/wrench) && !isinspace())
|
if(istype(W, /obj/item/weapon/wrench) && !isinspace())
|
||||||
playsound(loc, W.usesound, 75, 1)
|
playsound(loc, W.usesound, 75, 1)
|
||||||
anchored = 1
|
anchored = 1
|
||||||
user.visible_message("[user.name] secures the [name] to the floor.", \
|
user.visible_message("[user.name] secures the [name] to the floor.", \
|
||||||
"You secure the external bolts.")
|
"You secure the external bolts.")
|
||||||
construction_state = PA_CONSTRUCTION_UNWIRED
|
construction_state = PA_CONSTRUCTION_UNWIRED
|
||||||
did_something = TRUE
|
did_something = TRUE
|
||||||
if(PA_CONSTRUCTION_UNWIRED)
|
if(PA_CONSTRUCTION_UNWIRED)
|
||||||
if(istype(W, /obj/item/weapon/wrench))
|
if(istype(W, /obj/item/weapon/wrench))
|
||||||
playsound(loc, W.usesound, 75, 1)
|
playsound(loc, W.usesound, 75, 1)
|
||||||
anchored = 0
|
anchored = 0
|
||||||
user.visible_message("[user.name] detaches the [name] from the floor.", \
|
user.visible_message("[user.name] detaches the [name] from the floor.", \
|
||||||
"You remove the external bolts.")
|
"You remove the external bolts.")
|
||||||
construction_state = PA_CONSTRUCTION_UNSECURED
|
construction_state = PA_CONSTRUCTION_UNSECURED
|
||||||
did_something = TRUE
|
did_something = TRUE
|
||||||
else if(istype(W, /obj/item/stack/cable_coil))
|
else if(istype(W, /obj/item/stack/cable_coil))
|
||||||
var/obj/item/stack/cable_coil/CC = W
|
var/obj/item/stack/cable_coil/CC = W
|
||||||
if(CC.use(1))
|
if(CC.use(1))
|
||||||
user.visible_message("[user.name] adds wires to the [name].", \
|
user.visible_message("[user.name] adds wires to the [name].", \
|
||||||
"You add some wires.")
|
"You add some wires.")
|
||||||
construction_state = PA_CONSTRUCTION_PANEL_OPEN
|
construction_state = PA_CONSTRUCTION_PANEL_OPEN
|
||||||
did_something = TRUE
|
did_something = TRUE
|
||||||
if(PA_CONSTRUCTION_PANEL_OPEN)
|
if(PA_CONSTRUCTION_PANEL_OPEN)
|
||||||
if(istype(W, /obj/item/weapon/wirecutters))//TODO:Shock user if its on?
|
if(istype(W, /obj/item/weapon/wirecutters))//TODO:Shock user if its on?
|
||||||
user.visible_message("[user.name] removes some wires from the [name].", \
|
user.visible_message("[user.name] removes some wires from the [name].", \
|
||||||
"You remove some wires.")
|
"You remove some wires.")
|
||||||
construction_state = PA_CONSTRUCTION_UNWIRED
|
construction_state = PA_CONSTRUCTION_UNWIRED
|
||||||
did_something = TRUE
|
did_something = TRUE
|
||||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||||
user.visible_message("[user.name] closes the [name]'s access panel.", \
|
user.visible_message("[user.name] closes the [name]'s access panel.", \
|
||||||
"You close the access panel.")
|
"You close the access panel.")
|
||||||
construction_state = PA_CONSTRUCTION_COMPLETE
|
construction_state = PA_CONSTRUCTION_COMPLETE
|
||||||
did_something = TRUE
|
did_something = TRUE
|
||||||
if(PA_CONSTRUCTION_COMPLETE)
|
if(PA_CONSTRUCTION_COMPLETE)
|
||||||
if(istype(W, /obj/item/weapon/screwdriver))
|
if(istype(W, /obj/item/weapon/screwdriver))
|
||||||
user.visible_message("[user.name] opens the [name]'s access panel.", \
|
user.visible_message("[user.name] opens the [name]'s access panel.", \
|
||||||
"You open the access panel.")
|
"You open the access panel.")
|
||||||
construction_state = PA_CONSTRUCTION_PANEL_OPEN
|
construction_state = PA_CONSTRUCTION_PANEL_OPEN
|
||||||
did_something = TRUE
|
did_something = TRUE
|
||||||
|
|
||||||
if(did_something)
|
if(did_something)
|
||||||
user.changeNext_move(CLICK_CD_MELEE)
|
user.changeNext_move(CLICK_CD_MELEE)
|
||||||
update_state()
|
update_state()
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B)
|
/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B)
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
#undef PA_CONSTRUCTION_UNSECURED
|
#undef PA_CONSTRUCTION_UNSECURED
|
||||||
#undef PA_CONSTRUCTION_UNWIRED
|
#undef PA_CONSTRUCTION_UNWIRED
|
||||||
#undef PA_CONSTRUCTION_PANEL_OPEN
|
#undef PA_CONSTRUCTION_PANEL_OPEN
|
||||||
#undef PA_CONSTRUCTION_COMPLETE
|
#undef PA_CONSTRUCTION_COMPLETE
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy
|
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy
|
||||||
|
|
||||||
/obj/item/ammo_casing/energy/chameleon
|
/obj/item/ammo_casing/energy/chameleon
|
||||||
|
projectile_type = /obj/item/projectile/energy/chameleon
|
||||||
e_cost = 0
|
e_cost = 0
|
||||||
var/list/projectile_vars = list()
|
var/list/projectile_vars = list()
|
||||||
|
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
name = "dart"
|
name = "dart"
|
||||||
icon_state = "cbbolt"
|
icon_state = "cbbolt"
|
||||||
damage = 6
|
damage = 6
|
||||||
var/piercing = FALSE
|
var/piercing = FALSE
|
||||||
|
|
||||||
/obj/item/projectile/bullet/dart/New()
|
/obj/item/projectile/bullet/dart/New()
|
||||||
..()
|
..()
|
||||||
@@ -201,15 +201,15 @@
|
|||||||
if(iscarbon(target))
|
if(iscarbon(target))
|
||||||
var/mob/living/carbon/M = target
|
var/mob/living/carbon/M = target
|
||||||
if(blocked != 100) // not completely blocked
|
if(blocked != 100) // not completely blocked
|
||||||
if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
|
if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
|
||||||
..()
|
..()
|
||||||
reagents.reaction(M, INJECT)
|
reagents.reaction(M, INJECT)
|
||||||
reagents.trans_to(M, reagents.total_volume)
|
reagents.trans_to(M, reagents.total_volume)
|
||||||
return TRUE
|
return TRUE
|
||||||
else
|
else
|
||||||
blocked = 100
|
blocked = 100
|
||||||
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
||||||
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
||||||
|
|
||||||
..(target, blocked)
|
..(target, blocked)
|
||||||
reagents.set_reacting(TRUE)
|
reagents.set_reacting(TRUE)
|
||||||
@@ -240,28 +240,28 @@
|
|||||||
nodamage = 1
|
nodamage = 1
|
||||||
. = ..() // Execute the rest of the code.
|
. = ..() // Execute the rest of the code.
|
||||||
|
|
||||||
/obj/item/projectile/bullet/dnainjector
|
/obj/item/projectile/bullet/dnainjector
|
||||||
name = "\improper DNA injector"
|
name = "\improper DNA injector"
|
||||||
icon_state = "syringeproj"
|
icon_state = "syringeproj"
|
||||||
var/obj/item/weapon/dnainjector/injector
|
var/obj/item/weapon/dnainjector/injector
|
||||||
|
|
||||||
/obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = 0)
|
/obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = 0)
|
||||||
if(iscarbon(target))
|
if(iscarbon(target))
|
||||||
var/mob/living/carbon/M = target
|
var/mob/living/carbon/M = target
|
||||||
if(blocked != 100)
|
if(blocked != 100)
|
||||||
if(M.can_inject(null, FALSE, def_zone, FALSE))
|
if(M.can_inject(null, FALSE, def_zone, FALSE))
|
||||||
if(injector.inject(M, firer))
|
if(injector.inject(M, firer))
|
||||||
QDEL_NULL(injector)
|
QDEL_NULL(injector)
|
||||||
return TRUE
|
return TRUE
|
||||||
else
|
else
|
||||||
blocked = 100
|
blocked = 100
|
||||||
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
||||||
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/projectile/bullet/dnainjector/Destroy()
|
/obj/item/projectile/bullet/dnainjector/Destroy()
|
||||||
QDEL_NULL(injector)
|
QDEL_NULL(injector)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
//// SNIPER BULLETS
|
//// SNIPER BULLETS
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
damage_type = BURN
|
damage_type = BURN
|
||||||
flag = "energy"
|
flag = "energy"
|
||||||
|
|
||||||
|
/obj/item/projectile/energy/chameleon
|
||||||
|
nodamage = TRUE
|
||||||
|
|
||||||
/obj/item/projectile/energy/electrode
|
/obj/item/projectile/energy/electrode
|
||||||
name = "electrode"
|
name = "electrode"
|
||||||
|
|||||||
0
code/modules/reagents/chemistry/reagents/food_reagents.dm
Executable file → Normal file
0
code/modules/reagents/chemistry/reagents/food_reagents.dm
Executable file → Normal file
0
code/modules/reagents/reagent_containers/glass.dm
Executable file → Normal file
0
code/modules/reagents/reagent_containers/glass.dm
Executable file → Normal file
@@ -1,239 +1,239 @@
|
|||||||
/obj/item/weapon/reagent_containers/spray
|
/obj/item/weapon/reagent_containers/spray
|
||||||
name = "spray bottle"
|
name = "spray bottle"
|
||||||
desc = "A spray bottle, with an unscrewable top."
|
desc = "A spray bottle, with an unscrewable top."
|
||||||
icon = 'icons/obj/janitor.dmi'
|
icon = 'icons/obj/janitor.dmi'
|
||||||
icon_state = "cleaner"
|
icon_state = "cleaner"
|
||||||
item_state = "cleaner"
|
item_state = "cleaner"
|
||||||
flags = NOBLUDGEON
|
flags = NOBLUDGEON
|
||||||
container_type = OPENCONTAINER
|
container_type = OPENCONTAINER
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
w_class = WEIGHT_CLASS_SMALL
|
w_class = WEIGHT_CLASS_SMALL
|
||||||
throw_speed = 3
|
throw_speed = 3
|
||||||
throw_range = 7
|
throw_range = 7
|
||||||
var/stream_mode = 0 //whether we use the more focused mode
|
var/stream_mode = 0 //whether we use the more focused mode
|
||||||
var/current_range = 3 //the range of tiles the sprayer will reach.
|
var/current_range = 3 //the range of tiles the sprayer will reach.
|
||||||
var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode.
|
var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode.
|
||||||
var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode.
|
var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode.
|
||||||
var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
|
var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
|
||||||
amount_per_transfer_from_this = 5
|
amount_per_transfer_from_this = 5
|
||||||
volume = 250
|
volume = 250
|
||||||
possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
|
possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user)
|
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user)
|
||||||
if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics))
|
if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution
|
if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution
|
||||||
if(!A.reagents.total_volume && A.reagents)
|
if(!A.reagents.total_volume && A.reagents)
|
||||||
to_chat(user, "<span class='notice'>\The [A] is empty.</span>")
|
to_chat(user, "<span class='notice'>\The [A] is empty.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(reagents.total_volume >= reagents.maximum_volume)
|
if(reagents.total_volume >= reagents.maximum_volume)
|
||||||
to_chat(user, "<span class='notice'>\The [src] is full.</span>")
|
to_chat(user, "<span class='notice'>\The [src] is full.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
var/trans = A.reagents.trans_to(src, 50) //transfer 50u , using the spray's transfer amount would take too long to refill
|
var/trans = A.reagents.trans_to(src, 50) //transfer 50u , using the spray's transfer amount would take too long to refill
|
||||||
to_chat(user, "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [A].</span>")
|
to_chat(user, "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [A].</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
if(reagents.total_volume < amount_per_transfer_from_this)
|
if(reagents.total_volume < amount_per_transfer_from_this)
|
||||||
to_chat(user, "<span class='warning'>\The [src] is empty!</span>")
|
to_chat(user, "<span class='warning'>\The [src] is empty!</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
spray(A)
|
spray(A)
|
||||||
|
|
||||||
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
|
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||||
user.changeNext_move(CLICK_CD_RANGE*2)
|
user.changeNext_move(CLICK_CD_RANGE*2)
|
||||||
user.newtonian_move(get_dir(A, user))
|
user.newtonian_move(get_dir(A, user))
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
var/area/area = get_area(src)
|
var/area/area = get_area(src)
|
||||||
if(reagents.has_reagent("sacid"))
|
if(reagents.has_reagent("sacid"))
|
||||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired sulphuric acid from \a [src] at [area] [ADMIN_COORDJMP(T)].")
|
message_admins("[ADMIN_LOOKUPFLW(user)] fired sulphuric acid from \a [src] at [area] [ADMIN_COORDJMP(T)].")
|
||||||
log_game("[key_name(user)] fired sulphuric acid from \a [src] at [area] ([T.x], [T.y], [T.z]).")
|
log_game("[key_name(user)] fired sulphuric acid from \a [src] at [area] ([T.x], [T.y], [T.z]).")
|
||||||
if(reagents.has_reagent("facid"))
|
if(reagents.has_reagent("facid"))
|
||||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired Fluacid from \a [src] at [area] [ADMIN_COORDJMP(T)].")
|
message_admins("[ADMIN_LOOKUPFLW(user)] fired Fluacid from \a [src] at [area] [ADMIN_COORDJMP(T)].")
|
||||||
log_game("[key_name(user)] fired Fluacid from \a [src] at [area] [COORD(T)].")
|
log_game("[key_name(user)] fired Fluacid from \a [src] at [area] [COORD(T)].")
|
||||||
if(reagents.has_reagent("lube"))
|
if(reagents.has_reagent("lube"))
|
||||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired Space lube from \a [src] at [area] [ADMIN_COORDJMP(T)].")
|
message_admins("[ADMIN_LOOKUPFLW(user)] fired Space lube from \a [src] at [area] [ADMIN_COORDJMP(T)].")
|
||||||
log_game("[key_name(user)] fired Space lube from \a [src] at [area] [COORD(T)].")
|
log_game("[key_name(user)] fired Space lube from \a [src] at [area] [COORD(T)].")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/proc/spray(atom/A)
|
/obj/item/weapon/reagent_containers/spray/proc/spray(atom/A)
|
||||||
var/range = max(min(current_range, get_dist(src, A)), 1)
|
var/range = max(min(current_range, get_dist(src, A)), 1)
|
||||||
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
|
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
|
||||||
D.create_reagents(amount_per_transfer_from_this)
|
D.create_reagents(amount_per_transfer_from_this)
|
||||||
var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
|
var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
|
||||||
if(stream_mode)
|
if(stream_mode)
|
||||||
reagents.trans_to(D, amount_per_transfer_from_this)
|
reagents.trans_to(D, amount_per_transfer_from_this)
|
||||||
puff_reagent_left = 1
|
puff_reagent_left = 1
|
||||||
else
|
else
|
||||||
reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
|
reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
|
||||||
D.color = mix_color_from_reagents(D.reagents.reagent_list)
|
D.color = mix_color_from_reagents(D.reagents.reagent_list)
|
||||||
var/wait_step = max(round(2+3/range), 2)
|
var/wait_step = max(round(2+3/range), 2)
|
||||||
spawn(0)
|
spawn(0)
|
||||||
var/range_left = range
|
var/range_left = range
|
||||||
for(var/i=0, i<range, i++)
|
for(var/i=0, i<range, i++)
|
||||||
range_left--
|
range_left--
|
||||||
step_towards(D,A)
|
step_towards(D,A)
|
||||||
sleep(wait_step)
|
sleep(wait_step)
|
||||||
|
|
||||||
for(var/atom/T in get_turf(D))
|
for(var/atom/T in get_turf(D))
|
||||||
if(T == D || T.invisibility) //we ignore the puff itself and stuff below the floor
|
if(T == D || T.invisibility) //we ignore the puff itself and stuff below the floor
|
||||||
continue
|
continue
|
||||||
if(puff_reagent_left <= 0)
|
if(puff_reagent_left <= 0)
|
||||||
break
|
break
|
||||||
|
|
||||||
if(stream_mode)
|
if(stream_mode)
|
||||||
if(ismob(T))
|
if(ismob(T))
|
||||||
var/mob/M = T
|
var/mob/M = T
|
||||||
if(!M.lying || !range_left)
|
if(!M.lying || !range_left)
|
||||||
D.reagents.reaction(M, VAPOR)
|
D.reagents.reaction(M, VAPOR)
|
||||||
puff_reagent_left -= 1
|
puff_reagent_left -= 1
|
||||||
else if(!range_left)
|
else if(!range_left)
|
||||||
D.reagents.reaction(T, VAPOR)
|
D.reagents.reaction(T, VAPOR)
|
||||||
else
|
else
|
||||||
D.reagents.reaction(T, VAPOR)
|
D.reagents.reaction(T, VAPOR)
|
||||||
if(ismob(T))
|
if(ismob(T))
|
||||||
puff_reagent_left -= 1
|
puff_reagent_left -= 1
|
||||||
|
|
||||||
if(puff_reagent_left > 0 && (!stream_mode || !range_left))
|
if(puff_reagent_left > 0 && (!stream_mode || !range_left))
|
||||||
D.reagents.reaction(get_turf(D), VAPOR)
|
D.reagents.reaction(get_turf(D), VAPOR)
|
||||||
puff_reagent_left -= 1
|
puff_reagent_left -= 1
|
||||||
|
|
||||||
if(puff_reagent_left <= 0) // we used all the puff so we delete it.
|
if(puff_reagent_left <= 0) // we used all the puff so we delete it.
|
||||||
qdel(D)
|
qdel(D)
|
||||||
return
|
return
|
||||||
qdel(D)
|
qdel(D)
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/attack_self(mob/user)
|
/obj/item/weapon/reagent_containers/spray/attack_self(mob/user)
|
||||||
stream_mode = !stream_mode
|
stream_mode = !stream_mode
|
||||||
if(stream_mode)
|
if(stream_mode)
|
||||||
amount_per_transfer_from_this = stream_amount
|
amount_per_transfer_from_this = stream_amount
|
||||||
current_range = stream_range
|
current_range = stream_range
|
||||||
else
|
else
|
||||||
amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
|
amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
|
||||||
current_range = spray_range
|
current_range = spray_range
|
||||||
to_chat(user, "<span class='notice'>You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.</span>")
|
to_chat(user, "<span class='notice'>You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.</span>")
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/verb/empty()
|
/obj/item/weapon/reagent_containers/spray/verb/empty()
|
||||||
set name = "Empty Spray Bottle"
|
set name = "Empty Spray Bottle"
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
set src in usr
|
set src in usr
|
||||||
if(usr.incapacitated())
|
if(usr.incapacitated())
|
||||||
return
|
return
|
||||||
if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes")
|
if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes")
|
||||||
return
|
return
|
||||||
if(isturf(usr.loc) && src.loc == usr)
|
if(isturf(usr.loc) && src.loc == usr)
|
||||||
to_chat(usr, "<span class='notice'>You empty \the [src] onto the floor.</span>")
|
to_chat(usr, "<span class='notice'>You empty \the [src] onto the floor.</span>")
|
||||||
reagents.reaction(usr.loc)
|
reagents.reaction(usr.loc)
|
||||||
src.reagents.clear_reagents()
|
src.reagents.clear_reagents()
|
||||||
|
|
||||||
//space cleaner
|
//space cleaner
|
||||||
/obj/item/weapon/reagent_containers/spray/cleaner
|
/obj/item/weapon/reagent_containers/spray/cleaner
|
||||||
name = "space cleaner"
|
name = "space cleaner"
|
||||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||||
list_reagents = list("cleaner" = 250)
|
list_reagents = list("cleaner" = 250)
|
||||||
|
|
||||||
//spray tan
|
//spray tan
|
||||||
/obj/item/weapon/reagent_containers/spray/spraytan
|
/obj/item/weapon/reagent_containers/spray/spraytan
|
||||||
name = "spray tan"
|
name = "spray tan"
|
||||||
volume = 50
|
volume = 50
|
||||||
desc = "Gyaro brand spray tan. Do not spray near eyes or other orifices."
|
desc = "Gyaro brand spray tan. Do not spray near eyes or other orifices."
|
||||||
list_reagents = list("spraytan" = 50)
|
list_reagents = list("spraytan" = 50)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/medical
|
/obj/item/weapon/reagent_containers/spray/medical
|
||||||
name = "medical spray"
|
name = "medical spray"
|
||||||
icon = 'icons/obj/chemical.dmi'
|
icon = 'icons/obj/chemical.dmi'
|
||||||
icon_state = "medspray"
|
icon_state = "medspray"
|
||||||
volume = 100
|
volume = 100
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/medical/sterilizer
|
/obj/item/weapon/reagent_containers/spray/medical/sterilizer
|
||||||
name = "sterilizer spray"
|
name = "sterilizer spray"
|
||||||
desc = "Spray bottle loaded with non-toxic sterilizer. Useful in preparation for surgery."
|
desc = "Spray bottle loaded with non-toxic sterilizer. Useful in preparation for surgery."
|
||||||
list_reagents = list("sterilizine" = 100)
|
list_reagents = list("sterilizine" = 100)
|
||||||
|
|
||||||
|
|
||||||
//pepperspray
|
//pepperspray
|
||||||
/obj/item/weapon/reagent_containers/spray/pepper
|
/obj/item/weapon/reagent_containers/spray/pepper
|
||||||
name = "pepperspray"
|
name = "pepperspray"
|
||||||
desc = "Manufactured by UhangInc, used to blind and down an opponent quickly."
|
desc = "Manufactured by UhangInc, used to blind and down an opponent quickly."
|
||||||
icon = 'icons/obj/weapons.dmi'
|
icon = 'icons/obj/weapons.dmi'
|
||||||
icon_state = "pepperspray"
|
icon_state = "pepperspray"
|
||||||
item_state = "pepperspray"
|
item_state = "pepperspray"
|
||||||
volume = 40
|
volume = 40
|
||||||
stream_range = 4
|
stream_range = 4
|
||||||
amount_per_transfer_from_this = 5
|
amount_per_transfer_from_this = 5
|
||||||
list_reagents = list("condensedcapsaicin" = 40)
|
list_reagents = list("condensedcapsaicin" = 40)
|
||||||
|
|
||||||
// Fix pepperspraying yourself
|
// Fix pepperspraying yourself
|
||||||
/obj/item/weapon/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user)
|
/obj/item/weapon/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user)
|
||||||
if (A.loc == user)
|
if (A.loc == user)
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
//water flower
|
//water flower
|
||||||
/obj/item/weapon/reagent_containers/spray/waterflower
|
/obj/item/weapon/reagent_containers/spray/waterflower
|
||||||
name = "water flower"
|
name = "water flower"
|
||||||
desc = "A seemingly innocent sunflower...with a twist."
|
desc = "A seemingly innocent sunflower...with a twist."
|
||||||
icon = 'icons/obj/hydroponics/harvest.dmi'
|
icon = 'icons/obj/hydroponics/harvest.dmi'
|
||||||
icon_state = "sunflower"
|
icon_state = "sunflower"
|
||||||
item_state = "sunflower"
|
item_state = "sunflower"
|
||||||
amount_per_transfer_from_this = 1
|
amount_per_transfer_from_this = 1
|
||||||
volume = 10
|
volume = 10
|
||||||
list_reagents = list("water" = 10)
|
list_reagents = list("water" = 10)
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
|
/obj/item/weapon/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
|
||||||
return
|
return
|
||||||
|
|
||||||
//chemsprayer
|
//chemsprayer
|
||||||
/obj/item/weapon/reagent_containers/spray/chemsprayer
|
/obj/item/weapon/reagent_containers/spray/chemsprayer
|
||||||
name = "chem sprayer"
|
name = "chem sprayer"
|
||||||
desc = "A utility used to spray large amounts of reagents in a given area."
|
desc = "A utility used to spray large amounts of reagents in a given area."
|
||||||
icon = 'icons/obj/guns/projectile.dmi'
|
icon = 'icons/obj/guns/projectile.dmi'
|
||||||
icon_state = "chemsprayer"
|
icon_state = "chemsprayer"
|
||||||
item_state = "chemsprayer"
|
item_state = "chemsprayer"
|
||||||
throwforce = 0
|
throwforce = 0
|
||||||
w_class = WEIGHT_CLASS_NORMAL
|
w_class = WEIGHT_CLASS_NORMAL
|
||||||
stream_mode = 1
|
stream_mode = 1
|
||||||
current_range = 7
|
current_range = 7
|
||||||
spray_range = 4
|
spray_range = 4
|
||||||
stream_range = 7
|
stream_range = 7
|
||||||
amount_per_transfer_from_this = 10
|
amount_per_transfer_from_this = 10
|
||||||
volume = 600
|
volume = 600
|
||||||
origin_tech = "combat=3;materials=3;engineering=3"
|
origin_tech = "combat=3;materials=3;engineering=3"
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user)
|
/obj/item/weapon/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user)
|
||||||
// Make it so the bioterror spray doesn't spray yourself when you click your inventory items
|
// Make it so the bioterror spray doesn't spray yourself when you click your inventory items
|
||||||
if (A.loc == user)
|
if (A.loc == user)
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/spray(atom/A)
|
/obj/item/weapon/reagent_containers/spray/chemsprayer/spray(atom/A)
|
||||||
var/direction = get_dir(src, A)
|
var/direction = get_dir(src, A)
|
||||||
var/turf/T = get_turf(A)
|
var/turf/T = get_turf(A)
|
||||||
var/turf/T1 = get_step(T,turn(direction, 90))
|
var/turf/T1 = get_step(T,turn(direction, 90))
|
||||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||||
var/list/the_targets = list(T,T1,T2)
|
var/list/the_targets = list(T,T1,T2)
|
||||||
|
|
||||||
for(var/i=1, i<=3, i++) // intialize sprays
|
for(var/i=1, i<=3, i++) // intialize sprays
|
||||||
if(reagents.total_volume < 1)
|
if(reagents.total_volume < 1)
|
||||||
return
|
return
|
||||||
..(the_targets[i])
|
..(the_targets[i])
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror
|
/obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror
|
||||||
list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100)
|
list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100)
|
||||||
|
|
||||||
// Plant-B-Gone
|
// Plant-B-Gone
|
||||||
/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie
|
/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie
|
||||||
name = "Plant-B-Gone"
|
name = "Plant-B-Gone"
|
||||||
desc = "Kills those pesky weeds!"
|
desc = "Kills those pesky weeds!"
|
||||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||||
icon_state = "plantbgone"
|
icon_state = "plantbgone"
|
||||||
item_state = "plantbgone"
|
item_state = "plantbgone"
|
||||||
volume = 100
|
volume = 100
|
||||||
list_reagents = list("plantbgone" = 100)
|
list_reagents = list("plantbgone" = 100)
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
/obj/machinery/computer/shuttle/ferry
|
/obj/machinery/computer/shuttle/ferry
|
||||||
name = "transport ferry console"
|
name = "transport ferry console"
|
||||||
circuit = /obj/item/weapon/circuitboard/computer/ferry
|
circuit = /obj/item/weapon/circuitboard/computer/ferry
|
||||||
shuttleId = "ferry"
|
shuttleId = "ferry"
|
||||||
possible_destinations = "ferry_home;ferry_away"
|
possible_destinations = "ferry_home;ferry_away"
|
||||||
req_access = list(GLOB.access_cent_general)
|
req_access = list(GLOB.access_cent_general)
|
||||||
|
|
||||||
var/aiControlDisabled = 1
|
var/aiControlDisabled = 1
|
||||||
|
|
||||||
/obj/machinery/computer/shuttle/ferry/proc/canAIControl(mob/user)
|
/obj/machinery/computer/shuttle/ferry/proc/canAIControl(mob/user)
|
||||||
return ((aiControlDisabled != 1));
|
return ((aiControlDisabled != 1));
|
||||||
|
|
||||||
/obj/machinery/computer/shuttle/ferry/attack_ai(mob/user)
|
/obj/machinery/computer/shuttle/ferry/attack_ai(mob/user)
|
||||||
if(!src.canAIControl(user))
|
if(!src.canAIControl(user))
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/computer/shuttle/ferry/request
|
/obj/machinery/computer/shuttle/ferry/request
|
||||||
name = "ferry console"
|
name = "ferry console"
|
||||||
circuit = /obj/item/weapon/circuitboard/computer/ferry/request
|
circuit = /obj/item/weapon/circuitboard/computer/ferry/request
|
||||||
var/last_request //prevents spamming admins
|
var/last_request //prevents spamming admins
|
||||||
var/cooldown = 600
|
var/cooldown = 600
|
||||||
possible_destinations = "ferry_home;ferry_away"
|
possible_destinations = "ferry_home;ferry_away"
|
||||||
req_access = list(GLOB.access_cent_general)
|
req_access = list(GLOB.access_cent_general)
|
||||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||||
|
|
||||||
/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list)
|
/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list)
|
||||||
..()
|
..()
|
||||||
if(href_list["request"])
|
if(href_list["request"])
|
||||||
if(last_request && (last_request + cooldown > world.time))
|
if(last_request && (last_request + cooldown > world.time))
|
||||||
return
|
return
|
||||||
last_request = world.time
|
last_request = world.time
|
||||||
to_chat(usr, "<span class='notice'>Your request has been recieved by Centcom.</span>")
|
to_chat(usr, "<span class='notice'>Your request has been recieved by Centcom.</span>")
|
||||||
to_chat(GLOB.admins, "<b>FERRY: <font color='blue'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to Centcom.</font>")
|
to_chat(GLOB.admins, "<b>FERRY: <font color='blue'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to Centcom.</font>")
|
||||||
|
|||||||
0
icons/emoji.dmi
Executable file → Normal file
0
icons/emoji.dmi
Executable file → Normal file
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
@@ -33,6 +33,7 @@
|
|||||||
#include "code\__DEFINES\combat.dm"
|
#include "code\__DEFINES\combat.dm"
|
||||||
#include "code\__DEFINES\construction.dm"
|
#include "code\__DEFINES\construction.dm"
|
||||||
#include "code\__DEFINES\contracts.dm"
|
#include "code\__DEFINES\contracts.dm"
|
||||||
|
#include "code\__DEFINES\cult.dm"
|
||||||
#include "code\__DEFINES\DNA.dm"
|
#include "code\__DEFINES\DNA.dm"
|
||||||
#include "code\__DEFINES\events.dm"
|
#include "code\__DEFINES\events.dm"
|
||||||
#include "code\__DEFINES\flags.dm"
|
#include "code\__DEFINES\flags.dm"
|
||||||
@@ -167,9 +168,6 @@
|
|||||||
#include "code\citadel\cit_uniforms.dm"
|
#include "code\citadel\cit_uniforms.dm"
|
||||||
#include "code\citadel\cit_vendors.dm"
|
#include "code\citadel\cit_vendors.dm"
|
||||||
#include "code\citadel\dogborgstuff.dm"
|
#include "code\citadel\dogborgstuff.dm"
|
||||||
#include "code\citadel\custom_loadout\custom_items.dm"
|
|
||||||
#include "code\citadel\custom_loadout\load_to_mob.dm"
|
|
||||||
#include "code\citadel\custom_loadout\read_from_file.dm"
|
|
||||||
#include "code\citadel\organs\breasts.dm"
|
#include "code\citadel\organs\breasts.dm"
|
||||||
#include "code\citadel\organs\eggsack.dm"
|
#include "code\citadel\organs\eggsack.dm"
|
||||||
#include "code\citadel\organs\genitals.dm"
|
#include "code\citadel\organs\genitals.dm"
|
||||||
@@ -199,12 +197,14 @@
|
|||||||
#include "code\controllers\subsystem\dbcore.dm"
|
#include "code\controllers\subsystem\dbcore.dm"
|
||||||
#include "code\controllers\subsystem\disease.dm"
|
#include "code\controllers\subsystem\disease.dm"
|
||||||
#include "code\controllers\subsystem\events.dm"
|
#include "code\controllers\subsystem\events.dm"
|
||||||
|
#include "code\controllers\subsystem\fields.dm"
|
||||||
#include "code\controllers\subsystem\fire_burning.dm"
|
#include "code\controllers\subsystem\fire_burning.dm"
|
||||||
#include "code\controllers\subsystem\garbage.dm"
|
#include "code\controllers\subsystem\garbage.dm"
|
||||||
#include "code\controllers\subsystem\icon_smooth.dm"
|
#include "code\controllers\subsystem\icon_smooth.dm"
|
||||||
#include "code\controllers\subsystem\inbounds.dm"
|
#include "code\controllers\subsystem\inbounds.dm"
|
||||||
#include "code\controllers\subsystem\ipintel.dm"
|
#include "code\controllers\subsystem\ipintel.dm"
|
||||||
#include "code\controllers\subsystem\job.dm"
|
#include "code\controllers\subsystem\job.dm"
|
||||||
|
#include "code\controllers\subsystem\language.dm"
|
||||||
#include "code\controllers\subsystem\lighting.dm"
|
#include "code\controllers\subsystem\lighting.dm"
|
||||||
#include "code\controllers\subsystem\machines.dm"
|
#include "code\controllers\subsystem\machines.dm"
|
||||||
#include "code\controllers\subsystem\mapping.dm"
|
#include "code\controllers\subsystem\mapping.dm"
|
||||||
@@ -266,6 +266,7 @@
|
|||||||
#include "code\datums\antagonists\antag_datum.dm"
|
#include "code\datums\antagonists\antag_datum.dm"
|
||||||
#include "code\datums\antagonists\datum_clockcult.dm"
|
#include "code\datums\antagonists\datum_clockcult.dm"
|
||||||
#include "code\datums\antagonists\datum_cult.dm"
|
#include "code\datums\antagonists\datum_cult.dm"
|
||||||
|
#include "code\datums\antagonists\ninja.dm"
|
||||||
#include "code\datums\diseases\_disease.dm"
|
#include "code\datums\diseases\_disease.dm"
|
||||||
#include "code\datums\diseases\_MobProcs.dm"
|
#include "code\datums\diseases\_MobProcs.dm"
|
||||||
#include "code\datums\diseases\anxiety.dm"
|
#include "code\datums\diseases\anxiety.dm"
|
||||||
@@ -470,7 +471,9 @@
|
|||||||
#include "code\game\gamemodes\cult\cult_items.dm"
|
#include "code\game\gamemodes\cult\cult_items.dm"
|
||||||
#include "code\game\gamemodes\cult\cult_structures.dm"
|
#include "code\game\gamemodes\cult\cult_structures.dm"
|
||||||
#include "code\game\gamemodes\cult\ritual.dm"
|
#include "code\game\gamemodes\cult\ritual.dm"
|
||||||
|
#include "code\game\gamemodes\cult\rune_spawn_action.dm"
|
||||||
#include "code\game\gamemodes\cult\runes.dm"
|
#include "code\game\gamemodes\cult\runes.dm"
|
||||||
|
#include "code\game\gamemodes\cult\supply.dm"
|
||||||
#include "code\game\gamemodes\cult\talisman.dm"
|
#include "code\game\gamemodes\cult\talisman.dm"
|
||||||
#include "code\game\gamemodes\devil\devil.dm"
|
#include "code\game\gamemodes\devil\devil.dm"
|
||||||
#include "code\game\gamemodes\devil\devil_game_mode.dm"
|
#include "code\game\gamemodes\devil\devil_game_mode.dm"
|
||||||
@@ -556,6 +559,7 @@
|
|||||||
#include "code\game\machinery\hologram.dm"
|
#include "code\game\machinery\hologram.dm"
|
||||||
#include "code\game\machinery\igniter.dm"
|
#include "code\game\machinery\igniter.dm"
|
||||||
#include "code\game\machinery\iv_drip.dm"
|
#include "code\game\machinery\iv_drip.dm"
|
||||||
|
#include "code\game\machinery\launch_pad.dm"
|
||||||
#include "code\game\machinery\lightswitch.dm"
|
#include "code\game\machinery\lightswitch.dm"
|
||||||
#include "code\game\machinery\limbgrower.dm"
|
#include "code\game\machinery\limbgrower.dm"
|
||||||
#include "code\game\machinery\machinery.dm"
|
#include "code\game\machinery\machinery.dm"
|
||||||
@@ -604,6 +608,7 @@
|
|||||||
#include "code\game\machinery\computer\crew.dm"
|
#include "code\game\machinery\computer\crew.dm"
|
||||||
#include "code\game\machinery\computer\dna_console.dm"
|
#include "code\game\machinery\computer\dna_console.dm"
|
||||||
#include "code\game\machinery\computer\gulag_teleporter.dm"
|
#include "code\game\machinery\computer\gulag_teleporter.dm"
|
||||||
|
#include "code\game\machinery\computer\launchpad_control.dm"
|
||||||
#include "code\game\machinery\computer\law.dm"
|
#include "code\game\machinery\computer\law.dm"
|
||||||
#include "code\game\machinery\computer\medical.dm"
|
#include "code\game\machinery\computer\medical.dm"
|
||||||
#include "code\game\machinery\computer\message.dm"
|
#include "code\game\machinery\computer\message.dm"
|
||||||
@@ -726,6 +731,10 @@
|
|||||||
#include "code\game\objects\effects\spawners\structure.dm"
|
#include "code\game\objects\effects\spawners\structure.dm"
|
||||||
#include "code\game\objects\effects\spawners\vaultspawner.dm"
|
#include "code\game\objects\effects\spawners\vaultspawner.dm"
|
||||||
#include "code\game\objects\effects\spawners\xeno_egg_delivery.dm"
|
#include "code\game\objects\effects\spawners\xeno_egg_delivery.dm"
|
||||||
|
#include "code\game\objects\effects\temporary_visuals\clockcult.dm"
|
||||||
|
#include "code\game\objects\effects\temporary_visuals\cult.dm"
|
||||||
|
#include "code\game\objects\effects\temporary_visuals\miscellaneous.dm"
|
||||||
|
#include "code\game\objects\effects\temporary_visuals\temporary_visual.dm"
|
||||||
#include "code\game\objects\items\apc_frame.dm"
|
#include "code\game\objects\items\apc_frame.dm"
|
||||||
#include "code\game\objects\items\blueprints.dm"
|
#include "code\game\objects\items\blueprints.dm"
|
||||||
#include "code\game\objects\items\body_egg.dm"
|
#include "code\game\objects\items\body_egg.dm"
|
||||||
@@ -809,7 +818,6 @@
|
|||||||
#include "code\game\objects\items\weapons\defib.dm"
|
#include "code\game\objects\items\weapons\defib.dm"
|
||||||
#include "code\game\objects\items\weapons\dice.dm"
|
#include "code\game\objects\items\weapons\dice.dm"
|
||||||
#include "code\game\objects\items\weapons\dna_injector.dm"
|
#include "code\game\objects\items\weapons\dna_injector.dm"
|
||||||
#include "code\game\objects\items\weapons\explosives.dm"
|
|
||||||
#include "code\game\objects\items\weapons\extinguisher.dm"
|
#include "code\game\objects\items\weapons\extinguisher.dm"
|
||||||
#include "code\game\objects\items\weapons\flamethrower.dm"
|
#include "code\game\objects\items\weapons\flamethrower.dm"
|
||||||
#include "code\game\objects\items\weapons\gift.dm"
|
#include "code\game\objects\items\weapons\gift.dm"
|
||||||
@@ -1304,6 +1312,9 @@
|
|||||||
#include "code\modules\events\wizard\rpgloot.dm"
|
#include "code\modules\events\wizard\rpgloot.dm"
|
||||||
#include "code\modules\events\wizard\shuffle.dm"
|
#include "code\modules\events\wizard\shuffle.dm"
|
||||||
#include "code\modules\events\wizard\summons.dm"
|
#include "code\modules\events\wizard\summons.dm"
|
||||||
|
#include "code\modules\fields\fields.dm"
|
||||||
|
#include "code\modules\fields\peaceborg_dampener.dm"
|
||||||
|
#include "code\modules\fields\turf_objects.dm"
|
||||||
#include "code\modules\flufftext\Dreaming.dm"
|
#include "code\modules\flufftext\Dreaming.dm"
|
||||||
#include "code\modules\flufftext\Hallucination.dm"
|
#include "code\modules\flufftext\Hallucination.dm"
|
||||||
#include "code\modules\flufftext\TextFilters.dm"
|
#include "code\modules\flufftext\TextFilters.dm"
|
||||||
@@ -1426,12 +1437,15 @@
|
|||||||
#include "code\modules\jobs\job_types\security.dm"
|
#include "code\modules\jobs\job_types\security.dm"
|
||||||
#include "code\modules\jobs\job_types\silicon.dm"
|
#include "code\modules\jobs\job_types\silicon.dm"
|
||||||
#include "code\modules\language\common.dm"
|
#include "code\modules\language\common.dm"
|
||||||
|
#include "code\modules\language\draconic.dm"
|
||||||
#include "code\modules\language\drone.dm"
|
#include "code\modules\language\drone.dm"
|
||||||
#include "code\modules\language\language.dm"
|
#include "code\modules\language\language.dm"
|
||||||
|
#include "code\modules\language\language_holder.dm"
|
||||||
#include "code\modules\language\language_menu.dm"
|
#include "code\modules\language\language_menu.dm"
|
||||||
#include "code\modules\language\machine.dm"
|
#include "code\modules\language\machine.dm"
|
||||||
#include "code\modules\language\monkey.dm"
|
#include "code\modules\language\monkey.dm"
|
||||||
#include "code\modules\language\ratvar.dm"
|
#include "code\modules\language\narsian.dm"
|
||||||
|
#include "code\modules\language\ratvarian.dm"
|
||||||
#include "code\modules\language\slime.dm"
|
#include "code\modules\language\slime.dm"
|
||||||
#include "code\modules\language\swarmer.dm"
|
#include "code\modules\language\swarmer.dm"
|
||||||
#include "code\modules\language\xenocommon.dm"
|
#include "code\modules\language\xenocommon.dm"
|
||||||
@@ -1803,7 +1817,6 @@
|
|||||||
#include "code\modules\modular_computers\NTNet\NTNet_relay.dm"
|
#include "code\modules\modular_computers\NTNet\NTNet_relay.dm"
|
||||||
#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
|
#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
|
||||||
#include "code\modules\ninja\__ninjaDefines.dm"
|
#include "code\modules\ninja\__ninjaDefines.dm"
|
||||||
#include "code\modules\ninja\admin_ninja_verbs.dm"
|
|
||||||
#include "code\modules\ninja\energy_katana.dm"
|
#include "code\modules\ninja\energy_katana.dm"
|
||||||
#include "code\modules\ninja\ninja_event.dm"
|
#include "code\modules\ninja\ninja_event.dm"
|
||||||
#include "code\modules\ninja\Ninja_Readme.dm"
|
#include "code\modules\ninja\Ninja_Readme.dm"
|
||||||
|
|||||||
@@ -3,37 +3,37 @@
|
|||||||
call config.bat
|
call config.bat
|
||||||
call bin\findbyond.bat
|
call bin\findbyond.bat
|
||||||
|
|
||||||
echo Welcome to the start server watch dog script, This will start the server and make sure it stays running. To continue, press any key or wait 30 seconds.
|
echo Welcome to the start server watch dog script, This will start the server and make sure it stays running. To continue, press any key or wait 30 seconds.
|
||||||
timeout 30
|
timeout 30
|
||||||
|
|
||||||
if not exist gamedata\data\logs\runtimes mkdir gamedata\data\logs\runtimes\
|
if not exist gamedata\data\logs\runtimes mkdir gamedata\data\logs\runtimes\
|
||||||
|
|
||||||
@call python bot\nudge.py "WATCHDOG" "Watch Dog online. Starting server" >nul 2>nul
|
@call python bot\nudge.py "WATCHDOG" "Watch Dog online. Starting server" >nul 2>nul
|
||||||
:START
|
:START
|
||||||
|
|
||||||
call bin\getcurdate.bat
|
call bin\getcurdate.bat
|
||||||
|
|
||||||
call bin\getunixtime.bat UNIXTIME
|
call bin\getunixtime.bat UNIXTIME
|
||||||
|
|
||||||
echo %UNIXTIME%
|
echo %UNIXTIME%
|
||||||
|
|
||||||
set STARTTIME=%UNIXTIME%
|
set STARTTIME=%UNIXTIME%
|
||||||
|
|
||||||
cls
|
cls
|
||||||
echo Watch Dog.
|
echo Watch Dog.
|
||||||
echo Server Running. Watching for server exits.
|
echo Server Running. Watching for server exits.
|
||||||
start /WAIT /ABOVENORMAL "" dreamdaemon.exe gamefolder\%PROJECTNAME%.dmb -port %PORT% -trusted -close -public -verbose
|
start /WAIT /ABOVENORMAL "" dreamdaemon.exe gamefolder\%PROJECTNAME%.dmb -port %PORT% -trusted -close -public -verbose
|
||||||
cls
|
cls
|
||||||
|
|
||||||
call bin\getunixtime.bat UNIXTIME
|
call bin\getunixtime.bat UNIXTIME
|
||||||
|
|
||||||
SET /A Result=%UNIXTIME% - %STARTTIME%
|
SET /A Result=%UNIXTIME% - %STARTTIME%
|
||||||
SET /A Result=180 - (%Result%/3)
|
SET /A Result=180 - (%Result%/3)
|
||||||
if %Result% LSS 0 set /A Result=0
|
if %Result% LSS 0 set /A Result=0
|
||||||
|
|
||||||
echo Watch Dog.
|
echo Watch Dog.
|
||||||
echo Server exit detected. Restarting in %Result% seconds.
|
echo Server exit detected. Restarting in %Result% seconds.
|
||||||
@python bot\nudge.py "WATCHDOG" "Server exit detected. Restarting server in %Result% seconds." >nul 2>nul
|
@python bot\nudge.py "WATCHDOG" "Server exit detected. Restarting server in %Result% seconds." >nul 2>nul
|
||||||
timeout %Result%
|
timeout %Result%
|
||||||
|
|
||||||
goto :START
|
goto :START
|
||||||
|
|||||||
Reference in New Issue
Block a user