mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-07-20 19:42:34 +01:00
Merge remote-tracking branch 'upstream/dev' into 150817-SynthAccess
This commit is contained in:
@@ -130,6 +130,7 @@ var/list/admin_verbs_spawn = list(
|
||||
/client/proc/spawn_chemdisp_cartridge
|
||||
)
|
||||
var/list/admin_verbs_server = list(
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/ToRban,
|
||||
/datum/admins/proc/startnow,
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/datum/admins/proc/capture_map(tx as num, ty as num, tz as num, range as num)
|
||||
set category = "Server"
|
||||
set name = "Capture Map Part"
|
||||
|
||||
if(!check_rights(R_ADMIN|R_DEBUG|R_SERVER))
|
||||
return
|
||||
|
||||
if(range > 32 || range <= 0)
|
||||
usr << "Capturing range is incorrect, it must be within 1-32."
|
||||
return
|
||||
|
||||
if(locate(tx,ty,tz))
|
||||
var/list/turfstocapture = list()
|
||||
var/hasasked = 0
|
||||
for(var/xoff = 0 to range)
|
||||
for(var/yoff = 0 to range)
|
||||
var/turf/T = locate(tx + xoff,ty + yoff,tz)
|
||||
if(T)
|
||||
turfstocapture.Add(T)
|
||||
else
|
||||
if(!hasasked)
|
||||
var/answer = alert("Capture includes non existant turf, Continue capture?","Continue capture?", "No", "Yes")
|
||||
hasasked = 1
|
||||
if(answer == "No")
|
||||
return
|
||||
|
||||
var/list/atoms = list()
|
||||
for(var/turf/T in turfstocapture)
|
||||
atoms.Add(T)
|
||||
for(var/atom/A in T)
|
||||
if(A.invisibility) continue
|
||||
atoms.Add(A)
|
||||
|
||||
atoms = sort_atoms_by_layer(atoms)
|
||||
var/icon/cap = icon('icons/effects/96x96.dmi', "")
|
||||
cap.Scale(range*32, range*32)
|
||||
cap.Blend("#000", ICON_OVERLAY)
|
||||
for(var/atom/A in atoms)
|
||||
if(A)
|
||||
var/icon/img = getFlatIcon(A)
|
||||
if(istype(img, /icon))
|
||||
if(istype(A, /mob/living) && A:lying)
|
||||
img.BecomeLying()
|
||||
var/xoff = (A.x - tx) * 32
|
||||
var/yoff = (A.y - ty) * 32
|
||||
cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff)
|
||||
|
||||
|
||||
usr << browse_rsc(cap, "map_capture_x[tx]_y[ty]_z[tz]_r[range].png")
|
||||
@@ -2112,7 +2112,7 @@
|
||||
if("friendai")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","FA")
|
||||
for(var/mob/aiEye/aE in mob_list)
|
||||
for(var/mob/eye/aiEye/aE in mob_list)
|
||||
aE.icon_state = "ai_friend"
|
||||
for(var/obj/machinery/M in machines)
|
||||
if(istype(M, /obj/machinery/ai_status_display))
|
||||
|
||||
@@ -118,30 +118,31 @@
|
||||
if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_MENTOR))
|
||||
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>[key_name(C, X, 0)]</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
/client/proc/cmd_admin_irc_pm()
|
||||
/client/proc/cmd_admin_irc_pm(sender)
|
||||
if(prefs.muted & MUTE_ADMINHELP)
|
||||
src << "<font color='red'>Error: Private-Message: You are unable to use PM-s (muted).</font>"
|
||||
return
|
||||
|
||||
var/msg = input(src,"Message:", "Private message to admins on IRC / 400 character limit") as text|null
|
||||
var/msg = input(src,"Message:", "Reply private message to [sender] on IRC / 400 character limit") as text|null
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
sanitize(msg)
|
||||
|
||||
if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
|
||||
src << "\red Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting"
|
||||
src << "\blue [msg]"
|
||||
return
|
||||
// Handled on Bot32's end, unsure about other bots
|
||||
// if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
|
||||
// src << "<span class='warning'>Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting</span>"
|
||||
// src << "<span class='notice'>[msg]</span>"
|
||||
// return
|
||||
|
||||
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
|
||||
send2adminirc("PlayerPM to [sender] from [key_name(src)]: [html_decode(msg)]")
|
||||
|
||||
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
|
||||
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>IRC-[sender]</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
log_admin("PM: [key_name(src)]->IRC: [msg]")
|
||||
log_admin("PM: [key_name(src)]->IRC-[sender]: [msg]")
|
||||
for(var/client/X in admins)
|
||||
if(X == src)
|
||||
continue
|
||||
if(X.holder.rights & R_ADMIN|R_MOD)
|
||||
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
|
||||
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>IRC-[sender]</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
@@ -659,13 +659,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
|
||||
|
||||
if ("pirate")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
|
||||
flags = CONDUCT | PROXMOVE
|
||||
var/status = 0 //0 - not readied //1 - bomb finished with welder
|
||||
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
|
||||
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = "holder"
|
||||
item_state = "assembly"
|
||||
flags = CONDUCT
|
||||
flags = CONDUCT | PROXMOVE
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
name = "infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon_state = "infrared"
|
||||
origin_tech = list(TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
|
||||
origin_tech = list(TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
|
||||
|
||||
wires = WIRE_PULSE
|
||||
|
||||
@@ -171,9 +171,7 @@
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
//world << "beam \ref[src]: hit"
|
||||
if(master)
|
||||
//world << "beam hit \ref[src]: calling master \ref[master].hit"
|
||||
master.trigger_beam()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon_state = "prox"
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
|
||||
|
||||
origin_tech = list(TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
|
||||
flags = PROXMOVE
|
||||
wires = WIRE_PULSE
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(mute_irc)
|
||||
usr << "<span class='warning'You cannot use this as your client has been muted from sending messages to the admins on IRC</span>"
|
||||
return
|
||||
cmd_admin_irc_pm()
|
||||
cmd_admin_irc_pm(href_list["irc_msg"])
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -64,22 +64,36 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_head
|
||||
|
||||
/datum/gear/bsec_beret
|
||||
display_name = "beret, blue (security)"
|
||||
path = /obj/item/clothing/head/beret/sec/alt
|
||||
display_name = "beret, navy (officer)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/officer
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/bsec_beret_warden
|
||||
display_name = "beret, navy (warden)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/warden
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Head of Security","Warden")
|
||||
|
||||
/datum/gear/bsec_beret_hos
|
||||
display_name = "beret, navy (hos)"
|
||||
path = /obj/item/clothing/head/beret/sec/navy/hos
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/eng_beret
|
||||
display_name = "beret, engie-orange"
|
||||
path = /obj/item/clothing/head/beret/eng
|
||||
path = /obj/item/clothing/head/beret/engineering
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
|
||||
/datum/gear/purp_beret
|
||||
display_name = "beret, purple"
|
||||
path = /obj/item/clothing/head/beret/jan
|
||||
path = /obj/item/clothing/head/beret/purple
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
|
||||
@@ -378,6 +392,13 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
|
||||
/datum/gear/roboticist_skirt
|
||||
display_name = "skirt, roboticist"
|
||||
path = /obj/item/clothing/under/rank/roboticist/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Roboticist")
|
||||
|
||||
/datum/gear/amishsuit
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
//Sanitize
|
||||
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
|
||||
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
|
||||
UI_style = sanitize_inlist(UI_style, list("White", "Midnight","Orange","old"), initial(UI_style))
|
||||
UI_style = sanitize_inlist(UI_style, all_ui_styles, initial(UI_style))
|
||||
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
|
||||
default_slot = sanitize_integer(default_slot, 1, config.character_slots, initial(default_slot))
|
||||
toggles = sanitize_integer(toggles, 0, 65535, initial(toggles))
|
||||
|
||||
@@ -157,41 +157,3 @@
|
||||
prefs.save_preferences()
|
||||
src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)."
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/change_ui()
|
||||
set name = "Change UI"
|
||||
set category = "Preferences"
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
usr << "This only for human"
|
||||
return
|
||||
|
||||
var/UI_style_new = input(usr, "Select a style, we recommend White for customization") in list("White", "Midnight", "Orange", "old")
|
||||
if(!UI_style_new) return
|
||||
|
||||
var/UI_style_alpha_new = input(usr, "Select a new alpha(transparence) parametr for UI, between 50 and 255") as num
|
||||
if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
|
||||
|
||||
var/UI_style_color_new = input(usr, "Choose your UI color, dark colors are not recommended!") as color|null
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other +usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ui_style2icon(UI_style_new)
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
|
||||
|
||||
if(alert("Like it? Save changes?",,"Yes", "No") == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
prefs.save_preferences()
|
||||
usr << "UI was saved"
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
|
||||
/var/all_ui_styles = list(
|
||||
"Midnight" = 'icons/mob/screen/midnight.dmi',
|
||||
"Orange" = 'icons/mob/screen/orange.dmi',
|
||||
"old" = 'icons/mob/screen/old.dmi',
|
||||
"White" = 'icons/mob/screen/white.dmi',
|
||||
"old-noborder" = 'icons/mob/screen/old-noborder.dmi'
|
||||
)
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
if(ui_style in all_ui_styles)
|
||||
return all_ui_styles[ui_style]
|
||||
return all_ui_styles["White"]
|
||||
|
||||
|
||||
/client/verb/change_ui()
|
||||
set name = "Change UI"
|
||||
set category = "Preferences"
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
usr << "<span class='warning'>You must be human to use this verb.</span>"
|
||||
return
|
||||
|
||||
var/UI_style_new = input(usr, "Select a style. White is recommended for customization") as null|anything in all_ui_styles
|
||||
if(!UI_style_new) return
|
||||
|
||||
var/UI_style_alpha_new = input(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255") as null|num
|
||||
if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
|
||||
|
||||
var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
icons.Add(usr.gun_setting_icon)
|
||||
icons.Add(usr.item_use_icon)
|
||||
icons.Add(usr.gun_move_icon)
|
||||
icons.Add(usr.gun_run_icon)
|
||||
icons.Add(usr.radio_use_icon)
|
||||
|
||||
var/icon/ic = all_ui_styles[UI_style_new]
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ic
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
|
||||
if(alert("Like it? Save changes?",,"Yes", "No") == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
prefs.save_preferences()
|
||||
usr << "UI was saved"
|
||||
@@ -37,7 +37,7 @@
|
||||
icon_state = "meson"
|
||||
item_state = "glasses"
|
||||
action_button_name = "Toggle Goggles"
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
toggleable = 1
|
||||
vision_flags = SEE_TURFS
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
desc = "Very confusing glasses."
|
||||
icon_state = "material"
|
||||
item_state = "glasses"
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3)
|
||||
toggleable = 1
|
||||
vision_flags = SEE_OBJS
|
||||
|
||||
|
||||
@@ -60,35 +60,47 @@
|
||||
/obj/item/clothing/head/beret/sec
|
||||
name = "security beret"
|
||||
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_badge"
|
||||
/obj/item/clothing/head/beret/sec/alt
|
||||
icon_state = "beret_officer"
|
||||
/obj/item/clothing/head/beret/sec/navy/officer
|
||||
name = "officer beret"
|
||||
desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "officerberet"
|
||||
/obj/item/clothing/head/beret/sec/hos
|
||||
icon_state = "beret_navy_officer"
|
||||
/obj/item/clothing/head/beret/sec/navy/hos
|
||||
name = "officer beret"
|
||||
desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "hosberet"
|
||||
/obj/item/clothing/head/beret/sec/warden
|
||||
icon_state = "beret_navy_hos"
|
||||
/obj/item/clothing/head/beret/sec/navy/warden
|
||||
name = "warden beret"
|
||||
desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "wardenberet"
|
||||
/obj/item/clothing/head/beret/eng
|
||||
icon_state = "beret_navy_warden"
|
||||
/obj/item/clothing/head/beret/sec/corporate/officer
|
||||
name = "officer beret"
|
||||
desc = "A corporate black beret with an officer's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_officer"
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos
|
||||
name = "officer beret"
|
||||
desc = "A corporate black beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_hos"
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden
|
||||
name = "warden beret"
|
||||
desc = "A corporate black beret with a warden's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_warden"
|
||||
/obj/item/clothing/head/beret/engineering
|
||||
name = "engineering beret"
|
||||
desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety."
|
||||
icon_state = "e_beret_badge"
|
||||
/obj/item/clothing/head/beret/jan
|
||||
icon_state = "beret_engineering"
|
||||
/obj/item/clothing/head/beret/purple
|
||||
name = "purple beret"
|
||||
desc = "A stylish, if purple, beret."
|
||||
icon_state = "purpleberet"
|
||||
icon_state = "beret_purple"
|
||||
/obj/item/clothing/head/beret/centcom/officer
|
||||
name = "officers beret"
|
||||
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces."
|
||||
icon_state = "centcomofficerberet"
|
||||
icon_state = "beret_centcom_officer"
|
||||
/obj/item/clothing/head/beret/centcom/captain
|
||||
name = "captains beret"
|
||||
desc = "A white beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces."
|
||||
icon_state = "centcomcaptain"
|
||||
icon_state = "beret_centcom_captain"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/head/surgery
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
var/open
|
||||
var/obj/item/held //Item inside locket.
|
||||
|
||||
/obj/item/clothing/accessory/locket/heart
|
||||
name = "heart-shaped locket"
|
||||
desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
|
||||
icon_state = "heartlocket"
|
||||
|
||||
/obj/item/clothing/accessory/locket/attack_self(mob/user as mob)
|
||||
if(!base_icon)
|
||||
base_icon = icon_state
|
||||
|
||||
if(!("[base_icon]_open" in icon_states(icon)))
|
||||
user << "\The [src] doesn't seem to open."
|
||||
return
|
||||
|
||||
open = !open
|
||||
user << "You flip \the [src] [open?"open":"closed"]."
|
||||
if(open)
|
||||
@@ -36,11 +36,11 @@
|
||||
|
||||
if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
|
||||
if(held)
|
||||
usr << "[src] already has something inside it."
|
||||
usr << "\The [src] already has something inside it."
|
||||
else
|
||||
usr << "You slip [O] into [src]."
|
||||
user.drop_item()
|
||||
O.loc = src
|
||||
src.held = O
|
||||
return
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -23,8 +23,14 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist
|
||||
desc = "It's a slimming black with reinforced seams; great for industrial work."
|
||||
desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpsuit"
|
||||
icon_state = "robotics"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "robotics"
|
||||
worn_state = "robotics"
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
worn_state = "roboticsf"
|
||||
|
||||
@@ -3,46 +3,112 @@
|
||||
// Holographic tables are in code/modules/tables/presets.dm
|
||||
// Holographic racks are in code/modules/tables/rack.dm
|
||||
|
||||
/turf/simulated/floor/holofloor/
|
||||
/turf/simulated/floor/holofloor
|
||||
thermal_conductivity = 0
|
||||
|
||||
/turf/simulated/floor/holofloor/grass
|
||||
name = "Lush Grass"
|
||||
icon_state = "grass1"
|
||||
floor_type = /obj/item/stack/tile/grass
|
||||
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
New()
|
||||
icon_state = "grass[pick("1","2","3","4")]"
|
||||
..()
|
||||
spawn(4)
|
||||
update_icon()
|
||||
for(var/direction in cardinal)
|
||||
if(istype(get_step(src,direction),/turf/simulated/floor))
|
||||
var/turf/simulated/floor/FF = get_step(src,direction)
|
||||
FF.update_icon() //so siding get updated properly
|
||||
/turf/simulated/floor/holofloor/set_flooring()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/holofloor/carpet
|
||||
name = "carpet"
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon_state = "carpet"
|
||||
initial_flooring = /decl/flooring/carpet
|
||||
|
||||
/turf/simulated/floor/holofloor/tiled
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "steel"
|
||||
initial_flooring = /decl/flooring/tiling
|
||||
|
||||
/turf/simulated/floor/holofloor/tiled/dark
|
||||
name = "dark floor"
|
||||
icon_state = "dark"
|
||||
initial_flooring = /decl/flooring/tiling/dark
|
||||
|
||||
/turf/simulated/floor/holofloor/lino
|
||||
name = "lino"
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_state = "lino"
|
||||
initial_flooring = /decl/flooring/linoleum
|
||||
|
||||
/turf/simulated/floor/holofloor/wood
|
||||
name = "wooden floor"
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood
|
||||
|
||||
/turf/simulated/floor/holofloor/grass
|
||||
name = "lush grass"
|
||||
icon = 'icons/turf/flooring/grass.dmi'
|
||||
icon_state = "grass0"
|
||||
initial_flooring = /decl/flooring/grass
|
||||
|
||||
/turf/simulated/floor/holofloor/snow
|
||||
name = "snow"
|
||||
base_name = "snow"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
base_icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "snow"
|
||||
base_icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/holofloor/space
|
||||
icon = 'icons/turf/space.dmi'
|
||||
name = "\proper space"
|
||||
icon_state = "0"
|
||||
|
||||
/turf/simulated/floor/holofloor/reinforced
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
initial_flooring = /decl/flooring/reinforced
|
||||
name = "reinforced holofloor"
|
||||
icon_state = "reinforced"
|
||||
|
||||
/turf/simulated/floor/holofloor/space/New()
|
||||
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach
|
||||
desc = "Uncomfortably gritty for a hologram."
|
||||
base_desc = "Uncomfortably gritty for a hologram."
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
base_icon = 'icons/misc/beach.dmi'
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/sand
|
||||
name = "sand"
|
||||
icon_state = "desert"
|
||||
base_icon_state = "desert"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/coastline
|
||||
name = "coastline"
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
icon_state = "sandwater"
|
||||
base_icon_state = "sandwater"
|
||||
|
||||
/turf/simulated/floor/holofloor/beach/water
|
||||
name = "water"
|
||||
icon_state = "seashallow"
|
||||
base_icon_state = "seashallow"
|
||||
|
||||
/turf/simulated/floor/holofloor/desert
|
||||
name = "desert sand"
|
||||
base_name = "desert sand"
|
||||
desc = "Uncomfortably gritty for a hologram."
|
||||
base_desc = "Uncomfortably gritty for a hologram."
|
||||
icon_state = "asteroid"
|
||||
base_icon_state = "asteroid"
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
base_icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
initial_flooring = null
|
||||
|
||||
/turf/simulated/floor/holofloor/desert/New()
|
||||
..()
|
||||
if(prob(10))
|
||||
overlays += "asteroid[rand(0,9)]"
|
||||
|
||||
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
/obj/structure/holostool
|
||||
name = "stool"
|
||||
desc = "Apply butt."
|
||||
@@ -51,7 +117,6 @@
|
||||
anchored = 1.0
|
||||
pressure_resistance = 15
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/boxing/hologlove
|
||||
name = "boxing gloves"
|
||||
desc = "Because you really needed another excuse to punch your crewmates."
|
||||
|
||||
@@ -51,7 +51,7 @@ turf: (lighting_turf.dm)
|
||||
- proc/lighting_clear_overlays():
|
||||
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
|
||||
- proc/lighting_build_overlays():
|
||||
- Create lighting overlays for this turf
|
||||
- Create lighting overlays for this turf. Called by ChangeTurf in case the turf is being changed to use dynamic lighting.
|
||||
|
||||
|
||||
atom/movable/lighting_overlay: (lighting_overlay.dm)
|
||||
|
||||
@@ -246,6 +246,45 @@
|
||||
effect_turf.Cut(idx, idx + 1)
|
||||
effect_str.Cut(idx, idx + 1)
|
||||
|
||||
//Whoop yet not another copy pasta because speed ~~~~BYOND.
|
||||
//Calculates and applies lighting for a single turf. This is intended for when a turf switches to
|
||||
//using dynamic lighting when it was not doing so previously (when constructing a floor on space, for example).
|
||||
//Assumes the turf is visible and such.
|
||||
//For the love of god don't call this proc when it's not needed! Lighting artifacts WILL happen!
|
||||
/datum/light_source/proc/calc_turf(var/turf/T)
|
||||
var/idx = effect_turf.Find(T)
|
||||
if(!idx)
|
||||
return //WHY.
|
||||
|
||||
if(T.lighting_overlay)
|
||||
#if LIGHTING_FALLOFF == 1 // circular
|
||||
. = (T.lighting_overlay.x - source_turf.x)**2 + (T.lighting_overlay.y - source_turf.y)**2 + LIGHTING_HEIGHT
|
||||
#if LIGHTING_LAMBERTIAN == 1
|
||||
. = CLAMP01((1 - CLAMP01(sqrt(.) / light_range)) * (1 / (sqrt(. + 1))))
|
||||
#else
|
||||
. = 1 - CLAMP01(sqrt(.) / light_range)
|
||||
#endif
|
||||
|
||||
#elif LIGHTING_FALLOFF == 2 // square
|
||||
. = abs(T.lighting_overlay.x - source_turf.x) + abs(T.lighting_overlay.y - source_turf.y) + LIGHTING_HEIGHT
|
||||
#if LIGHTING_LAMBERTIAN == 1
|
||||
. = CLAMP01((1 - CLAMP01(. / light_range)) * (1 / (sqrt(.)**2 + )))
|
||||
#else
|
||||
. = 1 - CLAMP01(. / light_range)
|
||||
#endif
|
||||
#endif
|
||||
. *= light_power
|
||||
|
||||
. = round(., LIGHTING_ROUND_VALUE)
|
||||
|
||||
effect_str[idx] = .
|
||||
|
||||
T.lighting_overlay.update_lumcount(
|
||||
lum_r * .,
|
||||
lum_g * .,
|
||||
lum_b * .
|
||||
)
|
||||
|
||||
#undef LUM_FALLOFF
|
||||
#undef LUM_DISTANCE
|
||||
#undef LUM_ATTENUATION
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
var/atom/movable/lighting_overlay/O = PoolOrNew(/atom/movable/lighting_overlay, src)
|
||||
lighting_overlay = O
|
||||
|
||||
//Make the light sources recalculate us so the lighting overlay updates immediately
|
||||
for(var/datum/light_source/L in affecting_lights)
|
||||
L.calc_turf(src)
|
||||
|
||||
/turf/Entered(atom/movable/obj)
|
||||
. = ..()
|
||||
if(obj && obj.opacity)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
@@ -83,6 +83,7 @@
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
|
||||
|
||||
/material/sandstone/generate_recipes()
|
||||
..()
|
||||
@@ -96,6 +97,8 @@
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
|
||||
@@ -361,7 +361,6 @@ var/list/name_to_material
|
||||
destruction_desc = "shatters"
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/basic
|
||||
wire_product = /obj/item/stack/light_w
|
||||
rod_product = /obj/item/stack/material/glass/reinforced
|
||||
|
||||
/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
return
|
||||
|
||||
//Drill through the flooring, if any.
|
||||
if(istype(get_turf(src), /turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src)
|
||||
if(istype(get_turf(src), /turf/simulated/floor/asteroid))
|
||||
var/turf/simulated/floor/asteroid/T = get_turf(src)
|
||||
if(!T.dug)
|
||||
T.gets_dug()
|
||||
else if(istype(get_turf(src), /turf/simulated/floor))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "forensic0-old" //GET A BETTER SPRITE.
|
||||
item_state = "electronic"
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 150)
|
||||
|
||||
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
w_class = 4.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3750)
|
||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
var/drill_sound = 'sound/weapons/Genhit.ogg'
|
||||
var/drill_verb = "drilling"
|
||||
@@ -77,7 +77,7 @@
|
||||
icon_state = "handdrill"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 30
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
desc = "Yours is the drill that will pierce through the rock walls."
|
||||
drill_verb = "drilling"
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
icon_state = "jackhammer"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 20 //faster than drill, but cannot dig
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
||||
drill_verb = "hammering"
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
w_class = 3.0 //it is smaller than the pickaxe
|
||||
damtype = "fire"
|
||||
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
drill_verb = "cutting"
|
||||
drill_sound = 'sound/items/Welder.ogg'
|
||||
@@ -118,7 +118,7 @@
|
||||
icon_state = "dpickaxe"
|
||||
item_state = "dpickaxe"
|
||||
digspeed = 10
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINERING = 4)
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4)
|
||||
desc = "A pickaxe with a diamond pick head."
|
||||
drill_verb = "picking"
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
icon_state = "diamonddrill"
|
||||
item_state = "jackhammer"
|
||||
digspeed = 5 //Digs through walls, girders, and can dig up sand
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5)
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
drill_verb = "drilling"
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
throwforce = 4.0
|
||||
item_state = "shovel"
|
||||
w_class = 3.0
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
|
||||
sharp = 0
|
||||
@@ -230,7 +230,7 @@
|
||||
var/obj/item/stack/flag/F = locate() in get_turf(src)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T || !istype(T,/turf/simulated/floor/plating/airless/asteroid))
|
||||
if(!T || !istype(T,/turf/simulated/floor/asteroid))
|
||||
user << "The flag won't stand up in this terrain."
|
||||
return
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = T0C
|
||||
var/mined_turf = /turf/simulated/floor/plating/airless/asteroid
|
||||
var/mined_turf = /turf/simulated/floor/asteroid
|
||||
var/ore/mineral
|
||||
var/mined_ore = 0
|
||||
var/last_act = 0
|
||||
@@ -41,8 +41,8 @@
|
||||
var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
|
||||
for(var/direction in step_overlays)
|
||||
var/turf/turf_to_check = get_step(src,step_overlays[direction])
|
||||
if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/plating/airless/asteroid/T = turf_to_check
|
||||
if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid))
|
||||
var/turf/simulated/floor/asteroid/T = turf_to_check
|
||||
T.updateMineralOverlays()
|
||||
else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
|
||||
turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
|
||||
@@ -283,7 +283,7 @@
|
||||
|
||||
//Add some rubble, you did just clear out a big chunk of rock.
|
||||
|
||||
var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(mined_turf)
|
||||
var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf)
|
||||
|
||||
// Kill and update the space overlays around us.
|
||||
for(var/direction in step_overlays)
|
||||
@@ -387,25 +387,31 @@
|
||||
|
||||
/**********************Asteroid**************************/
|
||||
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid //floor piece
|
||||
// Setting icon/icon_state initially will use these values when the turf is built on/replaced.
|
||||
// This means you can put grass on the asteroid etc.
|
||||
/turf/simulated/floor/asteroid
|
||||
name = "sand"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
icon_state = "asteroid"
|
||||
base_name = "sand"
|
||||
base_desc = "Gritty and unpleasant."
|
||||
base_icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
base_icon_state = "asteroid"
|
||||
|
||||
initial_flooring = null
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
icon_plating = "asteroid"
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
var/overlay_detail
|
||||
has_resources = 1
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/New()
|
||||
/turf/simulated/floor/asteroid/New()
|
||||
|
||||
if(prob(20))
|
||||
overlay_detail = "asteroid[rand(0,9)]"
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/ex_act(severity)
|
||||
/turf/simulated/floor/asteroid/ex_act(severity)
|
||||
switch(severity)
|
||||
if(3.0)
|
||||
return
|
||||
@@ -416,7 +422,10 @@
|
||||
gets_dug()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/turf/simulated/floor/asteroid/is_plating()
|
||||
return 0
|
||||
|
||||
/turf/simulated/floor/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if(!W || !user)
|
||||
return 0
|
||||
@@ -468,7 +477,7 @@
|
||||
..(W,user)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/proc/gets_dug()
|
||||
/turf/simulated/floor/asteroid/proc/gets_dug()
|
||||
|
||||
if(dug)
|
||||
return
|
||||
@@ -477,11 +486,10 @@
|
||||
new/obj/item/weapon/ore/glass(src)
|
||||
|
||||
dug = 1
|
||||
icon_plating = "asteroid_dug"
|
||||
icon_state = "asteroid_dug"
|
||||
return
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/proc/updateMineralOverlays(var/update_neighbors)
|
||||
/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors)
|
||||
|
||||
overlays.Cut()
|
||||
|
||||
@@ -494,17 +502,18 @@
|
||||
if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral))
|
||||
overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
|
||||
|
||||
if(overlay_detail) overlays += overlay_detail
|
||||
//todo cache
|
||||
if(overlay_detail) overlays |= image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail)
|
||||
|
||||
if(update_neighbors)
|
||||
var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)
|
||||
for(var/direction in all_step_directions)
|
||||
var/turf/simulated/floor/plating/airless/asteroid/A
|
||||
if(istype(get_step(src, direction), /turf/simulated/floor/plating/airless/asteroid))
|
||||
var/turf/simulated/floor/asteroid/A
|
||||
if(istype(get_step(src, direction), /turf/simulated/floor/asteroid))
|
||||
A = get_step(src, direction)
|
||||
A.updateMineralOverlays()
|
||||
|
||||
/turf/simulated/floor/plating/airless/asteroid/Entered(atom/movable/M as mob|obj)
|
||||
/turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj)
|
||||
..()
|
||||
if(istype(M,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
|
||||
@@ -189,7 +189,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
/mob/dead/observer/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
if(emergency_shuttle)
|
||||
var/eta_status = emergency_shuttle.get_status_panel_eta()
|
||||
if(eta_status)
|
||||
|
||||
@@ -97,10 +97,12 @@
|
||||
..(message, null, verb)
|
||||
|
||||
/mob/living/bot/Bump(var/atom/A)
|
||||
if(istype(A, /obj/machinery/door) && botcard)
|
||||
if(on && botcard && istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard))
|
||||
D.open()
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/bot/emag_act(var/remaining_charges, var/mob/user)
|
||||
return 0
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
is_ranged = 1
|
||||
preparing_arrest_sounds = new()
|
||||
|
||||
a_intent = I_HURT
|
||||
mob_bump_flag = HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
mob_push_flags = HEAVY
|
||||
|
||||
var/shot_delay = 4
|
||||
var/last_shot = 0
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/list/path = list()
|
||||
var/list/ignorelist = list()
|
||||
var/turf/target
|
||||
var/floor_build_type = /decl/flooring/tiling // Basic steel floor.
|
||||
|
||||
/mob/living/bot/floorbot/update_icons()
|
||||
if(repairing)
|
||||
@@ -136,7 +137,7 @@
|
||||
target = T
|
||||
if(improvefloors && istype(T, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = T
|
||||
if(!F.floor_type && (get_turf(T) == loc || prob(40)))
|
||||
if(!F.flooring && (get_turf(T) == loc || prob(40)))
|
||||
target = T
|
||||
|
||||
if(emagged) // Time to griff
|
||||
@@ -150,7 +151,7 @@
|
||||
|
||||
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
|
||||
if(eattiles)
|
||||
for(var/obj/item/stack/tile/steel/T in view(src))
|
||||
for(var/obj/item/stack/tile/floor/T in view(src))
|
||||
if(T in ignorelist)
|
||||
continue
|
||||
target = T
|
||||
@@ -217,7 +218,7 @@
|
||||
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
|
||||
var/obj/item/I
|
||||
if(building == 1)
|
||||
I = new /obj/item/stack/tile/steel(src)
|
||||
I = new /obj/item/stack/tile/floor(src)
|
||||
else
|
||||
I = PoolOrNew(/obj/item/stack/rods, src)
|
||||
A.attackby(I, src)
|
||||
@@ -226,20 +227,19 @@
|
||||
update_icons()
|
||||
else if(istype(A, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = A
|
||||
if(!F.floor_type && amount)
|
||||
if(!F.flooring && amount)
|
||||
repairing = 1
|
||||
update_icons()
|
||||
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
|
||||
if(do_after(src, 50))
|
||||
if(!F.floor_type)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(src)
|
||||
F.attackby(T, src)
|
||||
if(!F.flooring)
|
||||
F.set_flooring(get_flooring_data(floor_build_type))
|
||||
addTiles(-1)
|
||||
target = null
|
||||
repairing = 0
|
||||
update_icons()
|
||||
else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/steel/T = A
|
||||
else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/floor/T = A
|
||||
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
|
||||
repairing = 1
|
||||
update_icons()
|
||||
@@ -272,7 +272,7 @@
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(Tsec)
|
||||
var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec)
|
||||
T.amount = amount
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
@@ -288,8 +288,8 @@
|
||||
|
||||
/* Assembly */
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/steel/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/steel))
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/floor))
|
||||
..()
|
||||
return
|
||||
if(contents.len >= 1)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
var/obj/secbot_listener/listener = null
|
||||
var/beacon_freq = 1445 // Navigation beacon frequency
|
||||
var/control_freq = AI_FREQ // Bot control frequency
|
||||
var/control_freq = BOT_FREQ // Bot control frequency
|
||||
var/list/path = list()
|
||||
var/frustration = 0
|
||||
var/turf/patrol_target = null // This is where we are headed
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "posibrain"
|
||||
w_class = 3
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
|
||||
construction_cost = list(DEFAULT_WALL_MATERIAL=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10)
|
||||
construction_time = 75
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "mainboard"
|
||||
w_class = 3
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
|
||||
/obj/item/device/mmi/digital/robot/New()
|
||||
..()
|
||||
|
||||
@@ -147,11 +147,11 @@
|
||||
src.hand = !( src.hand )
|
||||
if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
|
||||
if(hand) //This being 1 means the left hand is in use
|
||||
hud_used.l_hand_hud_object.icon_state = "hand_active"
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_inactive"
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_active"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_inactive"
|
||||
else
|
||||
hud_used.l_hand_hud_object.icon_state = "hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_active"
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_active"
|
||||
/*if (!( src.hand ))
|
||||
src.hands.set_dir(NORTH)
|
||||
else
|
||||
|
||||
@@ -82,5 +82,5 @@
|
||||
var/list/flavor_texts = list()
|
||||
|
||||
mob_bump_flag = HUMAN
|
||||
mob_push_flags = ALLMOBS
|
||||
mob_swap_flags = ALLMOBS
|
||||
mob_push_flags = ~HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
|
||||
@@ -135,9 +135,9 @@
|
||||
)
|
||||
|
||||
// Bump vars
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ALLMOBS // What can we push?
|
||||
var/swap_flags = ALLMOBS // What can we swap place with?
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ~HEAVY // What can we push?
|
||||
var/swap_flags = ~HEAVY // What can we swap place with?
|
||||
|
||||
/datum/species/New()
|
||||
if(hud_type)
|
||||
|
||||
@@ -17,18 +17,18 @@
|
||||
// to be drawn for the mob. This is fairly delicate, try to avoid messing with it
|
||||
// unless you know exactly what it does.
|
||||
var/list/gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
|
||||
"eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_l_ear, "name" = "Left Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"r_ear" = list("loc" = ui_r_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"shoes" = list("loc" = ui_shoes, "name" = "Shoes", "slot" = slot_shoes, "state" = "shoes", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
@@ -55,13 +55,13 @@
|
||||
/datum/hud_data/diona
|
||||
has_internals = 0
|
||||
gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
|
||||
"o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_gloves, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_oclothing, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
@@ -69,6 +69,6 @@
|
||||
|
||||
/datum/hud_data/monkey
|
||||
gear = list(
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
)
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
icon_state = "facehugger"
|
||||
item_state = "facehugger"
|
||||
w_class = 3 //note: can be picked up by aliens unlike most other items of w_class below 4
|
||||
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
|
||||
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT | PROXMOVE
|
||||
body_parts_covered = FACE|EYES
|
||||
throw_range = 5
|
||||
|
||||
|
||||
@@ -144,8 +144,10 @@
|
||||
var/turf/simulated/wall/W = O
|
||||
if(W.material.flags & MATERIAL_UNMELTABLE)
|
||||
cannot_melt = 1
|
||||
else if(istype(O, /turf/simulated/floor/engine))
|
||||
cannot_melt = 1
|
||||
else if(istype(O, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = O
|
||||
if(F.flooring && (F.flooring.flags & TURF_ACID_IMMUNE))
|
||||
cannot_melt = 1
|
||||
|
||||
if(cannot_melt)
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
)
|
||||
|
||||
bump_flag = ALIEN
|
||||
swap_flags = ALLMOBS
|
||||
push_flags = ALLMOBS ^ ROBOT
|
||||
swap_flags = ~HEAVY
|
||||
push_flags = (~HEAVY) ^ ROBOT
|
||||
|
||||
var/alien_number = 0
|
||||
var/caste_name = "creature" // Used to update alien name.
|
||||
|
||||
@@ -128,7 +128,6 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return verb
|
||||
|
||||
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="")
|
||||
|
||||
if(client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (Muted)."
|
||||
@@ -167,7 +166,7 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
// irrespective of distance or anything else.
|
||||
if(speaking.flags & HIVEMIND)
|
||||
speaking.broadcast(src,trim(message))
|
||||
return
|
||||
return 1
|
||||
//If we've gotten this far, keep going!
|
||||
if(speaking.flags & COMMON_VERBS)
|
||||
verb = say_quote(message)
|
||||
@@ -188,11 +187,11 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
verb = handle_s[2]
|
||||
|
||||
if(!message || message == "")
|
||||
return
|
||||
return 0
|
||||
|
||||
var/list/obj/item/used_radios = new
|
||||
if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name))
|
||||
return
|
||||
return 1
|
||||
|
||||
var/list/handle_v = handle_speech_sound()
|
||||
var/sound/speech_sound = handle_v[1]
|
||||
|
||||
@@ -78,6 +78,8 @@
|
||||
|
||||
for(var/datum/ai_law/law in laws.laws_to_state())
|
||||
can_state = statelaw("[prefix][law.get_index()]. [law.law]")
|
||||
if(!can_state)
|
||||
break
|
||||
|
||||
if(!can_state)
|
||||
src << "<span class='danger'>[method]: Unable to state laws. Communication method unavailable.</span>"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINEERING = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
|
||||
var/mode = 1;
|
||||
|
||||
|
||||
@@ -37,4 +37,4 @@
|
||||
else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS)
|
||||
if(M.client) M << "<b>[src]</b> transmits, \"[message]\""
|
||||
return 1
|
||||
..(message)
|
||||
return ..(message, 0)
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
mob_bump_flag = ROBOT
|
||||
mob_swap_flags = ROBOT|MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
mob_push_flags = ALLMOBS //trundle trundle
|
||||
mob_push_flags = ~HEAVY //trundle trundle
|
||||
|
||||
var/lights_on = 0 // Is our integrated light on?
|
||||
var/used_power_this_tick = 0
|
||||
|
||||
@@ -374,7 +374,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
|
||||
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
@@ -698,7 +698,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
|
||||
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/mob/living/silicon/say(var/message, var/sanitize = 1)
|
||||
return ..(sanitize ? sanitize(message) : message)
|
||||
|
||||
/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
|
||||
log_say("[key_name(src)] : [message]")
|
||||
|
||||
|
||||
@@ -155,12 +155,6 @@
|
||||
/mob/living/silicon/proc/show_malf_ai()
|
||||
return 0
|
||||
|
||||
|
||||
// this function displays the station time in the status panel
|
||||
/mob/living/silicon/proc/show_station_time()
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
|
||||
|
||||
// this function displays the shuttles ETA in the status panel if the shuttle has been called
|
||||
/mob/living/silicon/proc/show_emergency_shuttle_eta()
|
||||
if(emergency_shuttle)
|
||||
@@ -172,7 +166,6 @@
|
||||
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
|
||||
/mob/living/silicon/Stat()
|
||||
if(statpanel("Status"))
|
||||
show_station_time()
|
||||
show_emergency_shuttle_eta()
|
||||
show_system_integrity()
|
||||
show_malf_ai()
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
if(spawnees & 64)
|
||||
C = new(src.loc)
|
||||
C.name = "Drone auto-repair system"
|
||||
C.origin_tech = list(TECH_ENGINERING = rand(3,6))
|
||||
C.origin_tech = list(TECH_ENGINEERING = rand(3,6))
|
||||
|
||||
if(spawnees & 128)
|
||||
C = new(src.loc)
|
||||
|
||||
+23
-18
@@ -654,16 +654,21 @@
|
||||
. = (client && client.inactivity < 1200)
|
||||
|
||||
if(.)
|
||||
if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME)
|
||||
stat("Station Time", worldtime2text())
|
||||
stat("Round Duration", round_duration())
|
||||
|
||||
if(client.holder)
|
||||
if(statpanel("Status"))
|
||||
statpanel("Status","Location:","([x], [y], [z])")
|
||||
statpanel("Status","CPU:","[world.cpu]")
|
||||
statpanel("Status","Instances:","[world.contents.len]")
|
||||
if(statpanel("Status") && processScheduler && processScheduler.getIsRunning())
|
||||
for(var/datum/controller/process/P in processScheduler.processes)
|
||||
statpanel("Status",P.getStatName(), P.getTickTime())
|
||||
else
|
||||
statpanel("Status","processScheduler is not running.")
|
||||
stat("Location:","([x], [y], [z])")
|
||||
if(statpanel("Processes"))
|
||||
stat("CPU:","[world.cpu]")
|
||||
stat("Instances:","[world.contents.len]")
|
||||
if(processScheduler && processScheduler.getIsRunning())
|
||||
for(var/datum/controller/process/P in processScheduler.processes)
|
||||
stat(P.getStatName(), P.getTickTime())
|
||||
else
|
||||
stat("processScheduler is not running.")
|
||||
|
||||
if(listed_turf && client)
|
||||
if(!TurfAdjacent(listed_turf))
|
||||
@@ -729,7 +734,7 @@
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
else
|
||||
density = 1
|
||||
density = initial(density)
|
||||
|
||||
for(var/obj/item/weapon/grab/G in grabbed_by)
|
||||
if(G.state >= GRAB_AGGRESSIVE)
|
||||
@@ -760,22 +765,22 @@
|
||||
|
||||
/mob/verb/eastface()
|
||||
set hidden = 1
|
||||
return facedir(EAST)
|
||||
return facedir(client.client_dir(EAST))
|
||||
|
||||
|
||||
/mob/verb/westface()
|
||||
set hidden = 1
|
||||
return facedir(WEST)
|
||||
return facedir(client.client_dir(WEST))
|
||||
|
||||
|
||||
/mob/verb/northface()
|
||||
set hidden = 1
|
||||
return facedir(NORTH)
|
||||
return facedir(client.client_dir(NORTH))
|
||||
|
||||
|
||||
/mob/verb/southface()
|
||||
set hidden = 1
|
||||
return facedir(SOUTH)
|
||||
return facedir(client.client_dir(SOUTH))
|
||||
|
||||
|
||||
//This might need a rename but it should replace the can this mob use things check
|
||||
@@ -1053,19 +1058,19 @@ mob/proc/yank_out_object()
|
||||
|
||||
/mob/verb/northfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(NORTH)
|
||||
set_face_dir(client.client_dir(NORTH))
|
||||
|
||||
/mob/verb/southfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(SOUTH)
|
||||
set_face_dir(client.client_dir(SOUTH))
|
||||
|
||||
/mob/verb/eastfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(EAST)
|
||||
set_face_dir(client.client_dir(EAST))
|
||||
|
||||
/mob/verb/westfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(WEST)
|
||||
set_face_dir(client.client_dir(WEST))
|
||||
|
||||
/mob/proc/adjustEarDamage()
|
||||
return
|
||||
@@ -1089,4 +1094,4 @@ mob/proc/yank_out_object()
|
||||
/mob/proc/throw_mode_on()
|
||||
src.in_throw_mode = 1
|
||||
if(src.throw_icon)
|
||||
src.throw_icon.icon_state = "act_throw_on"
|
||||
src.throw_icon.icon_state = "act_throw_on"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
density = 1
|
||||
layer = 4.0
|
||||
animate_movement = 2
|
||||
// flags = NOREACT
|
||||
flags = PROXMOVE
|
||||
var/datum/mind/mind
|
||||
|
||||
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak
|
||||
|
||||
@@ -419,7 +419,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
|
||||
var/atom/oldeye=M.client.eye
|
||||
var/aiEyeFlag = 0
|
||||
if(istype(oldeye, /mob/aiEye))
|
||||
if(istype(oldeye, /mob/eye/aiEye))
|
||||
aiEyeFlag = 1
|
||||
|
||||
var/x
|
||||
|
||||
@@ -27,35 +27,43 @@
|
||||
..()
|
||||
|
||||
|
||||
/client/proc/client_dir(input)
|
||||
return turn(input, -dir2angle(dir))
|
||||
|
||||
/client/Northeast()
|
||||
swap_hand()
|
||||
return
|
||||
|
||||
|
||||
/client/Southeast()
|
||||
attack_self()
|
||||
return
|
||||
|
||||
|
||||
/client/Southwest()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.toggle_throw_mode()
|
||||
else
|
||||
usr << "\red This mob type cannot throw items."
|
||||
return
|
||||
|
||||
|
||||
diagonal_action(NORTHEAST)
|
||||
/client/Northwest()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
if(!C.get_active_hand())
|
||||
usr << "\red You have nothing to drop in your hand."
|
||||
diagonal_action(NORTHWEST)
|
||||
/client/Southeast()
|
||||
diagonal_action(SOUTHEAST)
|
||||
/client/Southwest()
|
||||
diagonal_action(SOUTHWEST)
|
||||
|
||||
/client/proc/diagonal_action(direction)
|
||||
switch(client_dir(direction))
|
||||
if(NORTHEAST)
|
||||
swap_hand()
|
||||
return
|
||||
if(SOUTHEAST)
|
||||
attack_self()
|
||||
return
|
||||
if(SOUTHWEST)
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.toggle_throw_mode()
|
||||
else
|
||||
usr << "\red This mob type cannot throw items."
|
||||
return
|
||||
if(NORTHWEST)
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
if(!C.get_active_hand())
|
||||
usr << "\red You have nothing to drop in your hand."
|
||||
return
|
||||
drop_item()
|
||||
else
|
||||
usr << "\red This mob type cannot drop items."
|
||||
return
|
||||
drop_item()
|
||||
else
|
||||
usr << "\red This mob type cannot drop items."
|
||||
return
|
||||
|
||||
//This gets called when you press the delete button.
|
||||
/client/verb/delete_key_pressed()
|
||||
|
||||
@@ -67,12 +67,7 @@
|
||||
Stat()
|
||||
..()
|
||||
|
||||
statpanel("Status")
|
||||
if (client.statpanel == "Status" && ticker)
|
||||
if (ticker.current_state != GAME_STATE_PREGAME)
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
statpanel("Lobby")
|
||||
if(client.statpanel=="Lobby" && ticker)
|
||||
if(statpanel("Lobby") && ticker)
|
||||
if(ticker.hide_mode)
|
||||
stat("Game Mode:", "Secret")
|
||||
else
|
||||
@@ -387,16 +382,11 @@
|
||||
global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer")
|
||||
|
||||
proc/LateChoices()
|
||||
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
|
||||
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
|
||||
var/mins = (mills % 36000) / 600
|
||||
var/hours = mills / 36000
|
||||
|
||||
var/name = client.prefs.be_random_name ? "friend" : client.prefs.real_name
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
dat += "<b>Welcome, [name].<br></b>"
|
||||
dat += "Round Duration: [round(hours)]h [round(mins)]m<br>"
|
||||
dat += "Round Duration: [round_duration()]<br>"
|
||||
|
||||
if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles.
|
||||
if(emergency_shuttle.going_to_centcom()) //Shuttle is going to centcomm, not recalled
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
if("Yellow")
|
||||
colour = COLOR_YELLOW
|
||||
if("Green")
|
||||
colour = COLOR_GREEN
|
||||
colour = COLOR_LIME
|
||||
if("Pink")
|
||||
colour = COLOR_PINK
|
||||
if("Blue")
|
||||
|
||||
@@ -505,7 +505,8 @@
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2)
|
||||
if (src.loc:intact)
|
||||
var/turf/T = loc
|
||||
if(istype(T) && !T.is_plating())
|
||||
user << "<span class='warning'>You must remove the floor plating in front of the APC first.</span>"
|
||||
return
|
||||
var/obj/item/stack/cable_coil/C = W
|
||||
@@ -517,7 +518,6 @@
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if (C.amount >= 10 && !terminal && opened && has_electronics != 2)
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/structure/cable/N = T.get_cable_node()
|
||||
if (prob(50) && electrocute_mob(usr, N, N))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
@@ -532,7 +532,8 @@
|
||||
make_terminal()
|
||||
terminal.connect_to_network()
|
||||
else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2)
|
||||
if (src.loc:intact)
|
||||
var/turf/T = loc
|
||||
if(istype(T) && !T.is_plating())
|
||||
user << "<span class='warning'>You must remove the floor plating in front of the APC first.</span>"
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user.name] dismantles the power terminal from [src].</span>", \
|
||||
|
||||
+14
-14
@@ -50,7 +50,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
color = COLOR_YELLOW
|
||||
|
||||
/obj/structure/cable/green
|
||||
color = COLOR_GREEN
|
||||
color = COLOR_LIME
|
||||
|
||||
/obj/structure/cable/blue
|
||||
color = COLOR_BLUE
|
||||
@@ -70,7 +70,6 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
/obj/structure/cable/New()
|
||||
..()
|
||||
|
||||
|
||||
// ensure d1 & d2 reflect the icon_state for entering and exiting cable
|
||||
|
||||
var/dash = findtext(icon_state, "-")
|
||||
@@ -80,8 +79,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
d2 = text2num( copytext( icon_state, dash+1 ) )
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
|
||||
if(level==1) hide(T.intact)
|
||||
if(level==1) hide(!T.is_plating())
|
||||
cable_list += src //add it to the global cable list
|
||||
|
||||
|
||||
@@ -97,11 +95,13 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
|
||||
//If underfloor, hide the cable
|
||||
/obj/structure/cable/hide(var/i)
|
||||
|
||||
if(level == 1 && istype(loc, /turf))
|
||||
if(istype(loc, /turf))
|
||||
invisibility = i ? 101 : 0
|
||||
updateicon()
|
||||
|
||||
/obj/structure/cable/hides_under_flooring()
|
||||
return 1
|
||||
|
||||
/obj/structure/cable/proc/updateicon()
|
||||
icon_state = "[d1]-[d2]"
|
||||
alpha = invisibility ? 127 : 255
|
||||
@@ -122,7 +122,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
/obj/structure/cable/attackby(obj/item/W, mob/user)
|
||||
|
||||
var/turf/T = src.loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
@@ -538,7 +538,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
|
||||
/obj/item/stack/cable_coil/update_icon()
|
||||
if (!color)
|
||||
color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
|
||||
color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
|
||||
if(amount == 1)
|
||||
icon_state = "coil1"
|
||||
name = "cable piece"
|
||||
@@ -597,7 +597,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
if("Yellow")
|
||||
color = COLOR_YELLOW
|
||||
if("Green")
|
||||
color = COLOR_GREEN
|
||||
color = COLOR_LIME
|
||||
if("Pink")
|
||||
color = COLOR_PINK
|
||||
if("Blue")
|
||||
@@ -654,7 +654,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
user << "You can't lay cable at a place that far away."
|
||||
return
|
||||
|
||||
if(F.intact) // Ff floor is intact, complain
|
||||
if(!F.is_plating()) // Ff floor is intact, complain
|
||||
user << "You can't lay cable there unless the floor tiles are removed."
|
||||
return
|
||||
|
||||
@@ -749,7 +749,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
|
||||
var/turf/T = C.loc
|
||||
|
||||
if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable
|
||||
if(!isturf(T) || !T.is_plating()) // sanity checks, also stop use interacting with T-scanner revealed cable
|
||||
return
|
||||
|
||||
if(get_dist(C, user) > 1) // make sure it's close enough
|
||||
@@ -765,7 +765,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
|
||||
// one end of the clicked cable is pointing towards us
|
||||
if(C.d1 == dirn || C.d2 == dirn)
|
||||
if(U.intact) // can't place a cable if the floor is complete
|
||||
if(!U.is_plating()) // can't place a cable if the floor is complete
|
||||
user << "You can't lay cable there unless the floor tiles are removed."
|
||||
return
|
||||
else
|
||||
@@ -878,7 +878,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
color = COLOR_BLUE
|
||||
|
||||
/obj/item/stack/cable_coil/green
|
||||
color = COLOR_GREEN
|
||||
color = COLOR_LIME
|
||||
|
||||
/obj/item/stack/cable_coil/pink
|
||||
color = COLOR_PINK
|
||||
@@ -893,5 +893,5 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
color = COLOR_WHITE
|
||||
|
||||
/obj/item/stack/cable_coil/random/New()
|
||||
color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
|
||||
color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
|
||||
..()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user)
|
||||
|
||||
var/turf/T = src.loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
/turf/simulated/floor/engine/attack_hand(var/mob/user as mob)
|
||||
if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
|
||||
return
|
||||
if (user.pulling.anchored)
|
||||
return
|
||||
if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
|
||||
return
|
||||
if (ismob(user.pulling))
|
||||
var/mob/M = user.pulling
|
||||
var/atom/movable/t = M.pulling
|
||||
M.stop_pulling()
|
||||
step(user.pulling, get_dir(user.pulling.loc, src))
|
||||
M.start_pulling(t)
|
||||
else
|
||||
step(user.pulling, get_dir(user.pulling.loc, src))
|
||||
return
|
||||
|
||||
/turf/simulated/floor/engine/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
ChangeTurf(get_base_turf(src.z))
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
ChangeTurf(get_base_turf(src.z))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/turf/simulated/floor/engine/blob_act()
|
||||
if (prob(25))
|
||||
ChangeTurf(get_base_turf(src.z))
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
var/turf/T = user.loc
|
||||
|
||||
if(T.intact || !istype(T, /turf/simulated/floor))
|
||||
if(!T.is_plating() || !istype(T, /turf/simulated/floor))
|
||||
return
|
||||
|
||||
if(get_dist(src, user) > 1)
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
return 1000
|
||||
|
||||
/turf/singularity_act(S, current_size)
|
||||
if(intact)
|
||||
if(!is_plating())
|
||||
for(var/obj/O in contents)
|
||||
if(O.level != 1)
|
||||
continue
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
unacidable = 1
|
||||
use_power = 0
|
||||
light_range = 4
|
||||
flags = PROXMOVE
|
||||
var/obj/machinery/field_generator/FG1 = null
|
||||
var/obj/machinery/field_generator/FG2 = null
|
||||
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
|
||||
@@ -62,7 +63,7 @@
|
||||
user.throw_at(target, 200, 4)
|
||||
|
||||
sleep(20)
|
||||
|
||||
|
||||
hasShocked = 0
|
||||
return
|
||||
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
user << "<span class='warning'>You can't build a terminal on space.</span>"
|
||||
return 1
|
||||
else if (istype(tempLoc))
|
||||
if(tempLoc.intact)
|
||||
if(!tempLoc.is_plating())
|
||||
user << "<span class='warning'>You must remove the floor plating first.</span>"
|
||||
return 1
|
||||
user << "<span class='notice'>You start adding cable to the [src].</span>"
|
||||
@@ -272,7 +272,7 @@
|
||||
building_terminal = 1
|
||||
var/turf/tempTDir = terminal.loc
|
||||
if (istype(tempTDir))
|
||||
if(tempTDir.intact)
|
||||
if(!tempTDir.is_plating())
|
||||
user << "<span class='warning'>You must remove the floor plating first.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You begin to cut the cables...</span>"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/obj/machinery/power/terminal/New()
|
||||
..()
|
||||
var/turf/T = src.loc
|
||||
if(level==1) hide(T.intact)
|
||||
if(level==1) hide(!T.is_plating())
|
||||
return
|
||||
|
||||
/obj/machinery/power/terminal/Destroy()
|
||||
@@ -27,12 +27,11 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/terminal/hide(var/i)
|
||||
if(i)
|
||||
invisibility = 101
|
||||
icon_state = "term-f"
|
||||
else
|
||||
invisibility = 0
|
||||
icon_state = "term"
|
||||
invisibility = i ? 101 : 0
|
||||
icon_state = i ? "term-f" : "term"
|
||||
|
||||
/obj/structure/power/terminal/hides_under_flooring()
|
||||
return 1
|
||||
|
||||
// Needed so terminals are not removed from machines list.
|
||||
// Powernet rebuilds need this to work properly.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
iterations = 5
|
||||
descriptor = "moon caves"
|
||||
wall_type = /turf/simulated/mineral
|
||||
floor_type = /turf/simulated/floor/plating/airless/asteroid
|
||||
floor_type = /turf/simulated/floor/asteroid
|
||||
target_turf_type = /turf/unsimulated/mask
|
||||
var/mineral_sparse = /turf/simulated/mineral/random
|
||||
var/mineral_rich = /turf/simulated/mineral/random/high_chance
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/datum/random_map/noise/volcanism/get_additional_spawns(var/value, var/turf/T)
|
||||
if(value>=178)
|
||||
if(istype(T,/turf/simulated/floor/plating/airless/asteroid))
|
||||
if(istype(T,/turf/simulated/floor/asteroid))
|
||||
T.ChangeTurf(/turf/simulated/floor/airless/lava)
|
||||
else if(istype(T,/turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = T
|
||||
|
||||
@@ -1369,6 +1369,13 @@
|
||||
required_reagents = list("soymilk" = 4, "sacid" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/ketchup
|
||||
name = "Ketchup"
|
||||
id = "ketchup"
|
||||
result = "ketchup"
|
||||
required_reagents = list("tomatojuice" = 2, "water" = 1, "sugar" = 1)
|
||||
result_amount = 4
|
||||
|
||||
/datum/chemical_reaction/cheesewheel
|
||||
name = "Cheesewheel"
|
||||
id = "cheesewheel"
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
w_class = 3.0
|
||||
possible_transfer_amounts = null
|
||||
volume = 600
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj)
|
||||
var/direction = get_dir(src, A)
|
||||
|
||||
@@ -25,31 +25,14 @@
|
||||
..(loc)
|
||||
if(newdir)
|
||||
set_dir(newdir)
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
forwards = NORTH
|
||||
backwards = SOUTH
|
||||
if(SOUTH)
|
||||
forwards = SOUTH
|
||||
backwards = NORTH
|
||||
if(EAST)
|
||||
forwards = EAST
|
||||
backwards = WEST
|
||||
if(WEST)
|
||||
forwards = WEST
|
||||
backwards = EAST
|
||||
if(NORTHEAST)
|
||||
forwards = EAST
|
||||
backwards = SOUTH
|
||||
if(NORTHWEST)
|
||||
forwards = SOUTH
|
||||
backwards = WEST
|
||||
if(SOUTHEAST)
|
||||
forwards = NORTH
|
||||
backwards = EAST
|
||||
if(SOUTHWEST)
|
||||
forwards = WEST
|
||||
backwards = NORTH
|
||||
|
||||
if(dir & (dir-1)) // Diagonal. Forwards is *away* from dir, curving to the right.
|
||||
forwards = turn(dir, 135)
|
||||
backwards = turn(dir, 45)
|
||||
else
|
||||
forwards = dir
|
||||
backwards = turn(dir, 180)
|
||||
|
||||
if(on)
|
||||
operating = 1
|
||||
setmove()
|
||||
@@ -96,7 +79,7 @@
|
||||
/obj/machinery/conveyor/attackby(var/obj/item/I, mob/user)
|
||||
if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts
|
||||
if(I.loc != user) return // This should stop mounted modules ending up outside the module.
|
||||
|
||||
|
||||
user.drop_item(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
ispipe = 1
|
||||
|
||||
var/turf/T = src.loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
user << "You can only attach the [nicetype] if the floor plating is removed."
|
||||
return
|
||||
|
||||
|
||||
@@ -713,7 +713,7 @@
|
||||
// update the icon_state to reflect hidden status
|
||||
proc/update()
|
||||
var/turf/T = src.loc
|
||||
hide(T.intact && !istype(T,/turf/space)) // space never hides pipes
|
||||
hide(!T.is_plating() && !istype(T,/turf/space)) // space never hides pipes
|
||||
|
||||
// hide called by levelupdate if turf intact status changes
|
||||
// change visibility status and force update of icon
|
||||
@@ -746,14 +746,10 @@
|
||||
H.active = 0
|
||||
H.loc = src
|
||||
return
|
||||
if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
|
||||
if(!T.is_plating() && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
|
||||
var/turf/simulated/floor/F = T
|
||||
//F.health = 100
|
||||
F.burnt = 1
|
||||
F.intact = 0
|
||||
F.levelupdate()
|
||||
F.break_tile()
|
||||
new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff
|
||||
F.icon_state = "Floor[F.burnt ? "1" : ""]"
|
||||
|
||||
if(direction) // direction is specified
|
||||
if(istype(T, /turf/space)) // if ended in space, then range is unlimited
|
||||
@@ -856,7 +852,7 @@
|
||||
attackby(var/obj/item/I, var/mob/user)
|
||||
|
||||
var/turf/T = src.loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
return // prevent interaction with T-scanner revealed pipes
|
||||
src.add_fingerprint(user)
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
@@ -1339,7 +1335,7 @@
|
||||
return
|
||||
|
||||
var/turf/T = src.loc
|
||||
if(T.intact)
|
||||
if(!T.is_plating())
|
||||
return // prevent interaction with T-scanner revealed pipes
|
||||
src.add_fingerprint(user)
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
|
||||
@@ -196,7 +196,7 @@ other types of metals and chemistry for reagents).
|
||||
name = "Rapid Part Exchange Device"
|
||||
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
|
||||
id = "rped"
|
||||
req_tech = list(TECH_ENGINERING = 3, TECH_MATERIAL = 3)
|
||||
req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
|
||||
materials = list("metal" = 15000, "glass" = 5000)
|
||||
build_path = /obj/item/weapon/storage/part_replacer
|
||||
sort_string = "CBAAA"
|
||||
@@ -278,7 +278,7 @@ other types of metals and chemistry for reagents).
|
||||
name = "Optical meson scanners design"
|
||||
desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
|
||||
id = "mesons"
|
||||
req_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
materials = list("metal" = 50, "glass" = 50)
|
||||
build_path = /obj/item/clothing/glasses/meson
|
||||
sort_string = "GAAAC"
|
||||
@@ -289,21 +289,21 @@ other types of metals and chemistry for reagents).
|
||||
|
||||
/datum/design/item/weapon/mining/jackhammer
|
||||
id = "jackhammer"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
materials = list("metal" = 2000, "glass" = 500, "silver" = 500)
|
||||
build_path = /obj/item/weapon/pickaxe/jackhammer
|
||||
sort_string = "KAAAA"
|
||||
|
||||
/datum/design/item/weapon/mining/drill
|
||||
id = "drill"
|
||||
req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
materials = list("metal" = 6000, "glass" = 1000) //expensive, but no need for miners.
|
||||
build_path = /obj/item/weapon/pickaxe/drill
|
||||
sort_string = "KAAAB"
|
||||
|
||||
/datum/design/item/weapon/mining/plasmacutter
|
||||
id = "plasmacutter"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
materials = list("metal" = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
|
||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||
sort_string = "KAAAC"
|
||||
@@ -317,15 +317,15 @@ other types of metals and chemistry for reagents).
|
||||
|
||||
/datum/design/item/weapon/mining/drill_diamond
|
||||
id = "drill_diamond"
|
||||
req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 4)
|
||||
req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||
materials = list("metal" = 3000, "glass" = 1000, "diamond" = 2000)
|
||||
build_path = /obj/item/weapon/pickaxe/diamonddrill
|
||||
sort_string = "KAAAE"
|
||||
///////////////////////////////////
|
||||
/////////Shield Generators/////////
|
||||
///////////////////////////////////
|
||||
datum/design/circuit/shield
|
||||
req_tech = list("bluespace" = 4, "phorontech" = 3)
|
||||
/datum/design/circuit/shield
|
||||
req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
|
||||
materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
|
||||
|
||||
/datum/design/item/medical
|
||||
@@ -338,7 +338,7 @@ datum/design/circuit/shield
|
||||
/datum/design/item/medical/robot_scanner
|
||||
desc = "A hand-held scanner able to diagnose robotic injuries."
|
||||
id = "robot_scanner"
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 3)
|
||||
materials = list("metal" = 500, "glass" = 200)
|
||||
build_path = /obj/item/device/robotanalyzer
|
||||
sort_string = "MACFA"
|
||||
@@ -395,7 +395,7 @@ datum/design/circuit/shield
|
||||
/datum/design/item/medical/nanopaste
|
||||
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
|
||||
id = "nanopaste"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
materials = list("metal" = 7000, "glass" = 7000)
|
||||
build_path = /obj/item/stack/nanopaste
|
||||
sort_string = "MBAAA"
|
||||
@@ -529,14 +529,14 @@ datum/design/circuit/shield
|
||||
/datum/design/item/weapon/chemsprayer
|
||||
desc = "An advanced chem spraying device."
|
||||
id = "chemsprayer"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINERING = 3, TECH_BIO = 2)
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2)
|
||||
materials = list("metal" = 5000, "glass" = 1000)
|
||||
build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
|
||||
sort_string = "TABAA"
|
||||
|
||||
/datum/design/item/weapon/rapidsyringe
|
||||
id = "rapidsyringe"
|
||||
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINERING = 3, TECH_BIO = 2)
|
||||
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2)
|
||||
materials = list("metal" = 5000, "glass" = 1000)
|
||||
build_path = /obj/item/weapon/gun/launcher/syringe/rapid
|
||||
sort_string = "TABAB"
|
||||
@@ -640,7 +640,7 @@ datum/design/circuit/shield
|
||||
|
||||
/datum/design/item/posibrain
|
||||
id = "posibrain"
|
||||
req_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
materials = list("metal" = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100)
|
||||
build_path = /obj/item/device/mmi/digital/posibrain
|
||||
sort_string = "VACAB"
|
||||
@@ -826,12 +826,6 @@ CIRCUITS BELOW
|
||||
build_path = /obj/item/weapon/circuitboard/mecha_control
|
||||
sort_string = "HAAAC"
|
||||
|
||||
/datum/design/circuit/mechapower
|
||||
name = "mech bay power control console"
|
||||
id = "mechapower"
|
||||
build_path = /obj/item/weapon/circuitboard/mech_bay_power_console
|
||||
sort_string = "HAAAD"
|
||||
|
||||
/datum/design/circuit/rdconsole
|
||||
name = "R&D control console"
|
||||
id = "rdconsole"
|
||||
@@ -884,28 +878,28 @@ CIRCUITS BELOW
|
||||
/datum/design/circuit/destructive_analyzer
|
||||
name = "destructive analyzer"
|
||||
id = "destructive_analyzer"
|
||||
req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/destructive_analyzer
|
||||
sort_string = "HABAA"
|
||||
|
||||
/datum/design/circuit/protolathe
|
||||
name = "protolathe"
|
||||
id = "protolathe"
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/protolathe
|
||||
sort_string = "HABAB"
|
||||
|
||||
/datum/design/circuit/circuit_imprinter
|
||||
name = "circuit imprinter"
|
||||
id = "circuit_imprinter"
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/circuit_imprinter
|
||||
sort_string = "HABAC"
|
||||
|
||||
/datum/design/circuit/autolathe
|
||||
name = "autolathe board"
|
||||
id = "autolathe"
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/autolathe
|
||||
sort_string = "HABAD"
|
||||
|
||||
@@ -926,16 +920,23 @@ CIRCUITS BELOW
|
||||
/datum/design/circuit/mechfab
|
||||
name = "exosuit fabricator"
|
||||
id = "mechfab"
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
build_path = /obj/item/weapon/circuitboard/mechfab
|
||||
sort_string = "HABAE"
|
||||
|
||||
/datum/design/circuit/mech_recharger
|
||||
name = "mech recharger"
|
||||
id = "mech_recharger"
|
||||
req_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/mech_recharger
|
||||
sort_string = "HACAA"
|
||||
|
||||
/datum/design/circuit/recharge_station
|
||||
name = "cyborg recharge station"
|
||||
id = "recharge_station"
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/recharge_station
|
||||
sort_string = "HACAA"
|
||||
sort_string = "HACAC"
|
||||
|
||||
/datum/design/circuit/atmosalerts
|
||||
name = "atmosphere alert console"
|
||||
@@ -952,7 +953,7 @@ CIRCUITS BELOW
|
||||
/datum/design/circuit/rcon_console
|
||||
name = "RCON remote control console"
|
||||
id = "rcon_console"
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_POWER = 5)
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5)
|
||||
build_path = /obj/item/weapon/circuitboard/rcon_console
|
||||
sort_string = "JAAAC"
|
||||
|
||||
@@ -978,28 +979,28 @@ CIRCUITS BELOW
|
||||
/datum/design/circuit/pacman
|
||||
name = "PACMAN-type generator"
|
||||
id = "pacman"
|
||||
req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINEERING = 3)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman
|
||||
sort_string = "JBAAA"
|
||||
|
||||
/datum/design/circuit/superpacman
|
||||
name = "SUPERPACMAN-type generator"
|
||||
id = "superpacman"
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINERING = 4)
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman/super
|
||||
sort_string = "JBAAB"
|
||||
|
||||
/datum/design/circuit/mrspacman
|
||||
name = "MRSPACMAN-type generator"
|
||||
id = "mrspacman"
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINERING = 5)
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman/mrs
|
||||
sort_string = "JBAAC"
|
||||
|
||||
/datum/design/circuit/batteryrack
|
||||
name = "cell rack PSU"
|
||||
id = "batteryrack"
|
||||
req_tech = list(TECH_POWER = 3, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/batteryrack
|
||||
sort_string = "JBABA"
|
||||
|
||||
@@ -1007,21 +1008,21 @@ CIRCUITS BELOW
|
||||
name = "'SMES' superconductive magnetic energy storage"
|
||||
desc = "Allows for the construction of circuit boards used to build a SMES."
|
||||
id = "smes_cell"
|
||||
req_tech = list(TECH_POWER = 7, TECH_ENGINERING = 5)
|
||||
req_tech = list(TECH_POWER = 7, TECH_ENGINEERING = 5)
|
||||
build_path = /obj/item/weapon/circuitboard/smes
|
||||
sort_string = "JBABB"
|
||||
|
||||
/datum/design/circuit/gas_heater
|
||||
name = "gas heating system"
|
||||
id = "gasheater"
|
||||
req_tech = list(TECH_POWER = 2, TECH_ENGINERING = 1)
|
||||
req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||
build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
|
||||
sort_string = "JCAAA"
|
||||
|
||||
/datum/design/circuit/gas_cooler
|
||||
name = "gas cooling system"
|
||||
id = "gascooler"
|
||||
req_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
|
||||
sort_string = "JCAAB"
|
||||
|
||||
@@ -1148,7 +1149,7 @@ CIRCUITS BELOW
|
||||
sort_string = "NAADC"
|
||||
|
||||
/datum/design/circuit/tcom
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
|
||||
/datum/design/circuit/tcom/AssembleDesignName()
|
||||
name = "Telecommunications machinery circuit design ([name])"
|
||||
@@ -1182,21 +1183,21 @@ CIRCUITS BELOW
|
||||
/datum/design/circuit/tcom/relay
|
||||
name = "relay mainframe"
|
||||
id = "tcom-relay"
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 4, TECH_BLUESPACE = 3)
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
|
||||
build_path = /obj/item/weapon/circuitboard/telecomms/relay
|
||||
sort_string = "PAAAE"
|
||||
|
||||
/datum/design/circuit/tcom/broadcaster
|
||||
name = "subspace broadcaster"
|
||||
id = "tcom-broadcaster"
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4, TECH_BLUESPACE = 2)
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
|
||||
sort_string = "PAAAF"
|
||||
|
||||
/datum/design/circuit/tcom/receiver
|
||||
name = "subspace receiver"
|
||||
id = "tcom-receiver"
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_BLUESPACE = 2)
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/telecomms/receiver
|
||||
sort_string = "PAAAG"
|
||||
|
||||
@@ -1349,14 +1350,14 @@ CIRCUITS BELOW
|
||||
name = "PDA design"
|
||||
desc = "Cheaper than whiny non-digital assistants."
|
||||
id = "pda"
|
||||
req_tech = list(TECH_ENGINERING = 2, TECH_POWER = 3)
|
||||
req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3)
|
||||
materials = list("metal" = 50, "glass" = 50)
|
||||
build_path = /obj/item/device/pda
|
||||
sort_string = "VAAAA"
|
||||
|
||||
// Cartridges
|
||||
/datum/design/item/pda_cartridge
|
||||
req_tech = list(TECH_ENGINERING = 2, TECH_POWER = 3)
|
||||
req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3)
|
||||
materials = list("metal" = 50, "glass" = 50)
|
||||
|
||||
/datum/design/item/pda_cartridge/AssembleDesignName()
|
||||
@@ -1513,25 +1514,25 @@ MECHAS BELOW
|
||||
/datum/design/item/mecha/rcd
|
||||
desc = "An exosuit-mounted rapid construction device."
|
||||
id = "mech_rcd"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER=4, TECH_ENGINERING = 4)
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER=4, TECH_ENGINEERING = 4)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
|
||||
|
||||
/datum/design/item/mecha/gravcatapult
|
||||
desc = "An exosuit-mounted gravitational catapult."
|
||||
id = "mech_gravcatapult"
|
||||
req_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
|
||||
|
||||
/datum/design/item/mecha/repair_droid
|
||||
desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
|
||||
id = "mech_repair_droid"
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
|
||||
|
||||
/datum/design/item/mecha/phoron_generator
|
||||
desc = "Exosuit-mounted phoron generator."
|
||||
id = "mech_phoron_generator"
|
||||
req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINERING = 2)
|
||||
req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/generator
|
||||
|
||||
/datum/design/item/mecha/energy_relay
|
||||
@@ -1548,7 +1549,7 @@ MECHAS BELOW
|
||||
/datum/design/item/mecha/proj_armor
|
||||
desc = "Exosuit projectile armor booster."
|
||||
id = "mech_proj_armor"
|
||||
req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINERING=3)
|
||||
req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINEERING=3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
|
||||
|
||||
/datum/design/item/mecha/syringe_gun
|
||||
@@ -1560,13 +1561,13 @@ MECHAS BELOW
|
||||
/datum/design/item/mecha/diamond_drill
|
||||
desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
|
||||
id = "mech_diamond_drill"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
|
||||
|
||||
/datum/design/item/mecha/generator_nuclear
|
||||
desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
|
||||
id = "mech_generator_nuclear"
|
||||
req_tech = list(TECH_POWER= 3, TECH_ENGINERING = 3, TECH_MATERIAL = 3)
|
||||
req_tech = list(TECH_POWER= 3, TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
|
||||
|
||||
/datum/design/item/synthetic_flash
|
||||
|
||||
@@ -98,7 +98,7 @@ research holder datum.
|
||||
var/datum/design/A = known_designs[i]
|
||||
if(A.id == D.id) // We are guaranteed to reach this if the ids are the same, because sort_string will also be the same
|
||||
return
|
||||
if(A.sort_string > D.sort_string)
|
||||
if(A.sort_string >= D.sort_string)
|
||||
known_designs.Insert(i, D)
|
||||
return
|
||||
known_designs.Add(D)
|
||||
@@ -141,7 +141,7 @@ research holder datum.
|
||||
/datum/tech/engineering
|
||||
name = "Engineering Research"
|
||||
desc = "Development of new and improved engineering parts."
|
||||
id = TECH_ENGINERING
|
||||
id = TECH_ENGINEERING
|
||||
|
||||
/datum/tech/phorontech
|
||||
name = "Phoron Research"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
invocation = "none"
|
||||
invocation_type = SpI_NONE
|
||||
range = 0
|
||||
summon_type = list(/turf/simulated/floor/engine/cult)
|
||||
summon_type = list(/turf/simulated/floor/cult)
|
||||
|
||||
hud_state = "const_floor"
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
proc/findNullRod(var/atom/target)
|
||||
if(istype(target,/obj/item/weapon/nullrod))
|
||||
var/turf/T = get_turf(target)
|
||||
T.turf_animation('icons/effects/96x96.dmi',"nullding",-32,-32,MOB_LAYER+1,'sound/piano/Ab7.ogg')
|
||||
return 1
|
||||
else if(target.contents)
|
||||
for(var/atom/A in target.contents)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
for (var/specie in all_species)
|
||||
var/datum/species/S = all_species[specie]
|
||||
if(!S.virus_immune)
|
||||
meat += S.name
|
||||
meat += S
|
||||
if(meat.len)
|
||||
var/num = rand(1,meat.len)
|
||||
for(var/i=0,i<num,i++)
|
||||
@@ -270,4 +270,4 @@ proc/virology_letterhead(var/report_name)
|
||||
if(H.effect.type == type)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
Reference in New Issue
Block a user