Merge branch 'master' into var/const-to-define
@@ -35447,7 +35447,6 @@
|
||||
/area/library)
|
||||
"bmF" = (
|
||||
/obj/structure/cult/archives,
|
||||
/obj/item/videocam,
|
||||
/obj/machinery/light_switch{
|
||||
pixel_y = -25
|
||||
},
|
||||
|
||||
@@ -486,7 +486,7 @@ turf/simulated/proc/consider_superconductivity(starting)
|
||||
|
||||
turf/simulated/proc/radiate_to_spess() //Radiate excess tile heat to space
|
||||
if(temperature > T0C) //Considering 0 degC as te break even point for radiation in and out
|
||||
var/delta_temperature = (temperature_archived - 2.7) //hardcoded space temperature
|
||||
var/delta_temperature = (temperature_archived - TCMB) //hardcoded space temperature
|
||||
if((heat_capacity > 0) && (abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER))
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
|
||||
@@ -107,6 +107,7 @@
|
||||
#define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir)
|
||||
#define COMSIG_MOVABLE_CROSS "movable_cross" //from base of atom/movable/Cross(): (/atom/movable)
|
||||
#define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable)
|
||||
#define COMSIG_CROSSED_MOVABLE "crossed_movable" //when we cross over something (calling Crossed() on that atom)
|
||||
#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable)
|
||||
#define COMSIG_MOVABLE_UNCROSS "movable_uncross" //from base of atom/movable/Uncross(): (/atom/movable)
|
||||
#define COMPONENT_MOVABLE_BLOCK_UNCROSS 1
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
object_overlays += item_overlay
|
||||
add_overlay(object_overlays)
|
||||
|
||||
/obj/screen/inventory/Click()
|
||||
/obj/screen/inventory/Click(location, control, params)
|
||||
// At this point in client Click() code we have passed the 1/10 sec check and little else
|
||||
// We don't even know if it's a middle click
|
||||
if(world.time <= usr.next_move)
|
||||
@@ -371,6 +371,12 @@
|
||||
return 1
|
||||
if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
return 1
|
||||
|
||||
if(hud?.mymob && slot_id)
|
||||
var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id)
|
||||
if(inv_item)
|
||||
return inv_item.Click(location, control, params)
|
||||
|
||||
if(usr.attack_ui(slot_id))
|
||||
usr.update_inv_l_hand(0)
|
||||
usr.update_inv_r_hand(0)
|
||||
|
||||
@@ -11,7 +11,8 @@ SUBSYSTEM_DEF(chat)
|
||||
/datum/controller/subsystem/chat/fire()
|
||||
for(var/i in payload)
|
||||
var/client/C = i
|
||||
C << output(payload[C], "browseroutput:output")
|
||||
if(C)
|
||||
C << output(payload[C], "browseroutput:output")
|
||||
payload -= C
|
||||
|
||||
if(MC_TICK_CHECK)
|
||||
|
||||
@@ -220,6 +220,7 @@
|
||||
// This is automatically called when something enters your square
|
||||
/atom/movable/Crossed(atom/movable/AM, oldloc)
|
||||
SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM)
|
||||
SEND_SIGNAL(AM, COMSIG_CROSSED_MOVABLE, src)
|
||||
|
||||
/atom/movable/Bump(atom/A, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump().
|
||||
if(A && yes)
|
||||
|
||||
@@ -226,7 +226,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
|
||||
if(istype(T, /turf/simulated/floor))
|
||||
T.ChangeTurf(/turf/simulated/floor/engine/cult)
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
T.ChangeTurf(/turf/simulated/wall/cult)
|
||||
T.ChangeTurf(/turf/simulated/wall/cult/artificer)
|
||||
else
|
||||
var/turf/simulated/floor/engine/cult/F = safepick(cultturfs)
|
||||
if(F)
|
||||
|
||||
@@ -208,12 +208,14 @@
|
||||
text += "<br><span class='big'><b>The abductors were:</b></span><br>"
|
||||
for(var/datum/mind/abductor_mind in abductors)
|
||||
text += printplayer(abductor_mind)
|
||||
text += "<br>"
|
||||
text += printobjectives(abductor_mind)
|
||||
text += "<br>"
|
||||
if(abductees.len)
|
||||
text += "<br><span class='big'><b>The abductees were:</b></span><br>"
|
||||
for(var/datum/mind/abductee_mind in abductees)
|
||||
text += printplayer(abductee_mind)
|
||||
text += "<br>"
|
||||
text += printobjectives(abductee_mind)
|
||||
text += "<br>"
|
||||
to_chat(world, text)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
jobtype = /datum/job/ntspecops
|
||||
uniform = /obj/item/clothing/under/rank/centcom/captain
|
||||
suit = /obj/item/clothing/suit/space/deathsquad/officer
|
||||
back = /obj/item/storage/backpack/security
|
||||
back = /obj/item/storage/backpack/ert/security
|
||||
belt = /obj/item/storage/belt/military/assault
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
|
||||
@@ -182,9 +182,9 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
|
||||
/obj/item/gun/energy/gun/blueshield = 1
|
||||
)
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
backpack = /obj/item/storage/backpack/security
|
||||
satchel = /obj/item/storage/backpack/satchel_sec
|
||||
dufflebag = /obj/item/storage/backpack/duffel/security
|
||||
backpack = /obj/item/storage/backpack/blueshield
|
||||
satchel = /obj/item/storage/backpack/satchel_blueshield
|
||||
dufflebag = /obj/item/storage/backpack/duffel/blueshield
|
||||
|
||||
|
||||
/datum/job/judge
|
||||
|
||||
@@ -294,6 +294,7 @@
|
||||
genemutcheck(H, COMICBLOCK, null, MUTCHK_FORCED)
|
||||
H.dna.default_blocks.Add(COMICBLOCK)
|
||||
H.check_mutations = TRUE
|
||||
H.add_language("Clownish")
|
||||
|
||||
//action given to antag clowns
|
||||
/datum/action/innate/toggle_clumsy
|
||||
@@ -420,6 +421,8 @@
|
||||
r_pocket = /obj/item/barcodescanner
|
||||
l_hand = /obj/item/storage/bag/books
|
||||
pda = /obj/item/pda/librarian
|
||||
backpack_contents = list(
|
||||
/obj/item/videocam = 1)
|
||||
|
||||
/datum/job/barber
|
||||
title = "Barber"
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
name = "Chameleon flag"
|
||||
desc = "A poor recreation of the official NT flag. It seems to shimmer a little."
|
||||
icon_state = "ntflag"
|
||||
origin_tech = "syndicate=4;magnets=4"
|
||||
origin_tech = "syndicate=1;magnets=4"
|
||||
var/updated_icon_state = null
|
||||
var/used = FALSE
|
||||
var/obj/item/grenade/boobytrap = null
|
||||
|
||||
@@ -193,6 +193,12 @@
|
||||
icon_state = "viropack"
|
||||
item_state = "viropack"
|
||||
|
||||
/obj/item/storage/backpack/blueshield
|
||||
name = "blueshield backpack"
|
||||
desc = "A robust backpack issued to Nanotrasen's finest."
|
||||
icon_state = "blueshieldpack"
|
||||
item_state = "blueshieldpack"
|
||||
|
||||
/*
|
||||
* Satchel Types
|
||||
*/
|
||||
@@ -287,6 +293,11 @@
|
||||
icon_state = "satchel-cap"
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/backpack/satchel_blueshield
|
||||
name = "blueshield satchel"
|
||||
desc = "A robust satchel issued to Nanotrasen's finest."
|
||||
icon_state = "satchel-blueshield"
|
||||
|
||||
/obj/item/storage/backpack/satchel_flat
|
||||
name = "smuggler's satchel"
|
||||
desc = "A very slim satchel that can easily fit into tight spaces."
|
||||
@@ -531,12 +542,19 @@
|
||||
icon_state = "duffel-clown"
|
||||
item_state = "duffel-clown"
|
||||
|
||||
obj/item/storage/backpack/duffel/blueshield
|
||||
name = "blueshield duffelbag"
|
||||
desc = "A robust duffelbag issued to Nanotrasen's finest."
|
||||
icon_state = "duffel-blueshield"
|
||||
item_state = "duffel-blueshield"
|
||||
|
||||
//ERT backpacks.
|
||||
/obj/item/storage/backpack/ert
|
||||
name = "emergency response team backpack"
|
||||
desc = "A spacious backpack with lots of pockets, used by members of the Nanotrasen Emergency Response Team."
|
||||
icon_state = "ert_commander"
|
||||
item_state = "backpack"
|
||||
max_combined_w_class = 30
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
//Commander
|
||||
|
||||
@@ -270,7 +270,7 @@
|
||||
desc = "A prescription packet containing six marijuana cigarettes."
|
||||
icon_state = "medpacket"
|
||||
item_state = "cigpacket"
|
||||
default_reagents = list("thc" = 15)
|
||||
default_reagents = list("thc" = 15, "cbd" = 15)
|
||||
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_uplift
|
||||
name = "\improper Uplift Smooth packet"
|
||||
|
||||
@@ -78,10 +78,5 @@
|
||||
if(href_list["read"])
|
||||
var/obj/item/paper/P = locate(href_list["read"])
|
||||
if((P && P.loc == src))
|
||||
if(!( istype(usr, /mob/living/carbon/human) ))
|
||||
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY><TT>[stars(P.info)]</TT></BODY></HTML>", "window=[P.name]")
|
||||
onclose(usr, "[P.name]")
|
||||
else
|
||||
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY><TT>[P.info]</TT></BODY></HTML>", "window=[P.name]")
|
||||
onclose(usr, "[P.name]")
|
||||
P.show_content(usr)
|
||||
return
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
smooth = SMOOTH_MORE | SMOOTH_BORDER
|
||||
canSmoothWith = null
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/airless
|
||||
temperature = 2.7
|
||||
opacity = 1
|
||||
density = TRUE
|
||||
blocks_air = TRUE
|
||||
|
||||
@@ -4,6 +4,7 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG
|
||||
|
||||
/world/New()
|
||||
SetupLogs()
|
||||
enable_debugger() // Enable the extools debugger
|
||||
log_world("World loaded at [time_stamp()]")
|
||||
log_world("[GLOB.vars.len - GLOB.gvars_datum_in_built_vars.len] global variables")
|
||||
|
||||
@@ -468,3 +469,10 @@ proc/establish_db_connection()
|
||||
return 1
|
||||
|
||||
#undef FAILED_DB_CONNECTION_CUTOFF
|
||||
|
||||
// Proc to enable the extools debugger, which allows breakpoints, live var checking, and many other useful tools
|
||||
// The DLL is injected into the env by visual studio code. If not running VSCode, the proc will not call the initialization
|
||||
/world/proc/enable_debugger()
|
||||
var/dll = world.GetConfig("env", "EXTOOLS_DLL")
|
||||
if (dll)
|
||||
call(dll, "debug_initialize")()
|
||||
@@ -2164,7 +2164,7 @@
|
||||
var/obj/pageobj = B.contents[page]
|
||||
data += "<A href='?src=[UID()];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
|
||||
|
||||
usr << browse(data, "window=[B.name]")
|
||||
usr << browse(data, "window=PaperBundle[B.UID()]")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</span>")
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
msg = pencode_to_html(msg)
|
||||
msg = admin_pencode_to_html(msg)
|
||||
to_chat(world, "[msg]")
|
||||
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
|
||||
message_admins("<span class='boldnotice'>GlobalNarrate: [key_name_admin(usr)]: [msg]<BR></span>", 1)
|
||||
|
||||
@@ -439,7 +439,7 @@
|
||||
|
||||
/datum/lore/organization/gov/synth
|
||||
name = "Synthetic Union"
|
||||
short_name = "Synthtica"
|
||||
short_name = "Synthetica"
|
||||
acronym = "SYN"
|
||||
desc = "A defensive coalition of synthetics based out of New Canaan,\
|
||||
the Synthetic Union is an organization which aims to establish and consolidate synthetic rights across the galaxy.\
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in GLOB.all_vent_pumps)
|
||||
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
|
||||
if(!temp_vent.parent)
|
||||
// Issue happening more often with vents. Log and continue. Delete once solved
|
||||
log_debug("spider_terror/start(), vent has no parent: [temp_vent], qdeled: [QDELETED(temp_vent)], loc: [temp_vent.loc]")
|
||||
continue
|
||||
if(temp_vent.parent.other_atmosmch.len > 50)
|
||||
vents += temp_vent
|
||||
var/spider_type
|
||||
|
||||
@@ -18,6 +18,9 @@ var/global/list/unused_trade_stations = list("sol")
|
||||
return
|
||||
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED)
|
||||
event_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused")
|
||||
// if the docking request was refused, fire another major event in 60 seconds
|
||||
var/list/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR]
|
||||
EC.next_event_time = world.time + (60 * 10)
|
||||
return
|
||||
|
||||
var/list/spawnlocs = list()
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/obj/item/seeds/cannabis/death,
|
||||
/obj/item/seeds/cannabis/white,
|
||||
/obj/item/seeds/cannabis/ultimate)
|
||||
reagents_add = list("thc" = 0.15)
|
||||
reagents_add = list("thc" = 0.15, "cbd" = 0.15)
|
||||
|
||||
|
||||
/obj/item/seeds/cannabis/rainbow
|
||||
@@ -28,7 +28,7 @@
|
||||
plantname = "Rainbow Weed"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow
|
||||
mutatelist = list()
|
||||
reagents_add = list("lsd" = 0.15, "thc" = 0.15)
|
||||
reagents_add = list("lsd" = 0.15, "thc" = 0.15, "cbd" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
/obj/item/seeds/cannabis/death
|
||||
@@ -39,7 +39,7 @@
|
||||
plantname = "Deathweed"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/death
|
||||
mutatelist = list()
|
||||
reagents_add = list("cyanide" = 0.35, "thc" = 0.15)
|
||||
reagents_add = list("cyanide" = 0.35, "thc" = 0.15, "cbd" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
/obj/item/seeds/cannabis/white
|
||||
@@ -50,7 +50,7 @@
|
||||
plantname = "Lifeweed"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/white
|
||||
mutatelist = list()
|
||||
reagents_add = list("omnizine" = 0.35, "thc" = 0.15)
|
||||
reagents_add = list("omnizine" = 0.35, "thc" = 0.15, "cbd" = 0.15)
|
||||
rarity = 40
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
"haloperidol" = 0.15,
|
||||
"methamphetamine" = 0.15,
|
||||
"thc" = 0.15,
|
||||
"cbd" = 0.15,
|
||||
"psilocybin" = 0.15,
|
||||
"hairgrownium" = 0.15,
|
||||
"ectoplasm" = 0.15,
|
||||
|
||||
@@ -141,7 +141,8 @@
|
||||
|
||||
spawn(30)
|
||||
if(!QDELETED(src))
|
||||
var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(loc))
|
||||
var/turf/T = get_turf(user)
|
||||
var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(T)
|
||||
K.maxHealth += round(seed.endurance / 3)
|
||||
K.melee_damage_lower += round(seed.potency / 10)
|
||||
K.melee_damage_upper += round(seed.potency / 10)
|
||||
@@ -150,4 +151,6 @@
|
||||
K.visible_message("<span class='notice'>The Killer Tomato growls as it suddenly awakens.</span>")
|
||||
if(user)
|
||||
user.unEquip(src)
|
||||
message_admins("[key_name_admin(user)] released a killer tomato at [ADMIN_COORDJMP(T)]")
|
||||
log_game("[key_name(user)] released a killer tomato at [COORD(T)]")
|
||||
qdel(src)
|
||||
|
||||
@@ -79,5 +79,5 @@ In all, this is a lot like the monkey code. /N
|
||||
if(M.is_adult)
|
||||
damage = rand(10, 40)
|
||||
adjustBruteLoss(damage)
|
||||
add_attack_logs(src, M, "Slime'd for [damage] damage")
|
||||
add_attack_logs(M, src, "Slime'd for [damage] damage")
|
||||
updatehealth("slime attack")
|
||||
@@ -585,6 +585,14 @@
|
||||
message = "<B>[src]</B> makes a weak noise"
|
||||
m_type = 2
|
||||
|
||||
if("hsigh", "hsighs")
|
||||
if(!muzzled)
|
||||
message = "<B>[src]</B> sighs contentedly."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a [pick("chill", "relaxed")] noise"
|
||||
m_type = 2
|
||||
|
||||
if("laugh", "laughs")
|
||||
var/M = handle_emote_param(param)
|
||||
if(miming)
|
||||
|
||||
@@ -454,12 +454,6 @@
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
|
||||
/mob/living/carbon/human/Crossed(atom/movable/AM, oldloc)
|
||||
var/mob/living/simple_animal/bot/mulebot/MB = AM
|
||||
if(istype(MB))
|
||||
MB.RunOver(src)
|
||||
|
||||
// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
|
||||
/mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
var/obj/item/pda/pda = wear_id
|
||||
|
||||
@@ -542,7 +542,7 @@
|
||||
if(COLDRES in mutations)
|
||||
return 1 //Fully protected from the cold.
|
||||
|
||||
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.
|
||||
temperature = max(temperature, TCMB) //There is an occasional bug where the temperature is miscalculated in areas 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)
|
||||
|
||||
var/thermal_protection = 0.0
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
..()
|
||||
|
||||
/datum/species/plasmaman/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "plasma")
|
||||
if(R.id == "plasma" || R.id == "plasma_dust")
|
||||
H.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
|
||||
H.adjustPlasma(20)
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
return FALSE
|
||||
|
||||
if(stat != DEAD)
|
||||
add_attack_logs(src, M, "Slime'd")
|
||||
add_attack_logs(M, src, "Slime'd")
|
||||
M.do_attack_animation(src)
|
||||
visible_message("<span class='danger'>\The [M.name] glomps [src]!</span>", "<span class='userdanger'>\The [M.name] glomps you!</span>")
|
||||
return TRUE
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
|
||||
mulebot_count++
|
||||
set_suffix(suffix ? suffix : "#[mulebot_count]")
|
||||
RegisterSignal(src, COMSIG_CROSSED_MOVABLE, .proc/human_squish_check)
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/Destroy()
|
||||
unload(0)
|
||||
@@ -866,6 +867,11 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/proc/human_squish_check(src, atom/movable/AM)
|
||||
if(!ishuman(AM))
|
||||
return
|
||||
RunOver(AM)
|
||||
|
||||
#undef SIGH
|
||||
#undef ANNOYED
|
||||
#undef DELIGHT
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
else
|
||||
data = "<div id='markdown'>[infolinks ? info_links : info]</div>[stamps]"
|
||||
if(view)
|
||||
var/datum/browser/popup = new(user, name, , paper_width, paper_height)
|
||||
var/datum/browser/popup = new(user, "Paper[UID()]", , paper_width, paper_height)
|
||||
popup.stylesheets = list()
|
||||
popup.set_content(data)
|
||||
if(!stars)
|
||||
|
||||
@@ -63,13 +63,13 @@
|
||||
qdel(W)
|
||||
else
|
||||
if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon))
|
||||
usr << browse("", "window=[name]") //Closes the dialog
|
||||
usr << browse("", "window=PaperBundle[UID()]") //Closes the dialog
|
||||
P = src[page]
|
||||
P.attackby(W, user, params)
|
||||
|
||||
|
||||
update_icon()
|
||||
if(winget(usr, "[name]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME
|
||||
if(winget(usr, "PaperBundle[UID()]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME
|
||||
attack_self(usr) //Update the browsed page.
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
@@ -125,7 +125,7 @@
|
||||
if(istype(src[page], /obj/item/paper))
|
||||
var/obj/item/paper/P = W
|
||||
dat += P.show_content(usr, view = 0)
|
||||
usr << browse(dat, "window=[name]")
|
||||
usr << browse(dat, "window=PaperBundle[UID()]")
|
||||
else if(istype(src[page], /obj/item/photo))
|
||||
var/obj/item/photo/P = W
|
||||
usr << browse_rsc(P.img, "tmp_photo.png")
|
||||
@@ -133,7 +133,7 @@
|
||||
+ "<body style='overflow:hidden'>" \
|
||||
+ "<div> <img src='tmp_photo.png' width = '180'" \
|
||||
+ "[P.scribble ? "<div><br> Written on the back:<br><i>[P.scribble]</i>" : ""]"\
|
||||
+ "</body></html>", "window=[name]")
|
||||
+ "</body></html>", "window=PaperBundle[UID()]")
|
||||
|
||||
/obj/item/paper_bundle/attack_self(mob/user as mob)
|
||||
src.show_content(user)
|
||||
|
||||
@@ -81,13 +81,22 @@
|
||||
. += "<span class='notice'>It is too far away.</span>"
|
||||
|
||||
/obj/item/photo/proc/show(mob/user as mob)
|
||||
usr << browse_rsc(img, "tmp_photo.png")
|
||||
var/icon/img_shown = new/icon(img)
|
||||
var/colormatrix = user.get_screen_colour()
|
||||
// Apply colorblindness effects, if any.
|
||||
if(islist(colormatrix))
|
||||
img_shown.MapColors(
|
||||
colormatrix[1], colormatrix[2], colormatrix[3],
|
||||
colormatrix[4], colormatrix[5], colormatrix[6],
|
||||
colormatrix[7], colormatrix[8], colormatrix[9],
|
||||
)
|
||||
usr << browse_rsc(img_shown, "tmp_photo.png")
|
||||
usr << browse("<html><head><title>[name]</title></head>" \
|
||||
+ "<body style='overflow:hidden;margin:0;text-align:center'>" \
|
||||
+ "<img src='tmp_photo.png' width='[64*photo_size]' style='-ms-interpolation-mode:nearest-neighbor' />" \
|
||||
+ "[scribble ? "<br>Written on the back:<br><i>[scribble]</i>" : ""]"\
|
||||
+ "</body></html>", "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]")
|
||||
onclose(usr, "[name]")
|
||||
+ "</body></html>", "window=Photo[UID()];size=[64*photo_size]x[scribble ? 400 : 64*photo_size]")
|
||||
onclose(usr, "Photo[UID()]")
|
||||
return
|
||||
|
||||
/obj/item/photo/verb/rename()
|
||||
|
||||
@@ -22,30 +22,29 @@
|
||||
energy = 50
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/New(loc)
|
||||
..()
|
||||
/obj/effect/accelerated_particle/Initialize(loc)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/propagate), 1)
|
||||
RegisterSignal(src, COMSIG_CROSSED_MOVABLE, .proc/try_irradiate)
|
||||
RegisterSignal(src, COMSIG_MOVABLE_CROSSED, .proc/try_irradiate)
|
||||
QDEL_IN(src, movement_range)
|
||||
|
||||
addtimer(CALLBACK(src, .proc/move), 1)
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/Bump(atom/A)
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
toxmob(A)
|
||||
else if(istype(A, /obj/machinery/the_singularitygen))
|
||||
var/obj/machinery/the_singularitygen/S = A
|
||||
S.energy += energy
|
||||
else if(istype(A, /obj/singularity))
|
||||
var/obj/singularity/S = A
|
||||
S.energy += energy
|
||||
else if(istype(A, /obj/structure/blob))
|
||||
var/obj/structure/blob/B = A
|
||||
B.take_damage(energy * 0.6)
|
||||
movement_range = 0
|
||||
|
||||
/obj/effect/accelerated_particle/Crossed(atom/A, oldloc)
|
||||
/obj/effect/accelerated_particle/proc/try_irradiate(src, atom/A)
|
||||
if(isliving(A))
|
||||
toxmob(A)
|
||||
var/mob/living/L = A
|
||||
L.apply_effect((energy * 6), IRRADIATE, 0)
|
||||
else if(istype(A, /obj/machinery/the_singularitygen))
|
||||
var/obj/machinery/the_singularitygen/S = A
|
||||
S.energy += energy
|
||||
else if(istype(A, /obj/structure/blob))
|
||||
var/obj/structure/blob/B = A
|
||||
B.take_damage(energy * 0.6)
|
||||
movement_range = 0
|
||||
|
||||
/obj/effect/accelerated_particle/Bump(obj/singularity/S)
|
||||
if(!istype(S))
|
||||
return ..()
|
||||
S.energy += energy
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/ex_act(severity)
|
||||
@@ -54,17 +53,7 @@
|
||||
/obj/effect/accelerated_particle/singularity_pull()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/proc/toxmob(mob/living/M)
|
||||
M.apply_effect((energy * 6), IRRADIATE, 0)
|
||||
|
||||
/obj/effect/accelerated_particle/proc/move()
|
||||
/obj/effect/accelerated_particle/proc/propagate()
|
||||
addtimer(CALLBACK(src, .proc/propagate), 1)
|
||||
if(!step(src,dir))
|
||||
forceMove(get_step(src, dir))
|
||||
movement_range--
|
||||
if(movement_range == 0)
|
||||
qdel(src)
|
||||
else
|
||||
sleep(speed)
|
||||
move()
|
||||
@@ -98,7 +98,7 @@
|
||||
return
|
||||
if(!chambered)
|
||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
||||
if(cell.charge >= shot.e_cost) //if there's enough power in the cell cell...
|
||||
if(cell.charge >= shot.e_cost) //if there's enough power in the WEAPON'S cell...
|
||||
chambered = shot //...prepare a new shot based on the current ammo type selected
|
||||
if(!chambered.BB)
|
||||
chambered.newshot()
|
||||
@@ -111,6 +111,11 @@
|
||||
chambered = null //either way, released the prepared shot
|
||||
newshot()
|
||||
|
||||
/obj/item/gun/energy/process_fire(atom/target, mob/living/user, message = 1, params, zone_override, bonus_spread = 0)
|
||||
if(!chambered && can_shoot())
|
||||
process_chamber()
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/energy/proc/select_fire(mob/living/user)
|
||||
select++
|
||||
if(select > ammo_type.len)
|
||||
@@ -193,6 +198,9 @@
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/energy/proc/robocharge()
|
||||
if(cell.charge == cell.maxcharge)
|
||||
// No point in recharging a weapon's cell that is already at 100%. That would just waste borg cell power for no reason.
|
||||
return
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R && R.cell)
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
I.receive_damage(-5, FALSE)
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
E.mend_fracture()
|
||||
E.internal_bleeding = FALSE
|
||||
M.SetEyeBlind(0, FALSE)
|
||||
M.CureNearsighted(FALSE)
|
||||
M.CureBlind(FALSE)
|
||||
|
||||
@@ -1192,15 +1192,16 @@
|
||||
taste_description = "motor oil"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/M)
|
||||
if(!M.isSynthetic())
|
||||
if(!(M.dna.species.reagent_tag & PROCESS_SYN))
|
||||
holder.remove_reagent(id, 3.6) //gets removed from organics very fast
|
||||
if(prob(25))
|
||||
holder.remove_reagent(id, 15)
|
||||
M.fakevomit()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
|
||||
if(M.isSynthetic())
|
||||
if(M.dna.species.reagent_tag & PROCESS_SYN)
|
||||
return
|
||||
if(method == REAGENT_INGEST)
|
||||
to_chat(M, pick("<span class = 'danger'>That was awful!</span>", "<span class = 'danger'>Yuck!</span>"))
|
||||
|
||||
@@ -525,6 +525,32 @@
|
||||
M.Drowsy(10)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/cbd
|
||||
name = "Cannabidiol"
|
||||
id = "cbd"
|
||||
description = "A non-psychoactive phytocannabinoid extracted from the cannabis plant."
|
||||
reagent_state = LIQUID
|
||||
color = "#00e100"
|
||||
taste_description = "relaxation"
|
||||
|
||||
/datum/reagent/cbd/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(prob(5))
|
||||
M.emote(pick("hsigh", "yawn"))
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='notice'>[pick("You feel peaceful.", "You breathe softly.", "You feel chill.", "You vibe.")]</span>")
|
||||
if(prob(10))
|
||||
M.AdjustConfused(-5)
|
||||
update_flags |= M.SetWeakened(0, FALSE)
|
||||
if(volume >= 70 && prob(25))
|
||||
if(M.reagents.has_reagent("thc") <= 20)
|
||||
M.Drowsy(10)
|
||||
if(prob(25))
|
||||
update_flags |= M.adjustBruteLoss(-2, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-2, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
|
||||
/datum/reagent/fliptonium
|
||||
name = "Fliptonium"
|
||||
id = "fliptonium"
|
||||
|
||||
@@ -872,14 +872,6 @@
|
||||
build_path = /obj/item/assembly/mousetrap
|
||||
category = list("initial", "Miscellaneous")
|
||||
|
||||
/datum/design/videocam
|
||||
name = "Video Camera"
|
||||
id = "videocam"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 120, MAT_GLASS = 60)
|
||||
build_path = /obj/item/videocam
|
||||
category = list("initial", "Miscellaneous")
|
||||
|
||||
/datum/design/logic_board
|
||||
name = "Logic Circuit"
|
||||
id = "logic_board"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
shuttleId = "specops"
|
||||
possible_destinations = "specops_home;specops_away;specops_custom"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
|
||||
/obj/machinery/computer/camera_advanced/shuttle_docker/ert
|
||||
name = "specops navigation computer"
|
||||
@@ -16,6 +17,7 @@
|
||||
x_offset = 0
|
||||
y_offset = 0
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
access_tcomms = FALSE
|
||||
access_construction = FALSE
|
||||
access_mining = FALSE
|
||||
@@ -9,6 +9,7 @@
|
||||
shuttleId = "syndicate"
|
||||
possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom"
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
flags = NODECONSTRUCT
|
||||
var/challenge = FALSE
|
||||
var/moved = FALSE
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
shuttleId = "skipjack"
|
||||
possible_destinations = "skipjack_away;skipjack_ne;skipjack_nw;skipjack_se;skipjack_sw;skipjack_z5;skipjack_custom"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
|
||||
/obj/machinery/computer/camera_advanced/shuttle_docker/vox
|
||||
name = "skipjack navigation computer"
|
||||
@@ -16,4 +17,5 @@
|
||||
x_offset = -10
|
||||
y_offset = -10
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags = NODECONSTRUCT
|
||||
access_derelict = TRUE
|
||||
|
||||
@@ -39,9 +39,9 @@
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop
|
||||
name = "Anti-drop implant"
|
||||
desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle."
|
||||
var/active = 0
|
||||
var/l_hand_ignore = 0
|
||||
var/r_hand_ignore = 0
|
||||
var/active = FALSE
|
||||
var/l_hand_ignore = FALSE
|
||||
var/r_hand_ignore = FALSE
|
||||
var/obj/item/l_hand_obj = null
|
||||
var/obj/item/r_hand_obj = null
|
||||
implant_color = "#DE7E00"
|
||||
@@ -56,17 +56,17 @@
|
||||
r_hand_obj = owner.r_hand
|
||||
if(l_hand_obj)
|
||||
if(owner.l_hand.flags & NODROP)
|
||||
l_hand_ignore = 1
|
||||
l_hand_ignore = TRUE
|
||||
else
|
||||
owner.l_hand.flags |= NODROP
|
||||
l_hand_ignore = 0
|
||||
l_hand_ignore = FALSE
|
||||
|
||||
if(r_hand_obj)
|
||||
if(owner.r_hand.flags & NODROP)
|
||||
r_hand_ignore = 1
|
||||
r_hand_ignore = TRUE
|
||||
else
|
||||
owner.r_hand.flags |= NODROP
|
||||
r_hand_ignore = 0
|
||||
r_hand_ignore = FALSE
|
||||
|
||||
if(!l_hand_obj && !r_hand_obj)
|
||||
to_chat(owner, "<span class='notice'>You are not holding any items, your hands relax...</span>")
|
||||
@@ -102,12 +102,15 @@
|
||||
A = pick(oview(range))
|
||||
L_item.throw_at(A, range, 2)
|
||||
to_chat(owner, "<span class='notice'>Your left arm spasms and throws the [L_item.name]!</span>")
|
||||
l_hand_obj = null
|
||||
if(R_item)
|
||||
A = pick(oview(range))
|
||||
R_item.throw_at(A, range, 2)
|
||||
to_chat(owner, "<span class='notice'>Your right arm spasms and throws the [R_item.name]!</span>")
|
||||
r_hand_obj = null
|
||||
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items()
|
||||
active = FALSE
|
||||
if(!l_hand_ignore && l_hand_obj in owner.contents)
|
||||
l_hand_obj.flags ^= NODROP
|
||||
if(!r_hand_ignore && r_hand_obj in owner.contents)
|
||||
|
||||
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 74 KiB |