mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
merge
This commit is contained in:
@@ -651,7 +651,7 @@
|
||||
var/atom/A = new chosen(usr.loc)
|
||||
A.flags_1 |= ADMIN_SPAWNED_1
|
||||
|
||||
log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
|
||||
log_admin("[key_name(usr)] spawned [chosen] at [AREACOORD(usr)]")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/spawn_cargo(object as text)
|
||||
@@ -669,7 +669,7 @@
|
||||
S.admin_spawned = TRUE
|
||||
S.generate(get_turf(usr))
|
||||
|
||||
log_admin("[key_name(usr)] spawned cargo pack [chosen] at ([usr.x],[usr.y],[usr.z])")
|
||||
log_admin("[key_name(usr)] spawned cargo pack [chosen] at [AREACOORD(usr)]")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Cargo") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -725,7 +725,7 @@
|
||||
to_chat(usr, "<b>AI [key_name(S, usr)]'s laws:</b>")
|
||||
else if(iscyborg(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
to_chat(usr, "<b>CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:</b>")
|
||||
to_chat(usr, "<b>CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [key_name(R.connected_ai)])":"(Independent)"]: laws:</b>")
|
||||
else if (ispAI(S))
|
||||
to_chat(usr, "<b>pAI [key_name(S, usr)]'s laws:</b>")
|
||||
else
|
||||
|
||||
@@ -594,8 +594,8 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
|
||||
if(!message)
|
||||
return
|
||||
O.say(message)
|
||||
log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] say \"[message]\"")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. say \"[message]\"</span>")
|
||||
log_admin("[key_name(usr)] made [O] at [AREACOORD(O)] say \"[message]\"")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] made [O] at [AREACOORD(O)]. say \"[message]\"</span>")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Object Say") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
/client/proc/togglebuildmodeself()
|
||||
set name = "Toggle Build Mode Self"
|
||||
@@ -686,7 +686,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
|
||||
if (tile)
|
||||
var/mob/living/carbon/human/hooman = new(tile)
|
||||
hooman.equipOutfit(pick(subtypesof(/datum/outfit)))
|
||||
testing("Spawned test mob at [tile.x],[tile.y],[tile.z]")
|
||||
testing("Spawned test mob at [COORD(tile)]")
|
||||
while (!area && --j > 0)
|
||||
|
||||
/client/proc/toggle_AI_interact()
|
||||
|
||||
@@ -146,9 +146,9 @@
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(usr, "<span class='danger'>Failed to establish database connection.</span>")
|
||||
return
|
||||
var/output
|
||||
var/list/output = list()
|
||||
var/ruler = "<hr style='background:#000000; border:0; height:3px'>"
|
||||
var/navbar = "<a href='?_src_=holder;[HrefToken()];nonalpha=1'>\[All\]</a>|<a href='?_src_=holder;[HrefToken()];nonalpha=2'>\[#\]</a>"
|
||||
var/list/navbar = list("<a href='?_src_=holder;[HrefToken()];nonalpha=1'>\[All\]</a>|<a href='?_src_=holder;[HrefToken()];nonalpha=2'>\[#\]</a>")
|
||||
for(var/letter in GLOB.alphabet)
|
||||
navbar += "|<a href='?_src_=holder;[HrefToken()];showmessages=[letter]'>\[[letter]\]</a>"
|
||||
navbar += "|<a href='?_src_=holder;[HrefToken()];showmemo=1'>\[Memos\]</a>|<a href='?_src_=holder;[HrefToken()];showwatch=1'>\[Watchlist\]</a>"
|
||||
@@ -198,9 +198,9 @@
|
||||
var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor, DATEDIFF(NOW(), timestamp) AS `age` FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 ORDER BY timestamp DESC")
|
||||
if(!query_get_messages.warn_execute())
|
||||
return
|
||||
var/messagedata
|
||||
var/watchdata
|
||||
var/notedata
|
||||
var/list/messagedata = list()
|
||||
var/list/watchdata = list()
|
||||
var/list/notedata = list()
|
||||
var/skipped = 0
|
||||
while(query_get_messages.NextRow())
|
||||
type = query_get_messages.item[1]
|
||||
@@ -230,8 +230,7 @@
|
||||
skipped = TRUE
|
||||
alphatext = "filter: alpha(opacity=[alpha]); opacity: [alpha/100];"
|
||||
|
||||
var/data
|
||||
data += "<p style='margin:0px;[alphatext]'> <b>[timestamp] | [server] | [admin_ckey]</b>"
|
||||
var/list/data = list("<p style='margin:0px;[alphatext]'> <b>[timestamp] | [server] | [admin_ckey]</b>")
|
||||
if(!linkless)
|
||||
data += " <a href='?_src_=holder;[HrefToken()];deletemessage=[id]'>\[Delete\]</a>"
|
||||
if(type == "note")
|
||||
@@ -304,7 +303,7 @@
|
||||
else if(!type && !target_ckey && !index)
|
||||
output += "<center></a> <a href='?_src_=holder;[HrefToken()];addmessageempty=1'>\[Add message\]</a><a href='?_src_=holder;[HrefToken()];addwatchempty=1'>\[Add watchlist entry\]</a><a href='?_src_=holder;[HrefToken()];addnoteempty=1'>\[Add note\]</a></center>"
|
||||
output += ruler
|
||||
usr << browse({"<!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /></head><body>[output]</body></html>"}, "window=browse_messages;size=900x500")
|
||||
usr << browse({"<!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /></head><body>[jointext(output, "")]</body></html>"}, "window=browse_messages;size=900x500")
|
||||
|
||||
proc/get_message_output(type, target_ckey)
|
||||
if(!SSdbcore.Connect())
|
||||
|
||||
@@ -278,10 +278,10 @@
|
||||
T.PlaceOnTop(/turf/closed/wall)
|
||||
else if(iswallturf(object))
|
||||
T.PlaceOnTop(/turf/closed/wall/r_wall)
|
||||
log_admin("Build Mode: [key_name(user)] built [T] at ([T.x],[T.y],[T.z])")
|
||||
log_admin("Build Mode: [key_name(user)] built [T] at [AREACOORD(T)]")
|
||||
return
|
||||
else if(right_click)
|
||||
log_admin("Build Mode: [key_name(user)] deleted [object] at ([object.x],[object.y],[object.z])")
|
||||
log_admin("Build Mode: [key_name(user)] deleted [object] at [AREACOORD(object)]")
|
||||
if(isturf(object))
|
||||
var/turf/T = object
|
||||
T.ScrapeAway()
|
||||
@@ -289,7 +289,7 @@
|
||||
qdel(object)
|
||||
return
|
||||
else if(isturf(object) && alt_click && left_click)
|
||||
log_admin("Build Mode: [key_name(user)] built an airlock at ([object.x],[object.y],[object.z])")
|
||||
log_admin("Build Mode: [key_name(user)] built an airlock at [AREACOORD(object)]")
|
||||
new/obj/machinery/door/airlock(get_turf(object))
|
||||
else if(isturf(object) && ctrl_click && left_click)
|
||||
var/obj/structure/window/reinforced/window
|
||||
@@ -298,7 +298,7 @@
|
||||
else
|
||||
window = new /obj/structure/window/reinforced(get_turf(object))
|
||||
window.setDir(build_dir)
|
||||
log_admin("Build Mode: [key_name(user)] built a window at ([object.x],[object.y],[object.z])")
|
||||
log_admin("Build Mode: [key_name(user)] built a window at [AREACOORD(object)]")
|
||||
if(ADV_BUILDMODE)
|
||||
if(left_click && alt_click)
|
||||
objholder = object.type
|
||||
@@ -306,15 +306,15 @@
|
||||
else if(left_click)
|
||||
if(ispath(objholder, /turf))
|
||||
var/turf/T = get_turf(object)
|
||||
log_admin("Build Mode: [key_name(user)] modified [T] ([T.x],[T.y],[T.z]) to [objholder]")
|
||||
log_admin("Build Mode: [key_name(user)] modified [T] in [AREACOORD(object)] to [objholder]")
|
||||
T.PlaceOnTop(objholder)
|
||||
else
|
||||
var/obj/A = new objholder (get_turf(object))
|
||||
A.setDir(build_dir)
|
||||
log_admin("Build Mode: [key_name(user)] modified [A]'s ([A.x],[A.y],[A.z]) dir to [build_dir]")
|
||||
log_admin("Build Mode: [key_name(user)] modified [A]'s [COORD(A)] dir to [build_dir]")
|
||||
else if(right_click)
|
||||
if(isobj(object))
|
||||
log_admin("Build Mode: [key_name(user)] deleted [object] at ([object.x],[object.y],[object.z])")
|
||||
log_admin("Build Mode: [key_name(user)] deleted [object] at [AREACOORD(object)]")
|
||||
qdel(object)
|
||||
|
||||
if(VAR_BUILDMODE)
|
||||
@@ -343,7 +343,7 @@
|
||||
if(right_click)
|
||||
if(throw_atom)
|
||||
throw_atom.throw_at(object, 10, 1,user)
|
||||
log_admin("Build Mode: [key_name(user)] threw [throw_atom] at [object] ([object.x],[object.y],[object.z])")
|
||||
log_admin("Build Mode: [key_name(user)] threw [throw_atom] at [object] in [AREACOORD(object)]")
|
||||
if(AREA_BUILDMODE)
|
||||
if(left_click) //rectangular
|
||||
if(!cornerA)
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
for (var/device in f)
|
||||
if (istype(device, /atom))
|
||||
var/atom/A = device
|
||||
output += " [device] ([A.x],[A.y],[A.z] in area [get_area(device)])<br>"
|
||||
output += " [device] ([AREACOORD(A)])<br>"
|
||||
else
|
||||
output += " [device]<br>"
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
var/turf/T = get_turf(O)
|
||||
|
||||
if(T)
|
||||
log_admin("[key_name(usr)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])")
|
||||
message_admins("[key_name(usr)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])")
|
||||
log_admin("[key_name(usr)] has possessed [O] ([O.type]) at [AREACOORD(T)]")
|
||||
message_admins("[key_name(usr)] has possessed [O] ([O.type]) at [AREACOORD(T)]")
|
||||
else
|
||||
log_admin("[key_name(usr)] has possessed [O] ([O.type]) at an unknown location")
|
||||
message_admins("[key_name(usr)] has possessed [O] ([O.type]) at an unknown location")
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(src)] has started answering [key_name(M.key, 0, 0)]'s prayer.")
|
||||
message_admins("[key_name_admin(src)] has started answering [ADMIN_LOOKUPFLW(M)]'s prayer.")
|
||||
var/msg = input("Message:", text("Subtle PM to [M.key]")) as text|null
|
||||
|
||||
if (!msg)
|
||||
message_admins("[key_name_admin(src)] decided not to answer [key_name(M.key, 0, 0)]'s prayer")
|
||||
message_admins("[key_name_admin(src)] decided not to answer [ADMIN_LOOKUPFLW(M)]'s prayer")
|
||||
return
|
||||
if(usr)
|
||||
if (usr.client)
|
||||
@@ -856,7 +856,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
N.set_safety()
|
||||
N.set_active()
|
||||
|
||||
log_admin("[key_name(usr)] [N.timing ? "activated" : "deactivated"] a nuke at ([N.x],[N.y],[N.z]).")
|
||||
log_admin("[key_name(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [AREACOORD(N)].")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [ADMIN_VERBOSEJMP(N)].")
|
||||
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Nuke", "[N.timing]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -66,5 +66,5 @@
|
||||
basemob.ckey = mainsettings["ckey"]["value"]
|
||||
|
||||
|
||||
log_admin("[key_name(usr)] spawned a sentient object-mob [basemob] from [chosen_obj] at ([usr.x],[usr.y],[usr.z])")
|
||||
log_admin("[key_name(usr)] spawned a sentient object-mob [basemob] from [chosen_obj] at [AREACOORD(usr)]")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn object-mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -359,7 +359,7 @@
|
||||
|
||||
to_chat(L, "<span class='italics'>You hear a voice in your head saying: </span><span class='abductor'>[message]</span>")
|
||||
to_chat(user, "<span class='notice'>You send the message to your target.</span>")
|
||||
log_talk(user,"[key_name(user)] sent an abductor mind message to [L]/[L.ckey]: '[message]'", LOGSAY)
|
||||
log_talk(user,"[key_name(user)] sent an abductor mind message to [key_name(L)]: '[message]'", LOGSAY)
|
||||
|
||||
|
||||
/obj/item/firing_pin/abductor
|
||||
|
||||
@@ -496,12 +496,12 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
if((istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)))
|
||||
user.visible_message("<span class='warning'>[user.name] begins erasing [src]...</span>", "<span class='notice'>You begin erasing [src]...</span>")
|
||||
if(do_after(user, 50, target = src)) //Prevents accidental erasures.
|
||||
log_game("Summon Narsie rune erased by [user.mind.key] (ckey) with [I.name]")
|
||||
log_game("Summon Narsie rune erased by [key_name(user)] with [I.name]")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with [I.name]")
|
||||
..()
|
||||
else
|
||||
if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me.
|
||||
log_game("Summon Narsie rune erased by [user.mind.key] (ckey) using a null rod")
|
||||
log_game("Summon Narsie rune erased by [key_name(user)] using a null rod")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with a null rod")
|
||||
..()
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ the new instance inside the host to be updated to the template's stats.
|
||||
/mob/camera/disease/Login()
|
||||
..()
|
||||
if(freemove)
|
||||
to_chat(src, "<span class='warning'>You have [round((freemove_end - world.time)/10)] seconds to select your first host. Click on a human to select your host.</span>")
|
||||
to_chat(src, "<span class='warning'>You have [DisplayTimeText(freemove_end - world.time)] to select your first host. Click on a human to select your host.</span>")
|
||||
|
||||
|
||||
/mob/camera/disease/Stat()
|
||||
@@ -285,7 +285,7 @@ the new instance inside the host to be updated to the template's stats.
|
||||
..()
|
||||
|
||||
/mob/camera/disease/proc/adapt_cooldown()
|
||||
to_chat(src, "<span class='notice'>You have altered your genetic structure. You will be unable to adapt again for [adaptation_cooldown/10] seconds.</span>")
|
||||
to_chat(src, "<span class='notice'>You have altered your genetic structure. You will be unable to adapt again for [DisplayTimeText(adaptation_cooldown)].</span>")
|
||||
next_adaptation_time = world.time + adaptation_cooldown
|
||||
addtimer(CALLBACK(src, .proc/notify_adapt_ready), adaptation_cooldown)
|
||||
|
||||
|
||||
@@ -371,11 +371,11 @@
|
||||
if(timing)
|
||||
previous_level = get_security_level()
|
||||
bomb_set = TRUE
|
||||
set_security_level("delta")
|
||||
detonation_timer = world.time + (timer_set * 10)
|
||||
for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list)
|
||||
S.switch_mode_to(TRACK_INFILTRATOR)
|
||||
countdown.start()
|
||||
set_security_level("delta")
|
||||
else
|
||||
bomb_set = FALSE
|
||||
detonation_timer = null
|
||||
|
||||
@@ -4,11 +4,6 @@
|
||||
#define PROB_ACTUAL_TRAITOR 20
|
||||
#define TRAITOR_AGENT_ROLE "Syndicate External Affairs Agent"
|
||||
|
||||
/datum/antagonist/traitor/internal_affairs
|
||||
name = "Internal Affairs Agent"
|
||||
antagpanel_category = "IAA"
|
||||
|
||||
|
||||
/datum/antagonist/traitor/internal_affairs
|
||||
name = "Internal Affairs Agent"
|
||||
employer = "Nanotrasen"
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
if(BODY_ZONE_PRECISE_MOUTH)
|
||||
var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text)
|
||||
target.say(wgw)
|
||||
log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.")
|
||||
log_game("[key_name(user)] made [key_name(target)] say [wgw] with a voodoo doll.")
|
||||
if(BODY_ZONE_PRECISE_EYES)
|
||||
user.set_machine(src)
|
||||
user.reset_perspective(target)
|
||||
|
||||
@@ -100,13 +100,13 @@
|
||||
|
||||
if (atmos_overlay_types)
|
||||
for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added
|
||||
vars["vis_contents"] -= overlay
|
||||
vis_contents -= overlay
|
||||
|
||||
if (new_overlay_types.len)
|
||||
if (atmos_overlay_types)
|
||||
vars["vis_contents"] += new_overlay_types - atmos_overlay_types //don't add overlays that already exist
|
||||
vis_contents += new_overlay_types - atmos_overlay_types //don't add overlays that already exist
|
||||
else
|
||||
vars["vis_contents"] += new_overlay_types
|
||||
vis_contents += new_overlay_types
|
||||
|
||||
UNSETEMPTY(new_overlay_types)
|
||||
src.atmos_overlay_types = new_overlay_types
|
||||
|
||||
@@ -1,23 +1,40 @@
|
||||
//node2, air2, network2 correspond to input
|
||||
//node1, air1, network1 correspond to output
|
||||
|
||||
#define CIRCULATOR_COLD 0
|
||||
#define CIRCULATOR_HOT 1
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator
|
||||
name = "circulator/heat exchanger"
|
||||
desc = "A gas circulator pump and heat exchanger."
|
||||
icon_state = "circ1-off"
|
||||
icon_state = "circ-off"
|
||||
|
||||
var/side = CIRC_LEFT
|
||||
var/status = 0
|
||||
var/active = FALSE
|
||||
|
||||
var/last_pressure_delta = 0
|
||||
pipe_flags = PIPING_ONE_PER_TURF
|
||||
|
||||
density = TRUE
|
||||
|
||||
var/global/const/CIRC_LEFT = 1
|
||||
var/global/const/CIRC_RIGHT = 2
|
||||
|
||||
var/mode = CIRCULATOR_HOT
|
||||
var/obj/machinery/power/generator/generator
|
||||
|
||||
//default cold circ for mappers
|
||||
/obj/machinery/atmospherics/components/binary/circulator/cold
|
||||
mode = CIRCULATOR_COLD
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/Initialize(mapload)
|
||||
.=..()
|
||||
component_parts = list(new /obj/item/circuitboard/machine/circulator)
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS )
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/Destroy()
|
||||
if(generator)
|
||||
disconnectFromGenerator()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air()
|
||||
|
||||
@@ -56,11 +73,55 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/update_icon()
|
||||
if(!is_operational())
|
||||
icon_state = "circ[side]-p"
|
||||
icon_state = "circ-p"
|
||||
else if(last_pressure_delta > 0)
|
||||
if(last_pressure_delta > ONE_ATMOSPHERE)
|
||||
icon_state = "circ[side]-run"
|
||||
icon_state = "circ-run"
|
||||
else
|
||||
icon_state = "circ[side]-slow"
|
||||
icon_state = "circ-slow"
|
||||
else
|
||||
icon_state = "circ[side]-off"
|
||||
icon_state = "circ-off"
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/wrench_act(mob/living/user, obj/item/I)
|
||||
if(!panel_open)
|
||||
return
|
||||
anchored = !anchored
|
||||
I.play_tool_sound(src)
|
||||
if(generator)
|
||||
disconnectFromGenerator()
|
||||
to_chat(user, "<span class='notice'>You [anchored?"secure":"unsecure"] [src].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/multitool_act(mob/living/user, obj/item/I)
|
||||
if(generator)
|
||||
disconnectFromGenerator()
|
||||
mode = !mode
|
||||
to_chat(user, "<span class='notice'>You set [src] to [mode?"cold":"hot"] mode.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/screwdriver_act(mob/user, obj/item/I)
|
||||
panel_open = !panel_open
|
||||
I.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You [panel_open?"open":"close"] the panel on [src].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/crowbar_act(mob/user, obj/item/I)
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/on_deconstruction()
|
||||
if(generator)
|
||||
disconnectFromGenerator()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/proc/disconnectFromGenerator()
|
||||
if(mode)
|
||||
generator.cold_circ = null
|
||||
else
|
||||
generator.hot_circ = null
|
||||
generator.update_icon()
|
||||
generator = null
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/setPipingLayer(new_layer)
|
||||
..()
|
||||
pixel_x = 0
|
||||
pixel_y = 0
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
if(ghost_role == "No" || !loc)
|
||||
return
|
||||
log_game("[user.ckey] became [mob_name]")
|
||||
log_game("[key_name(user)] became [mob_name]")
|
||||
create(ckey = user.ckey)
|
||||
|
||||
/obj/effect/mob_spawn/Initialize(mapload)
|
||||
|
||||
@@ -1123,18 +1123,19 @@
|
||||
|
||||
/datum/supply_pack/medical/virus
|
||||
name = "Virus Crate"
|
||||
desc = "Contains twelve different bottles, each filled with a different chemical compound, each useful for virology. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open."
|
||||
desc = "Contains twelve different bottles, containing several viral samples for virology research. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open."
|
||||
cost = 2500
|
||||
access = ACCESS_CMO
|
||||
contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion,
|
||||
/obj/item/reagent_containers/glass/bottle/cold,
|
||||
/obj/item/reagent_containers/glass/bottle/epiglottis_virion,
|
||||
/obj/item/reagent_containers/glass/bottle/liver_enhance_virion,
|
||||
/obj/item/reagent_containers/glass/bottle/random_virus,
|
||||
/obj/item/reagent_containers/glass/bottle/random_virus,
|
||||
/obj/item/reagent_containers/glass/bottle/random_virus,
|
||||
/obj/item/reagent_containers/glass/bottle/random_virus,
|
||||
/obj/item/reagent_containers/glass/bottle/fake_gbs,
|
||||
/obj/item/reagent_containers/glass/bottle/magnitis,
|
||||
/obj/item/reagent_containers/glass/bottle/pierrot_throat,
|
||||
/obj/item/reagent_containers/glass/bottle/brainrot,
|
||||
/obj/item/reagent_containers/glass/bottle/hallucigen_virion,
|
||||
/obj/item/reagent_containers/glass/bottle/anxiety,
|
||||
/obj/item/reagent_containers/glass/bottle/beesease,
|
||||
/obj/item/storage/box/syringes,
|
||||
|
||||
@@ -773,6 +773,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
if (isliving(mob))
|
||||
var/mob/living/M = mob
|
||||
M.update_damage_hud()
|
||||
if (prefs.auto_fit_viewport)
|
||||
fit_viewport()
|
||||
|
||||
/client/proc/generate_clickcatcher()
|
||||
if(!void)
|
||||
|
||||
@@ -114,6 +114,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/parallax
|
||||
|
||||
var/ambientocclusion = TRUE
|
||||
var/auto_fit_viewport = FALSE
|
||||
|
||||
var/uplink_spawn_loc = UPLINK_PDA
|
||||
|
||||
@@ -157,7 +158,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
return
|
||||
update_preview_icon()
|
||||
user << browse_rsc(preview_icon, "previewicon.png")
|
||||
var/dat = "<center>"
|
||||
var/list/dat = list("<center>")
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=tab;tab=0' [current_tab == 0 ? "class='linkOn'" : ""]>Character Settings</a>"
|
||||
dat += "<a href='?_src_=prefs;preference=tab;tab=1' [current_tab == 1 ? "class='linkOn'" : ""]>Game Preferences</a>"
|
||||
@@ -512,6 +513,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</a><br>"
|
||||
|
||||
dat += "<b>Ambient Occlusion:</b> <a href='?_src_=prefs;preference=ambientocclusion'>[ambientocclusion ? "Enabled" : "Disabled"]</a><br>"
|
||||
dat += "<b>Fit Viewport:</b> <a href='?_src_=prefs;preference=auto_fit_viewport'>[auto_fit_viewport ? "Auto" : "Manual"]</a><br>"
|
||||
|
||||
if (CONFIG_GET(flag/maprotation))
|
||||
var/p_map = preferred_map
|
||||
@@ -604,7 +606,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</center>"
|
||||
|
||||
var/datum/browser/popup = new(user, "preferences", "<div align='center'>Character Setup</div>", 640, 770)
|
||||
popup.set_content(dat)
|
||||
popup.set_content(dat.Join())
|
||||
popup.open(0)
|
||||
|
||||
#undef APPEARANCE_CATEGORY_COLUMN
|
||||
@@ -1495,6 +1497,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen
|
||||
PM.backdrop(parent.mob)
|
||||
|
||||
if("auto_fit_viewport")
|
||||
auto_fit_viewport = !auto_fit_viewport
|
||||
if(auto_fit_viewport && parent)
|
||||
parent.fit_viewport()
|
||||
|
||||
if("save")
|
||||
save_preferences()
|
||||
save_character()
|
||||
|
||||
@@ -98,6 +98,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["clientfps"] >> clientfps
|
||||
S["parallax"] >> parallax
|
||||
S["ambientocclusion"] >> ambientocclusion
|
||||
S["auto_fit_viewport"] >> auto_fit_viewport
|
||||
S["menuoptions"] >> menuoptions
|
||||
S["enable_tips"] >> enable_tips
|
||||
S["tip_delay"] >> tip_delay
|
||||
@@ -122,6 +123,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
clientfps = sanitize_integer(clientfps, 0, 1000, 0)
|
||||
parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null)
|
||||
ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion))
|
||||
auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport))
|
||||
ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form))
|
||||
ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit))
|
||||
ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION)
|
||||
@@ -168,6 +170,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["clientfps"], clientfps)
|
||||
WRITE_FILE(S["parallax"], parallax)
|
||||
WRITE_FILE(S["ambientocclusion"], ambientocclusion)
|
||||
WRITE_FILE(S["auto_fit_viewport"], auto_fit_viewport)
|
||||
WRITE_FILE(S["menuoptions"], menuoptions)
|
||||
WRITE_FILE(S["enable_tips"], enable_tips)
|
||||
WRITE_FILE(S["tip_delay"], tip_delay)
|
||||
|
||||
@@ -298,3 +298,49 @@ GLOBAL_VAR_INIT(normal_ooc_colour, OOC_COLOR)
|
||||
set desc = "View the last round end report you've seen"
|
||||
|
||||
SSticker.show_roundend_report(src, TRUE)
|
||||
|
||||
/client/verb/fit_viewport()
|
||||
set name = "Fit Viewport"
|
||||
set category = "OOC"
|
||||
set desc = "Fit the width of the map window to match the viewport"
|
||||
|
||||
// Fetch aspect ratio
|
||||
var/view_size = getviewsize(view)
|
||||
var/aspect_ratio = view_size[1] / view_size[2]
|
||||
|
||||
// Calculate desired pixel width using window size and aspect ratio
|
||||
var/sizes = params2list(winget(src, "mainwindow.split;mapwindow", "size"))
|
||||
var/map_size = splittext(sizes["mapwindow.size"], "x")
|
||||
var/height = text2num(map_size[2])
|
||||
var/desired_width = round(height * aspect_ratio)
|
||||
if (text2num(map_size[1]) == desired_width)
|
||||
// Nothing to do
|
||||
return
|
||||
|
||||
var/split_size = splittext(sizes["mainwindow.split.size"], "x")
|
||||
var/split_width = text2num(split_size[1])
|
||||
|
||||
// Calculate and apply a best estimate
|
||||
// +4 pixels are for the width of the splitter's handle
|
||||
var/pct = 100 * (desired_width + 4) / split_width
|
||||
winset(src, "mainwindow.split", "splitter=[pct]")
|
||||
|
||||
// Apply an ever-lowering offset until we finish or fail
|
||||
var/delta
|
||||
for(var/safety in 1 to 10)
|
||||
var/after_size = winget(src, "mapwindow", "size")
|
||||
map_size = splittext(after_size, "x")
|
||||
var/got_width = text2num(map_size[1])
|
||||
|
||||
if (got_width == desired_width)
|
||||
// success
|
||||
return
|
||||
else if (isnull(delta))
|
||||
// calculate a probable delta value based on the difference
|
||||
delta = 100 * (desired_width - got_width) / split_width
|
||||
else if ((delta > 0 && got_width > desired_width) || (delta < 0 && got_width < desired_width))
|
||||
// if we overshot, halve the delta and reverse direction
|
||||
delta = -delta/2
|
||||
|
||||
pct += delta
|
||||
winset(src, "mainwindow.split", "splitter=[pct]")
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
ears = /obj/item/radio/headset
|
||||
id = /obj/item/card/id
|
||||
|
||||
/datum/outfit/vr/pre_equip(mob/living/carbon/human/H)
|
||||
H.dna.species.before_equip_job(null, H)
|
||||
|
||||
/datum/outfit/vr/post_equip(mob/living/carbon/human/H)
|
||||
var/datum/job/captain/J = new/datum/job/captain
|
||||
var/obj/item/card/id/id = H.wear_id
|
||||
if (id)
|
||||
id.access |= J.get_access()
|
||||
if (istype(id))
|
||||
id.access |= get_all_accesses()
|
||||
|
||||
/datum/outfit/vr/syndicate
|
||||
name = "Syndicate VR Operative - Basic"
|
||||
|
||||
@@ -732,35 +732,3 @@
|
||||
fitted = NO_FEMALE_UNIFORM
|
||||
can_adjust = FALSE
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/under/swimsuit
|
||||
name = "black swimsuit"
|
||||
desc = "Perfect for the beach episode."
|
||||
icon_state = "swim_black"
|
||||
item_state = "bl_suit"
|
||||
item_color = "swim_black"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/swimsuit/blue
|
||||
name = "blue swimsuit"
|
||||
icon_state = "swim_blue"
|
||||
item_state = "b_suit"
|
||||
item_color = "swim_blue"
|
||||
|
||||
/obj/item/clothing/under/swimsuit/green
|
||||
name = "green swimsuit"
|
||||
icon_state = "swim_green"
|
||||
item_state = "g_suit"
|
||||
item_color = "swim_green"
|
||||
|
||||
/obj/item/clothing/under/swimsuit/purple
|
||||
name = "purple swimsuit"
|
||||
icon_state = "swim_purple"
|
||||
item_state = "p_suit"
|
||||
item_color = "swim_purple"
|
||||
|
||||
/obj/item/clothing/under/swimsuit/red
|
||||
name = "red swimsuit"
|
||||
icon_state = "swim_red"
|
||||
item_state = "r_suit"
|
||||
item_color = "swim_red"
|
||||
@@ -23,9 +23,9 @@
|
||||
var/datum/team/abductor_team/T = new
|
||||
if(T.team_number > ABDUCTOR_MAX_TEAMS)
|
||||
return MAP_ERROR
|
||||
|
||||
log_game("[scientist.mind.key] (ckey) has been selected as [T.name] abductor scientist.")
|
||||
log_game("[agent.mind.key] (ckey) has been selected as [T.name] abductor agent.")
|
||||
|
||||
log_game("[key_name(scientist)] has been selected as [T.name] abductor scientist.")
|
||||
log_game("[key_name(agent)] has been selected as [T.name] abductor agent.")
|
||||
|
||||
scientist.mind.add_antag_datum(/datum/antagonist/abductor/scientist, T)
|
||||
agent.mind.add_antag_datum(/datum/antagonist/abductor/agent, T)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
else
|
||||
D = new virus_type()
|
||||
else
|
||||
D = make_virus(max_severity, max_severity)
|
||||
D = new /datum/disease/advance/random(max_severity, max_severity)
|
||||
D.carrier = TRUE
|
||||
H.ForceContractDisease(D, FALSE, TRUE)
|
||||
|
||||
@@ -73,23 +73,3 @@
|
||||
message_admins("An event has triggered a random advanced virus outbreak on [ADMIN_LOOKUPFLW(H)]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
log_game("An event has triggered a random advanced virus outbreak on [key_name(H)]! It has these symptoms: [english_list(name_symptoms)]")
|
||||
break
|
||||
|
||||
/datum/round_event/disease_outbreak/proc/make_virus(max_symptoms, max_level)
|
||||
if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
|
||||
max_symptoms = VIRUS_SYMPTOM_LIMIT
|
||||
var/datum/disease/advance/A = new /datum/disease/advance()
|
||||
var/list/datum/symptom/possible_symptoms = list()
|
||||
for(var/symptom in subtypesof(/datum/symptom))
|
||||
var/datum/symptom/S = symptom
|
||||
if(initial(S.level) > max_level)
|
||||
continue
|
||||
if(initial(S.level) <= 0) //unobtainable symptoms
|
||||
continue
|
||||
possible_symptoms += S
|
||||
for(var/i in 1 to max_symptoms)
|
||||
var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
|
||||
if(chosen_symptom)
|
||||
var/datum/symptom/S = new chosen_symptom
|
||||
A.symptoms += S
|
||||
A.Refresh() //just in case someone already made and named the same disease
|
||||
return A
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
return 0
|
||||
|
||||
if(M == user)
|
||||
to_chat(M, "<span class='notice'>You swallow a gulp of [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] swallows a gulp of [src].</span>", "<span class='notice'>You swallow a gulp of [src].</span>")
|
||||
if(M.has_trait(TRAIT_VORACIOUS))
|
||||
M.changeNext_move(CLICK_CD_MELEE * 0.5) //chug! chug! chug!
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@
|
||||
if(user.a_intent != INTENT_HARM || !isGlass)
|
||||
return ..()
|
||||
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm [target]!</span>")
|
||||
return
|
||||
|
||||
force = 15 //Smashing bottles over someoen's head hurts.
|
||||
|
||||
|
||||
@@ -16,8 +16,9 @@
|
||||
cut_overlays()
|
||||
if(reagents.reagent_list.len)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
name = R.glass_name
|
||||
desc = R.glass_desc
|
||||
if(!renamedByPlayer)
|
||||
name = R.glass_name
|
||||
desc = R.glass_desc
|
||||
if(R.glass_icon_state)
|
||||
icon_state = R.glass_icon_state
|
||||
else
|
||||
@@ -26,8 +27,7 @@
|
||||
add_overlay(reagent_overlay)
|
||||
else
|
||||
icon_state = "glass_empty"
|
||||
name = "drinking glass"
|
||||
desc = "Your standard drinking glass."
|
||||
renamedByPlayer = FALSE //so new drinks can rename the glass
|
||||
|
||||
//Shot glasses!//
|
||||
// This lets us add shots in here instead of lumping them in with drinks because >logic //
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
return 0
|
||||
|
||||
if(M == user)
|
||||
to_chat(M, "<span class='notice'>You swallow some of contents of \the [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] swallows some of contents of \the [src].</span>", "<span class='notice'>You swallow some of contents of \the [src].</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] attempts to feed [M] from [src].</span>")
|
||||
if(!do_mob(user, M))
|
||||
|
||||
@@ -72,15 +72,15 @@
|
||||
to_chat(M, "<span class='notice'>You don't feel like eating any more junk food at the moment.</span>")
|
||||
return 0
|
||||
else if(fullness <= 50)
|
||||
to_chat(M, "<span class='notice'>You hungrily [eatverb] some of \the [src] and gobble it down!</span>")
|
||||
user.visible_message("<span class='notice'>[user] hungrily takes a [eatverb] from \the [src], gobbling it down!</span>", "<span class='notice'>You hungrily take a [eatverb] from \the [src], gobbling it down!</span>")
|
||||
else if(fullness > 50 && fullness < 150)
|
||||
to_chat(M, "<span class='notice'>You hungrily begin to [eatverb] \the [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] hungrily takes a [eatverb] from \the [src].</span>", "<span class='notice'>You hungrily take a [eatverb] from \the [src].</span>")
|
||||
else if(fullness > 150 && fullness < 500)
|
||||
to_chat(M, "<span class='notice'>You [eatverb] \the [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] takes a [eatverb] from \the [src].</span>", "<span class='notice'>You take a [eatverb] from \the [src].</span>")
|
||||
else if(fullness > 500 && fullness < 600)
|
||||
to_chat(M, "<span class='notice'>You unwillingly [eatverb] a bit of \the [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] unwillingly takes a [eatverb] of a bit of \the [src].</span>", "<span class='notice'>You unwillingly take a [eatverb] of a bit of \the [src].</span>")
|
||||
else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
to_chat(M, "<span class='warning'>You cannot force any more of \the [src] to go down your throat!</span>")
|
||||
user.visible_message("<span class='warning'>[user] cannot force any more of \the [src] to go down [user.p_their()] throat!</span>", "<span class='warning'>You cannot force any more of \the [src] to go down your throat!</span>")
|
||||
return 0
|
||||
if(M.has_trait(TRAIT_VORACIOUS))
|
||||
M.changeNext_move(CLICK_CD_MELEE * 0.5) //nom nom nom
|
||||
|
||||
@@ -633,6 +633,13 @@
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
mix_message = "The rice grains ferment into a clear, sweet-smelling liquid."
|
||||
|
||||
/datum/chemical_reaction/peppermint_patty
|
||||
name = "Peppermint Patty"
|
||||
id = "peppermint_patty"
|
||||
results = list("peppermint_patty" = 10)
|
||||
required_reagents = list("hot_coco" = 6, "creme_de_cacao" = 1, "creme_de_menthe" = 1, "vodka" = 1, "menthol" = 1)
|
||||
mix_message = "The coco turns mint green just as the strong scent hits your nose."
|
||||
|
||||
/datum/chemical_reaction/alexander
|
||||
name = "Alexander"
|
||||
id = "alexander"
|
||||
|
||||
@@ -198,7 +198,7 @@ function output(message, flag) {
|
||||
if (flag !== 'internal')
|
||||
opts.lastPang = Date.now();
|
||||
|
||||
message = byondDecode(message)
|
||||
message = byondDecode(message).trim();
|
||||
|
||||
//The behemoth of filter-code (for Admin message filters)
|
||||
//Note: This is proooobably hella inefficient
|
||||
@@ -296,27 +296,30 @@ function output(message, flag) {
|
||||
opts.messageCount--; //I guess the count should only ever equal the limit
|
||||
}
|
||||
|
||||
// Create the element - if combining is off, we use it, and if it's on, we
|
||||
// might discard it bug need to check its text content. Some messages vary
|
||||
// only in HTML markup, have the same text content, and should combine.
|
||||
var entry = document.createElement('div');
|
||||
entry.innerHTML = message;
|
||||
var trimmed_message = entry.textContent || entry.innerText || "";
|
||||
|
||||
var handled = false;
|
||||
var trimmed_message = message.trim()
|
||||
var lastmessages = $messages.children('div.entry:last-child');
|
||||
if (opts.messageCombining && lastmessages.length && $last_message)
|
||||
{
|
||||
if($last_message == trimmed_message)
|
||||
{
|
||||
if(lastmessages.children('span.r').length)
|
||||
{
|
||||
var current_value = parseInt(lastmessages.children('span.r').text())
|
||||
lastmessages.children('span.r').text(current_value+1)
|
||||
if (opts.messageCombining) {
|
||||
var lastmessages = $messages.children('div.entry:last-child').last();
|
||||
if (lastmessages.length && $last_message && $last_message == trimmed_message) {
|
||||
var badge = lastmessages.children('.r').last();
|
||||
if (badge.length) {
|
||||
badge = badge.detach();
|
||||
badge.text(parseInt(badge.text()) + 1);
|
||||
} else {
|
||||
badge = $('<span/>', {'class': 'r', 'text': 2});
|
||||
}
|
||||
else
|
||||
{
|
||||
lastmessages.append($('<span/>', { 'class': 'r', 'text': 2}));
|
||||
}
|
||||
var insertedBadge = $(lastmessages).find('.r');
|
||||
insertedBadge.animate({
|
||||
lastmessages.html(message);
|
||||
lastmessages.append(badge);
|
||||
badge.animate({
|
||||
"font-size": "0.9em"
|
||||
}, 100, function() {
|
||||
insertedBadge.animate({
|
||||
badge.animate({
|
||||
"font-size": "0.7em"
|
||||
}, 100);
|
||||
});
|
||||
@@ -325,10 +328,8 @@ function output(message, flag) {
|
||||
}
|
||||
}
|
||||
|
||||
if(!handled)
|
||||
{
|
||||
if (!handled) {
|
||||
//Actually append the message
|
||||
var entry = document.createElement('div');
|
||||
entry.className = 'entry';
|
||||
|
||||
if (filteredOut) {
|
||||
@@ -337,7 +338,6 @@ function output(message, flag) {
|
||||
}
|
||||
|
||||
$last_message = trimmed_message;
|
||||
entry.innerHTML = trimmed_message;
|
||||
$messages[0].appendChild(entry);
|
||||
$(entry).find("img.icon").error(iconError);
|
||||
//Actually do the snap
|
||||
|
||||
@@ -30,16 +30,19 @@
|
||||
bullet_bounce_sound = null
|
||||
|
||||
/turf/open/floor/holofloor/beach
|
||||
gender = PLURAL
|
||||
name = "sand"
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
icon_state = "sand"
|
||||
bullet_bounce_sound = null
|
||||
|
||||
/turf/open/floor/holofloor/beach/coast_t
|
||||
gender = NEUTER
|
||||
name = "coastline"
|
||||
icon_state = "sandwater_t"
|
||||
|
||||
/turf/open/floor/holofloor/beach/coast_b
|
||||
gender = NEUTER
|
||||
name = "coastline"
|
||||
icon_state = "sandwater_b"
|
||||
|
||||
@@ -57,6 +60,7 @@
|
||||
. = ..()
|
||||
|
||||
/turf/open/floor/holofloor/basalt
|
||||
gender = PLURAL
|
||||
name = "basalt"
|
||||
icon_state = "basalt0"
|
||||
|
||||
@@ -67,7 +71,7 @@
|
||||
set_basalt_light(src)
|
||||
|
||||
/turf/open/floor/holofloor/space
|
||||
name = "Space"
|
||||
name = "\proper space"
|
||||
icon = 'icons/turf/space.dmi'
|
||||
icon_state = "0"
|
||||
|
||||
@@ -76,7 +80,7 @@
|
||||
. = ..()
|
||||
|
||||
/turf/open/floor/holofloor/hyperspace
|
||||
name = "hyperspace"
|
||||
name = "\proper hyperspace"
|
||||
icon = 'icons/turf/space.dmi'
|
||||
icon_state = "speedspace_ns_1"
|
||||
bullet_bounce_sound = null
|
||||
@@ -110,6 +114,7 @@
|
||||
queue_smooth(src)
|
||||
|
||||
/turf/open/floor/holofloor/snow
|
||||
gender = PLURAL
|
||||
name = "snow"
|
||||
desc = "Looks cold."
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
@@ -122,6 +127,7 @@
|
||||
initial_gas_mix = "nob=7500;TEMP=2.7"
|
||||
|
||||
/turf/open/floor/holofloor/asteroid
|
||||
gender = PLURAL
|
||||
name = "asteroid sand"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "asteroid"
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
rating = M.rating
|
||||
maxwater = tmp_capacity * 50 // Up to 300
|
||||
maxnutri = tmp_capacity * 5 // Up to 30
|
||||
waterlevel = maxwater
|
||||
nutrilevel = 3
|
||||
|
||||
/obj/machinery/hydroponics/Destroy()
|
||||
if(myseed)
|
||||
@@ -741,7 +739,7 @@
|
||||
else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample))
|
||||
if(!myseed)
|
||||
if(istype(O, /obj/item/seeds/kudzu))
|
||||
investigate_log("had Kudzu planted in it by [user.ckey]([user]) at ([x],[y],[z])","kudzu")
|
||||
investigate_log("had Kudzu planted in it by [key_name(user)] at [AREACOORD(src)]","kudzu")
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You plant [O].</span>")
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample))
|
||||
if(!TR.myseed)
|
||||
if(istype(O, /obj/item/seeds/kudzu))
|
||||
investigate_log("had Kudzu planted in it by [acting_object] at ([x],[y],[z])","kudzu")
|
||||
investigate_log("had Kudzu planted in it by [acting_object] at [AREACOORD(src)]","kudzu")
|
||||
acting_object.visible_message("<span class='notice'>[acting_object] plants [O].</span>")
|
||||
TR.dead = 0
|
||||
TR.myseed = O
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
if(ACCESS_ENGINE)
|
||||
return "Engineering"
|
||||
if(ACCESS_ENGINE_EQUIP)
|
||||
return "Power Equipment"
|
||||
return "Power and Engineering Equipment"
|
||||
if(ACCESS_MAINT_TUNNELS)
|
||||
return "Maintenance"
|
||||
if(ACCESS_EXTERNAL_AIRLOCKS)
|
||||
|
||||
@@ -419,7 +419,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
|
||||
alert("Database error encountered uploading to Archive")
|
||||
return
|
||||
else
|
||||
log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs")
|
||||
log_game("[key_name(usr)] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs")
|
||||
alert("Upload Complete. Uploaded title will be unavailable for printing for a short period")
|
||||
if(href_list["newspost"])
|
||||
if(!GLOB.news_network)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
H.robust_searching = 1
|
||||
H.friends += user
|
||||
H.attack_same = 1
|
||||
log_game("[user] has revived hostile mob [target] with a malfunctioning lazarus injector")
|
||||
log_game("[key_name(user)] has revived hostile mob [key_name(target)] with a malfunctioning lazarus injector")
|
||||
else
|
||||
H.attack_same = 0
|
||||
loaded = 0
|
||||
|
||||
@@ -1231,7 +1231,7 @@
|
||||
INVOKE_ASYNC(src, .proc/prepare_icon_update)
|
||||
beacon.icon_state = "hierophant_tele_off"
|
||||
return
|
||||
add_logs(user, beacon, "teleported self from ([source.x],[source.y],[source.z]) to")
|
||||
add_logs(user, beacon, "teleported self from [AREACOORD(source)] to")
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, user)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
@@ -1278,7 +1278,7 @@
|
||||
return
|
||||
M.visible_message("<span class='hierophant_warning'>[M] fades in!</span>")
|
||||
if(user != M)
|
||||
add_logs(user, M, "teleported", null, "from ([source.x],[source.y],[source.z])")
|
||||
add_logs(user, M, "teleported", null, "from [AREACOORD(source)]")
|
||||
|
||||
/obj/item/hierophant_club/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay
|
||||
if(!T)
|
||||
|
||||
@@ -777,6 +777,32 @@
|
||||
icon_state = "female_commie"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit
|
||||
name = "Ladies Black Swimsuit"
|
||||
icon_state = "swim_black"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_blue
|
||||
name = "Ladies Blue Swimsuit"
|
||||
icon_state = "swim_blue"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_green
|
||||
name = "Ladies Green Swimsuit"
|
||||
icon_state = "swim_green"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_purple
|
||||
name = "Ladies Purple Swimsuit"
|
||||
icon_state = "swim_purple"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_red
|
||||
name = "Ladies Red Swimsuit"
|
||||
icon_state = "swim_red"
|
||||
gender = FEMALE
|
||||
|
||||
|
||||
////////////////////////////
|
||||
// Undershirt Definitions //
|
||||
////////////////////////////
|
||||
|
||||
@@ -97,7 +97,7 @@ Doesn't work on other aliens/AI.*/
|
||||
return 0
|
||||
var/msg = sanitize(input("Message:", "Alien Whisper") as text|null)
|
||||
if(msg)
|
||||
log_talk(user,"AlienWhisper: [key_name(user)]->[M.key] : [msg]",LOGSAY)
|
||||
log_talk(user,"AlienWhisper: [key_name(user)]->[key_name(M)] : [msg]",LOGSAY)
|
||||
to_chat(M, "<span class='noticealien'>You hear a strange, alien voice in your head...</span>[msg]")
|
||||
to_chat(user, "<span class='noticealien'>You said: \"[msg]\" to [M]</span>")
|
||||
for(var/ded in GLOB.dead_mob_list)
|
||||
|
||||
@@ -224,9 +224,6 @@
|
||||
return thermal_protection_flags
|
||||
|
||||
/mob/living/carbon/human/proc/get_cold_protection(temperature)
|
||||
if(has_trait(TRAIT_RESISTCOLD))
|
||||
return TRUE
|
||||
|
||||
temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K.
|
||||
var/thermal_protection_flags = get_cold_protection_flags(temperature)
|
||||
|
||||
@@ -378,10 +375,10 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1
|
||||
if(prob(5))
|
||||
say(pick(GLOB.ballmer_good_msg))
|
||||
SSresearch.science_tech.add_points_all(TECHWEB_POINT_TYPE_DEFAULT, (BALLMER_POINTS * ballmer_percent))
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS * ballmer_percent))
|
||||
if(drunkenness > 26) // by this point you're into windows ME territory
|
||||
if(prob(5))
|
||||
SSresearch.science_tech.remove_points_all(TECHWEB_POINT_TYPE_DEFAULT, BALLMER_POINTS)
|
||||
SSresearch.science_tech.remove_point_list(list(TECHWEB_POINT_TYPE_GENERIC = BALLMER_POINTS))
|
||||
say(pick(GLOB.ballmer_windows_me_msg))
|
||||
|
||||
if(drunkenness >= 41)
|
||||
|
||||
@@ -951,7 +951,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.update_inv_w_uniform()
|
||||
H.update_inv_wear_suit()
|
||||
else
|
||||
if(H.overeatduration > 500)
|
||||
if(H.overeatduration >= 100)
|
||||
to_chat(H, "<span class='danger'>You suddenly feel blubbery!</span>")
|
||||
H.add_trait(TRAIT_FAT, OBESITY)
|
||||
H.update_inv_w_uniform()
|
||||
@@ -1143,7 +1143,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
if(H.has_trait(TRAIT_FAT))
|
||||
. += (1.5 - flight)
|
||||
if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT)
|
||||
if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD))
|
||||
. += (BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR
|
||||
return .
|
||||
|
||||
@@ -1535,7 +1535,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.emote("scream")
|
||||
H.apply_damage(burn_damage, BURN)
|
||||
|
||||
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(GLOB.mutations_list[COLDRES] in H.dna.mutations))
|
||||
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD))
|
||||
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
|
||||
switch(H.bodytemperature)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "android"
|
||||
say_mod = "states"
|
||||
species_traits = list(NOBLOOD)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
meat = null
|
||||
damage_overlay_type = "synth"
|
||||
|
||||
@@ -675,7 +675,7 @@
|
||||
|
||||
var/msg = sanitize(input("Message:", "Telepathy") as text|null)
|
||||
if(msg)
|
||||
log_talk(H,"SlimeTelepathy: [key_name(H)]->[M.key] : [msg]",LOGSAY)
|
||||
log_talk(H,"SlimeTelepathy: [key_name(H)]->[key_name(M)] : [msg]",LOGSAY)
|
||||
to_chat(M, "<span class='notice'>You hear an alien voice in your head... </span><font color=#008CA2>[msg]</font>")
|
||||
to_chat(H, "<span class='notice'>You telepathically said: \"[msg]\" to [M]</span>")
|
||||
for(var/dead in GLOB.dead_mob_list)
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
adjust_bodytemperature(min((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX))
|
||||
|
||||
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !has_trait(TRAIT_RESISTHEAT))
|
||||
switch(bodytemperature)
|
||||
if(360 to 400)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 1)
|
||||
@@ -96,7 +96,7 @@
|
||||
else
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
||||
|
||||
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT)
|
||||
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !has_trait(TRAIT_RESISTCOLD))
|
||||
if(!istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||
switch(bodytemperature)
|
||||
if(200 to 260)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE)
|
||||
. = ..()
|
||||
if(user.reagents.get_reagent("menthol"))
|
||||
if(user.reagents.get_reagent("menthol") || user.reagents.get_reagent("peppermint_patty"))
|
||||
return FALSE
|
||||
|
||||
/datum/emote/living/dance
|
||||
|
||||
@@ -428,6 +428,7 @@
|
||||
heal_overall_damage(INFINITY, INFINITY, INFINITY, FALSE, FALSE, TRUE) //heal brute and burn dmg on both organic and robotic limbs, and update health right away.
|
||||
ExtinguishMob()
|
||||
fire_stacks = 0
|
||||
confused = 0
|
||||
update_canmove()
|
||||
GET_COMPONENT(mood, /datum/component/mood)
|
||||
if (mood)
|
||||
|
||||
@@ -857,14 +857,17 @@
|
||||
if(health < maxHealth*0.5) //Gradual break down of modules as more damage is sustained
|
||||
if(uneq_module(held_items[3]))
|
||||
playsound(loc, 'sound/machines/warning-buzzer.ogg', 50, 1, 1)
|
||||
visible_message("<span class='warning'>[src] sounds an alarm! \"SYSTEM ERROR: Module 3 OFFLINE.\"</span>", "<span class='userdanger'>SYSTEM ERROR: Module 3 OFFLINE.</span>")
|
||||
audible_message("<span class='warning'>[src] sounds an alarm! \"SYSTEM ERROR: Module 3 OFFLINE.\"</span>")
|
||||
to_chat(src, "<span class='userdanger'>SYSTEM ERROR: Module 3 OFFLINE.</span>")
|
||||
if(health < 0)
|
||||
if(uneq_module(held_items[2]))
|
||||
visible_message("<span class='warning'>[src] sounds an alarm! \"SYSTEM ERROR: Module 2 OFFLINE.\"</span>", "<span class='userdanger'>SYSTEM ERROR: Module 2 OFFLINE.</span>")
|
||||
audible_message("<span class='warning'>[src] sounds an alarm! \"SYSTEM ERROR: Module 2 OFFLINE.\"</span>")
|
||||
to_chat(src, "<span class='userdanger'>SYSTEM ERROR: Module 2 OFFLINE.</span>")
|
||||
playsound(loc, 'sound/machines/warning-buzzer.ogg', 60, 1, 1)
|
||||
if(health < -maxHealth*0.5)
|
||||
if(uneq_module(held_items[1]))
|
||||
visible_message("<span class='warning'>[src] sounds an alarm! \"CRITICAL ERROR: All modules OFFLINE.\"</span>", "<span class='userdanger'>CRITICAL ERROR: All modules OFFLINE.</span>")
|
||||
audible_message("<span class='warning'>[src] sounds an alarm! \"CRITICAL ERROR: All modules OFFLINE.\"</span>")
|
||||
to_chat(src, "<span class='userdanger'>CRITICAL ERROR: All modules OFFLINE.</span>")
|
||||
playsound(loc, 'sound/machines/warning-buzzer.ogg', 75, 1, 1)
|
||||
|
||||
/mob/living/silicon/robot/update_sight()
|
||||
|
||||
@@ -395,22 +395,22 @@
|
||||
to_chat(usr, "<span class='boldnotice'>You must be dead to use this!</span>")
|
||||
return
|
||||
|
||||
log_game("[usr.name]/[usr.key] used abandon mob.")
|
||||
log_game("[key_name(usr)] used abandon mob.")
|
||||
|
||||
to_chat(usr, "<span class='boldnotice'>Please roleplay correctly!</span>")
|
||||
|
||||
if(!client)
|
||||
log_game("[usr.key] AM failed due to disconnect.")
|
||||
log_game("[key_name(usr)] AM failed due to disconnect.")
|
||||
return
|
||||
client.screen.Cut()
|
||||
client.screen += client.void
|
||||
if(!client)
|
||||
log_game("[usr.key] AM failed due to disconnect.")
|
||||
log_game("[key_name(usr)] AM failed due to disconnect.")
|
||||
return
|
||||
|
||||
var/mob/dead/new_player/M = new /mob/dead/new_player()
|
||||
if(!client)
|
||||
log_game("[usr.key] AM failed due to disconnect.")
|
||||
log_game("[key_name(usr)] AM failed due to disconnect.")
|
||||
qdel(M)
|
||||
return
|
||||
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
else
|
||||
O.name = input
|
||||
to_chat(user, "\The [oldname] has been successfully been renamed to \the [input].")
|
||||
O.renamedByPlayer = TRUE
|
||||
|
||||
if(penchoice == "Change description")
|
||||
var/input = stripped_input(user,"Describe \the [O.name] here", ,"", 100)
|
||||
|
||||
@@ -140,7 +140,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
return
|
||||
user.visible_message("[user] cuts the cable.", "<span class='notice'>You cut the cable.</span>")
|
||||
stored.add_fingerprint(user)
|
||||
investigate_log("was cut by [key_name(usr, usr.client)] in [AREACOORD(src)]", INVESTIGATE_WIRES)
|
||||
investigate_log("was cut by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES)
|
||||
deconstruct()
|
||||
return
|
||||
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
var/obj/machinery/atmospherics/components/binary/circulator/cold_circ
|
||||
var/obj/machinery/atmospherics/components/binary/circulator/hot_circ
|
||||
|
||||
//note: these currently only support EAST and WEST
|
||||
var/cold_dir = WEST
|
||||
var/hot_dir = EAST
|
||||
|
||||
var/lastgen = 0
|
||||
var/lastgenlev = -1
|
||||
var/lastcirc = "00"
|
||||
@@ -19,34 +15,18 @@
|
||||
|
||||
/obj/machinery/power/generator/Initialize(mapload)
|
||||
. = ..()
|
||||
var/obj/machinery/atmospherics/components/binary/circulator/circpath = /obj/machinery/atmospherics/components/binary/circulator
|
||||
cold_circ = locate(circpath) in get_step(src, cold_dir)
|
||||
hot_circ = locate(circpath) in get_step(src, hot_dir)
|
||||
find_circs()
|
||||
connect_to_network()
|
||||
SSair.atmos_machinery += src
|
||||
|
||||
if(cold_circ)
|
||||
switch(cold_dir)
|
||||
if(EAST)
|
||||
cold_circ.side = circpath.CIRC_RIGHT
|
||||
if(WEST)
|
||||
cold_circ.side = circpath.CIRC_LEFT
|
||||
cold_circ.update_icon()
|
||||
|
||||
if(hot_circ)
|
||||
switch(hot_dir)
|
||||
if(EAST)
|
||||
hot_circ.side = circpath.CIRC_RIGHT
|
||||
if(WEST)
|
||||
hot_circ.side = circpath.CIRC_LEFT
|
||||
hot_circ.update_icon()
|
||||
|
||||
if(!cold_circ || !hot_circ)
|
||||
stat |= BROKEN
|
||||
|
||||
update_icon()
|
||||
component_parts = list(new /obj/item/circuitboard/machine/generator)
|
||||
|
||||
/obj/machinery/power/generator/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS )
|
||||
|
||||
/obj/machinery/power/generator/Destroy()
|
||||
kill_circs()
|
||||
SSair.atmos_machinery -= src
|
||||
return ..()
|
||||
|
||||
@@ -61,7 +41,8 @@
|
||||
if(L != 0)
|
||||
add_overlay(image('icons/obj/power.dmi', "teg-op[L]"))
|
||||
|
||||
add_overlay("teg-oc[lastcirc]")
|
||||
if(hot_circ && cold_circ)
|
||||
add_overlay("teg-oc[lastcirc]")
|
||||
|
||||
|
||||
#define GENRATE 800 // generator output coefficient from Q
|
||||
@@ -122,7 +103,7 @@
|
||||
lastgen -= power_output
|
||||
..()
|
||||
|
||||
/obj/machinery/power/generator/proc/get_menu(include_link = 1)
|
||||
/obj/machinery/power/generator/proc/get_menu(include_link = TRUE)
|
||||
var/t = ""
|
||||
if(!powernet)
|
||||
t += "<span class='bad'>Unable to connect to the power network!</span>"
|
||||
@@ -147,8 +128,12 @@
|
||||
t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa<BR>"
|
||||
|
||||
t += "</div>"
|
||||
else if(!hot_circ && cold_circ)
|
||||
t += "<span class='bad'>Unable to locate hot circulator!</span>"
|
||||
else if(hot_circ && !cold_circ)
|
||||
t += "<span class='bad'>Unable to locate cold circulator!</span>"
|
||||
else
|
||||
t += "<span class='bad'>Unable to locate all parts!</span>"
|
||||
t += "<span class='bad'>Unable to locate any parts!</span>"
|
||||
if(include_link)
|
||||
t += "<BR><A href='?src=[REF(src)];close=1'>Close</A>"
|
||||
|
||||
@@ -167,10 +152,80 @@
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=teg")
|
||||
usr.unset_machine()
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/power/generator/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/power/generator/proc/find_circs()
|
||||
kill_circs()
|
||||
var/list/circs = list()
|
||||
var/obj/machinery/atmospherics/components/binary/circulator/C
|
||||
var/circpath = /obj/machinery/atmospherics/components/binary/circulator
|
||||
if(dir == NORTH || dir == SOUTH)
|
||||
C = locate(circpath) in get_step(src, EAST)
|
||||
if(C && C.dir == WEST)
|
||||
circs += C
|
||||
|
||||
C = locate(circpath) in get_step(src, WEST)
|
||||
if(C && C.dir == EAST)
|
||||
circs += C
|
||||
|
||||
else
|
||||
C = locate(circpath) in get_step(src, NORTH)
|
||||
if(C && C.dir == SOUTH)
|
||||
circs += C
|
||||
|
||||
C = locate(circpath) in get_step(src, SOUTH)
|
||||
if(C && C.dir == NORTH)
|
||||
circs += C
|
||||
|
||||
if(circs.len)
|
||||
for(C in circs)
|
||||
if(C.mode == CIRCULATOR_COLD && !cold_circ)
|
||||
cold_circ = C
|
||||
C.generator = src
|
||||
else if(C.mode == CIRCULATOR_HOT && !hot_circ)
|
||||
hot_circ = C
|
||||
C.generator = src
|
||||
|
||||
/obj/machinery/power/generator/wrench_act(mob/living/user, obj/item/I)
|
||||
if(!panel_open)
|
||||
return
|
||||
anchored = !anchored
|
||||
I.play_tool_sound(src)
|
||||
if(!anchored)
|
||||
kill_circs()
|
||||
to_chat(user, "<span class='notice'>You [anchored?"secure":"unsecure"] [src].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/generator/multitool_act(mob/living/user, obj/item/I)
|
||||
if(!anchored)
|
||||
return
|
||||
find_circs()
|
||||
to_chat(user, "<span class='notice'>You update [src]'s circulator links.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/generator/screwdriver_act(mob/user, obj/item/I)
|
||||
panel_open = !panel_open
|
||||
I.play_tool_sound(src)
|
||||
to_chat(user, "<span class='notice'>You [panel_open?"open":"close"] the panel on [src].</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/generator/crowbar_act(mob/user, obj/item/I)
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/generator/on_deconstruction()
|
||||
kill_circs()
|
||||
|
||||
/obj/machinery/power/generator/proc/kill_circs()
|
||||
if(hot_circ)
|
||||
hot_circ.generator = null
|
||||
hot_circ = null
|
||||
if(cold_circ)
|
||||
cold_circ.generator = null
|
||||
cold_circ = null
|
||||
|
||||
@@ -250,7 +250,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
|
||||
|
||||
if(href_list["gentoggle"])
|
||||
breaker = !breaker
|
||||
investigate_log("was toggled [breaker ? "<font color='green'>ON</font>" : "<font color='red'>OFF</font>"] by [usr.key].", INVESTIGATE_GRAVITY)
|
||||
investigate_log("was toggled [breaker ? "<font color='green'>ON</font>" : "<font color='red'>OFF</font>"] by [key_name(usr)].", INVESTIGATE_GRAVITY)
|
||||
set_power()
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
@@ -296,7 +296,8 @@
|
||||
cut_overlays()
|
||||
switch(status) // set icon_states
|
||||
if(LIGHT_OK)
|
||||
if(emergency_mode)
|
||||
var/area/A = get_area(src)
|
||||
if(emergency_mode || (A && A.fire))
|
||||
icon_state = "[base_state]_emergency"
|
||||
else
|
||||
icon_state = "[base_state]"
|
||||
@@ -319,9 +320,16 @@
|
||||
on = FALSE
|
||||
emergency_mode = FALSE
|
||||
if(on)
|
||||
var/BR = nightshift_enabled? nightshift_brightness : brightness
|
||||
var/PO = nightshift_enabled? nightshift_light_power : bulb_power
|
||||
var/CO = nightshift_enabled? nightshift_light_color : bulb_colour
|
||||
var/BR = brightness
|
||||
var/PO = bulb_power
|
||||
var/CO = bulb_colour
|
||||
var/area/A = get_area(src)
|
||||
if (A && A.fire)
|
||||
CO = bulb_emergency_colour
|
||||
else if (nightshift_enabled)
|
||||
BR = nightshift_brightness
|
||||
PO = nightshift_light_power
|
||||
CO = nightshift_light_color
|
||||
var/matching = light && BR == light.light_range && PO == light.light_power && CO == light.light_color
|
||||
if(!matching)
|
||||
switchcount++
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
if(loaded_tank)
|
||||
fuel = loaded_tank.air_contents.gases[/datum/gas/plasma]
|
||||
fuel = fuel ? fuel[MOLES] : 0
|
||||
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"<font color='red'>It is empty</font>"].", INVESTIGATE_SINGULO)
|
||||
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [key_name(user)]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"<font color='red'>It is empty</font>"].", INVESTIGATE_SINGULO)
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The controls are locked!</span>")
|
||||
|
||||
@@ -78,7 +78,7 @@ field_generator power level display
|
||||
"<span class='notice'>You turn on [src].</span>", \
|
||||
"<span class='italics'>You hear heavy droning.</span>")
|
||||
turn_on()
|
||||
investigate_log("<font color='green'>activated</font> by [user.key].", INVESTIGATE_SINGULO)
|
||||
investigate_log("<font color='green'>activated</font> by [key_name(user)].", INVESTIGATE_SINGULO)
|
||||
|
||||
add_fingerprint(user)
|
||||
else
|
||||
|
||||
@@ -348,12 +348,12 @@
|
||||
switch(action)
|
||||
if("tryinput")
|
||||
input_attempt = !input_attempt
|
||||
log_smes(usr.ckey)
|
||||
log_smes(usr)
|
||||
update_icon()
|
||||
. = TRUE
|
||||
if("tryoutput")
|
||||
output_attempt = !output_attempt
|
||||
log_smes(usr.ckey)
|
||||
log_smes(usr)
|
||||
update_icon()
|
||||
. = TRUE
|
||||
if("input")
|
||||
@@ -377,7 +377,7 @@
|
||||
. = TRUE
|
||||
if(.)
|
||||
input_level = CLAMP(target, 0, input_level_max)
|
||||
log_smes(usr.ckey)
|
||||
log_smes(usr)
|
||||
if("output")
|
||||
var/target = params["target"]
|
||||
var/adjust = text2num(params["adjust"])
|
||||
@@ -399,10 +399,10 @@
|
||||
. = TRUE
|
||||
if(.)
|
||||
output_level = CLAMP(target, 0, output_level_max)
|
||||
log_smes(usr.ckey)
|
||||
log_smes(usr)
|
||||
|
||||
/obj/machinery/power/smes/proc/log_smes(user = "")
|
||||
investigate_log("input/output; [input_level>output_level?"<font color='green'>":"<font color='red'>"][input_level]/[output_level]</font> | Charge: [charge] | Output-mode: [output_attempt?"<font color='green'>on</font>":"<font color='red'>off</font>"] | Input-mode: [input_attempt?"<font color='green'>auto</font>":"<font color='red'>off</font>"] by [user]", INVESTIGATE_SINGULO)
|
||||
/obj/machinery/power/smes/proc/log_smes(mob/user)
|
||||
investigate_log("input/output; [input_level>output_level?"<font color='green'>":"<font color='red'>"][input_level]/[output_level]</font> | Charge: [charge] | Output-mode: [output_attempt?"<font color='green'>on</font>":"<font color='red'>off</font>"] | Input-mode: [input_attempt?"<font color='green'>auto</font>":"<font color='red'>off</font>"] by [user ? key_name(user) : "outside forces"]", INVESTIGATE_SINGULO)
|
||||
|
||||
|
||||
/obj/machinery/power/smes/emp_act(severity)
|
||||
@@ -419,7 +419,7 @@
|
||||
if (charge < 0)
|
||||
charge = 0
|
||||
update_icon()
|
||||
log_smes("an emp")
|
||||
log_smes()
|
||||
|
||||
/obj/machinery/power/smes/engineering
|
||||
charge = 1.5e6 // Engineering starts with some charge for singulo
|
||||
|
||||
@@ -255,9 +255,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
sleep(10)
|
||||
continue
|
||||
else if(i > 50)
|
||||
speaking = "[i/10] seconds remain before causality stabilization."
|
||||
speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization."
|
||||
else
|
||||
speaking = "[i/10]..."
|
||||
speaking = "[i*0.1]..."
|
||||
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
|
||||
sleep(10)
|
||||
|
||||
@@ -480,7 +480,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
if(!istype(L))
|
||||
return FALSE
|
||||
if(!istype(Proj.firer, /obj/machinery/power/emitter))
|
||||
investigate_log("has been hit by [Proj] fired by [Proj.firer]", INVESTIGATE_SUPERMATTER)
|
||||
investigate_log("has been hit by [Proj] fired by [key_name(Proj.firer)]", INVESTIGATE_SUPERMATTER)
|
||||
if(Proj.flag != "bullet")
|
||||
power += Proj.damage * config_bullet_energy
|
||||
if(!has_been_powered)
|
||||
@@ -563,7 +563,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
if(!cause)
|
||||
cause = "contact"
|
||||
nom.visible_message(vis_msg, mob_msg, "<span class='italics'>You hear an unearthly noise as a wave of heat washes over you.</span>")
|
||||
investigate_log("has been attacked ([cause]) by [nom]", INVESTIGATE_SUPERMATTER)
|
||||
investigate_log("has been attacked ([cause]) by [key_name(nom)]", INVESTIGATE_SUPERMATTER)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
Consume(nom)
|
||||
|
||||
@@ -582,7 +582,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
user.visible_message("<span class='danger'>As [user] touches \the [src] with \a [W], silence fills the room...</span>",\
|
||||
"<span class='userdanger'>You touch \the [src] with \the [W], and everything suddenly goes silent.</span>\n<span class='notice'>\The [W] flashes into dust as you flinch away from \the [src].</span>",\
|
||||
"<span class='italics'>Everything suddenly goes silent.</span>")
|
||||
investigate_log("has been attacked ([W]) by [user]", INVESTIGATE_SUPERMATTER)
|
||||
investigate_log("has been attacked ([W]) by [key_name(user)]", INVESTIGATE_SUPERMATTER)
|
||||
Consume(W)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
@@ -629,7 +629,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
//Some poor sod got eaten, go ahead and irradiate people nearby.
|
||||
radiation_pulse(src, 3000, 2, TRUE)
|
||||
for(var/mob/living/L in range(10))
|
||||
investigate_log("has irradiated [L] after consuming [AM].", INVESTIGATE_SUPERMATTER)
|
||||
investigate_log("has irradiated [key_name(L)] after consuming [AM].", INVESTIGATE_SUPERMATTER)
|
||||
if(L in view())
|
||||
L.show_message("<span class='danger'>As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.</span>", 1,\
|
||||
"<span class='danger'>The unearthly ringing subsides and you notice you have new radiation burns.</span>", 2)
|
||||
|
||||
@@ -131,4 +131,8 @@
|
||||
var/turf_mag = get_turf(src)
|
||||
for(var/obj/item/ammo in stored_ammo)
|
||||
ammo.forceMove(turf_mag)
|
||||
stored_ammo -= ammo
|
||||
stored_ammo -= ammo
|
||||
|
||||
/obj/item/ammo_box/magazine/handle_atom_del(atom/A)
|
||||
stored_ammo -= A
|
||||
update_icon()
|
||||
|
||||
@@ -342,7 +342,7 @@
|
||||
var/state = "bayonet" //Generic state.
|
||||
if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state?
|
||||
state = bayonet.icon_state
|
||||
var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi'
|
||||
var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi'
|
||||
knife_overlay = mutable_appearance(bayonet_icons, state)
|
||||
knife_overlay.pixel_x = knife_x_offset
|
||||
knife_overlay.pixel_y = knife_y_offset
|
||||
@@ -522,3 +522,8 @@
|
||||
if(zoomable)
|
||||
azoom = new()
|
||||
azoom.gun = src
|
||||
|
||||
/obj/item/gun/handle_atom_del(atom/A)
|
||||
if(A == chambered)
|
||||
chambered = null
|
||||
update_icon()
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
if(on)
|
||||
if(beaker)
|
||||
if(beaker && beaker.reagents.total_volume)
|
||||
beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume)
|
||||
beaker.reagents.handle_reactions()
|
||||
|
||||
|
||||
@@ -1559,6 +1559,21 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "cup of sake"
|
||||
glass_desc = "A traditional cup of sake."
|
||||
|
||||
/datum/reagent/consumable/ethanol/peppermint_patty
|
||||
name = "Peppermint Patty"
|
||||
id = "peppermint_patty"
|
||||
description = "This lightly alcoholic drink combines the benefits of menthol and cocoa."
|
||||
color = "#45ca7a"
|
||||
taste_description = "mint and chocolate"
|
||||
boozepwr = 25
|
||||
glass_icon_state = "peppermint_patty"
|
||||
glass_name = "Peppermint Patty"
|
||||
glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night."
|
||||
|
||||
/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/M)
|
||||
M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/alexander
|
||||
name = "Alexander"
|
||||
id = "alexander"
|
||||
@@ -1591,7 +1606,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
to_chat(L,"<span class='notice'>You notice [mighty_shield] looks worn again. Weird.</span>")
|
||||
..()
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/sidecar
|
||||
name = "Sidecar"
|
||||
id = "sidecar"
|
||||
@@ -1648,7 +1662,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "mojito"
|
||||
glass_name = "Mojito"
|
||||
glass_desc = "A drink that looks as refreshing as it tastes."
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/fernet
|
||||
name = "Fernet"
|
||||
id = "fernet"
|
||||
@@ -1697,9 +1711,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fanciulli"
|
||||
glass_name = "glass of fanciulli"
|
||||
glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet."
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/M)
|
||||
|
||||
|
||||
M.nutrition = max(M.nutrition - 5, 0)
|
||||
M.overeatduration = 0
|
||||
return ..()
|
||||
|
||||
@@ -180,7 +180,7 @@ Borg Shaker
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("beer", "orangejuice", "grenadine" ,"limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "fernet")
|
||||
reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "fernet", "milk", "coffee", "banana", "lemonjuice")
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user)
|
||||
return //Can't inject stuff with a shaker, can we? //not with that attitude
|
||||
|
||||
@@ -226,25 +226,10 @@
|
||||
desc = "A small bottle of Romerol. The REAL zombie powder."
|
||||
list_reagents = list("romerol" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/flu_virion
|
||||
name = "Flu virion culture bottle"
|
||||
desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/flu
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/epiglottis_virion
|
||||
name = "Epiglottis virion culture bottle"
|
||||
desc = "A small bottle. Contains Epiglottis virion culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/voice_change
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/liver_enhance_virion
|
||||
name = "Liver enhancement virion culture bottle"
|
||||
desc = "A small bottle. Contains liver enhancement virion culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/heal
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/hallucigen_virion
|
||||
name = "Hallucigen virion culture bottle"
|
||||
desc = "A small bottle. Contains hallucigen virion culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/hallucigen
|
||||
/obj/item/reagent_containers/glass/bottle/random_virus
|
||||
name = "Experimental disease culture bottle"
|
||||
desc = "A small bottle. Contains an untested viral culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/random
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/pierrot_throat
|
||||
name = "Pierrot's Throat culture bottle"
|
||||
@@ -255,6 +240,11 @@
|
||||
name = "Rhinovirus culture bottle"
|
||||
desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/cold
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/flu_virion
|
||||
name = "Flu virion culture bottle"
|
||||
desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
|
||||
spawned_disease = /datum/disease/advance/flu
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/retrovirus
|
||||
name = "Retrovirus culture bottle"
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
var/mob/living/target = locate(/mob/living) in oview(7,src)
|
||||
if(target)
|
||||
var/obj/item/throwing = loaded_item
|
||||
investigate_log("Experimentor has thrown [loaded_item] at [target]", INVESTIGATE_EXPERIMENTOR)
|
||||
investigate_log("Experimentor has thrown [loaded_item] at [key_name(target)]", INVESTIGATE_EXPERIMENTOR)
|
||||
ejectItem()
|
||||
if(throwing)
|
||||
throwing.throw_at(target, 10, 1)
|
||||
@@ -371,7 +371,7 @@
|
||||
throwSmoke(loc)
|
||||
for(var/mob/living/m in oview(1, src))
|
||||
m.apply_damage(5, BURN, pick(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_PRECISE_GROIN))
|
||||
investigate_log("Experimentor has dealt minor burn damage to [m]", INVESTIGATE_EXPERIMENTOR)
|
||||
investigate_log("Experimentor has dealt minor burn damage to [key_name(m)]", INVESTIGATE_EXPERIMENTOR)
|
||||
ejectItem()
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if(exp == SCANTYPE_COLD)
|
||||
|
||||
@@ -762,9 +762,11 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
|
||||
/datum/status_effect/stabilized/gold/tick()
|
||||
var/obj/item/slimecross/stabilized/gold/linked = linked_extract
|
||||
if(!familiar)
|
||||
if(QDELETED(familiar))
|
||||
familiar = new linked.mob_type(get_turf(owner.loc))
|
||||
familiar.name = linked.mob_name
|
||||
familiar.del_on_death = TRUE
|
||||
familiar.copy_known_languages_from(owner, FALSE)
|
||||
if(linked.saved_mind)
|
||||
linked.saved_mind.transfer_to(familiar)
|
||||
familiar.ckey = linked.saved_mind.key
|
||||
|
||||
@@ -98,6 +98,7 @@ Stabilized extracts:
|
||||
colour = "gold"
|
||||
var/mob_type
|
||||
var/datum/mind/saved_mind
|
||||
var/mob_name = "Familiar"
|
||||
|
||||
/obj/item/slimecross/stabilized/gold/proc/generate_mobtype()
|
||||
var/static/list/mob_spawn_pets = list()
|
||||
@@ -114,20 +115,30 @@ Stabilized extracts:
|
||||
generate_mobtype()
|
||||
|
||||
/obj/item/slimecross/stabilized/gold/attack_self(mob/user)
|
||||
var/choice = input(user, "Which do you want to reset?", "Familiar Adjustment") as null|anything in list("Familiar Species", "Familiar Sentience")
|
||||
var/choice = input(user, "Which do you want to reset?", "Familiar Adjustment") as null|anything in list("Familiar Location", "Familiar Species", "Familiar Sentience", "Familiar Name")
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.has_status_effect(/datum/status_effect/stabilized/gold))
|
||||
L.remove_status_effect(/datum/status_effect/stabilized/gold)
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(choice == "Familiar Location")
|
||||
to_chat(user, "<span class='notice'>You prod [src], and it shudders slightly.</span>")
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(choice == "Familiar Species")
|
||||
to_chat(user, "<span class='notice'>You squeeze [src], and a shape seems to shift around inside.</span>")
|
||||
generate_mobtype()
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(choice == "Familiar Sentience")
|
||||
to_chat(user, "<span class='notice'>You poke [src], and it lets out a glowing pulse.</span>")
|
||||
saved_mind = null
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(choice == "Familiar Name")
|
||||
var/newname = copytext(sanitize(input(user, "Would you like to change the name of [mob_name]", "Name change", mob_name) as null|text),1,MAX_NAME_LEN)
|
||||
if(newname)
|
||||
mob_name = newname
|
||||
to_chat(user, "<span class='notice'>You speak softly into [src], and it shakes slightly in response.</span>")
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/slimecross/stabilized/oil
|
||||
colour = "oil"
|
||||
|
||||
@@ -177,7 +177,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
|
||||
log_game("Legion took damage while the necropolis gate was closed and released itself.")
|
||||
else
|
||||
message_admins("[user ? ADMIN_LOOKUPFLW(user):"Unknown"] has released Legion!")
|
||||
log_game("[user ? key_name(user):"Unknown"] released Legion.")
|
||||
log_game("[user ? key_name(user) : "Unknown"] released Legion.")
|
||||
|
||||
var/sound/legion_sound = sound('sound/creatures/legion_spawn.ogg')
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
|
||||
@@ -434,7 +434,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
else if (!(R in product_records))
|
||||
vend_ready = 1
|
||||
message_admins("Vending machine exploit attempted by [key_name(usr, usr.client)]!")
|
||||
message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!")
|
||||
return
|
||||
|
||||
if (R.amount <= 0)
|
||||
|
||||
Reference in New Issue
Block a user