Merge remote-tracking branch 'upstream/dev' into 150817-SynthAccess

This commit is contained in:
PsiOmegaDelta
2015-08-20 10:01:19 +02:00
269 changed files with 11310 additions and 10989 deletions
+1
View File
@@ -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,
+49
View File
@@ -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")
+1 -1
View File
@@ -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))
+11 -10
View File
@@ -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>"
+7 -7
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -4
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
+25 -4
View File
@@ -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
+1 -1
View File
@@ -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"
+58
View File
@@ -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"
+2 -2
View File
@@ -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
+25 -13
View File
@@ -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"
+84 -19
View File
@@ -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."
+1 -1
View File
@@ -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)
+39
View File
@@ -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
+4
View File
@@ -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)
+4 -1
View File
@@ -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()
..()
-1
View File
@@ -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)
+2 -2
View File
@@ -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))
+1 -1
View File
@@ -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)
+8 -8
View File
@@ -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
+27 -18
View File
@@ -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)
+3 -1
View File
@@ -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
+5
View File
@@ -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
+12 -12
View File
@@ -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)
+1 -1
View File
@@ -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()
..()
+4 -4
View File
@@ -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.
+3 -4
View File
@@ -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]
+2
View File
@@ -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
+3
View File
@@ -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
View File
@@ -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"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+34 -26
View File
@@ -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()
+2 -12
View File
@@ -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
+1 -1
View File
@@ -157,7 +157,7 @@
if("Yellow")
colour = COLOR_YELLOW
if("Green")
colour = COLOR_GREEN
colour = COLOR_LIME
if("Pink")
colour = COLOR_PINK
if("Blue")
+4 -3
View File
@@ -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
View File
@@ -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)
..()
+1 -1
View File
@@ -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))
-37
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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>"
+6 -7
View File
@@ -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.
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+9 -26
View File
@@ -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
+5 -9
View File
@@ -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))
+48 -47
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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)
+2 -2
View File
@@ -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