Simpler lighting process, bug fixes, & modular computer tweaks (#1809)

Fixes #1806
Fixes #1730
Fixes #1747
Partially addresses #1763
Addresses #1283
Fixes #1799
Fixes #1816
Fixes #1813
This commit is contained in:
Lohikar
2017-02-24 12:24:31 -06:00
committed by skull132
parent a52092b294
commit 65e0f3de97
63 changed files with 270 additions and 146 deletions
@@ -3,6 +3,10 @@
name = "captain voidsuit helmet"
icon_state = "capspace"
item_state = "capspace"
item_state_slots = list(
slot_l_hand_str = "capspacehelmet",
slot_r_hand_str = "capspacehelmet"
)
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -11,6 +15,10 @@
desc = "A bulky, heavy-duty piece of exclusive Nanotrasen armor. YOU are in charge!"
icon_state = "capspace"
item_state = "capspace"
item_state_slots = list(
slot_l_hand_str = "capspacesuit",
slot_r_hand_str = "capspacesuit"
)
w_class = 4
allowed = list(/obj/item/weapon/tank, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
@@ -4,6 +4,10 @@
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
icon_state = "rig0-syndie"
item_state = "syndie_helm"
item_state_slots = list(
slot_l_hand_str = "syndie_helm",
slot_r_hand_str = "syndie_helm"
)
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.3
species_restricted = list("Human", "Vaurca", "Machine")
@@ -15,6 +19,10 @@
name = "blood-red voidsuit"
desc = "An advanced suit that protects against injuries during special operations. Property of Gorlex Marauders."
item_state = "syndie_voidsuit"
item_state_slots = list(
slot_l_hand_str = "syndie_hardsuit",
slot_r_hand_str = "syndie_hardsuit"
)
slowdown = 1
w_class = 3
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
@@ -16,6 +16,10 @@
icon_state = "rig-engineering"
item_state = "eng_voidsuit"
slowdown = 1
item_state_slots = list(
slot_l_hand_str = "eng_hardsuit",
slot_r_hand_str = "eng_hardsuit"
)
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
@@ -34,6 +38,10 @@
/obj/item/clothing/suit/space/void/mining
icon_state = "rig-mining"
name = "mining voidsuit"
item_state_slots = list(
slot_l_hand_str = "mining_hardsuit",
slot_r_hand_str = "mining_hardsuit"
)
desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
item_state = "mining_voidsuit"
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
@@ -54,6 +62,10 @@
name = "medical voidsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding."
item_state = "medical_voidsuit"
item_state_slots = list(
slot_l_hand_str = "medical_hardsuit",
slot_r_hand_str = "medical_hardsuit"
)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50)
@@ -74,6 +86,10 @@
name = "security voidsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
item_state = "sec_voidsuit"
item_state_slots = list(
slot_l_hand_str = "sec_hardsuit",
slot_r_hand_str = "sec_hardsuit"
)
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
@@ -95,5 +111,9 @@
icon_state = "rig-atmos"
name = "atmos voidsuit"
item_state = "atmos_voidsuit"
item_state_slots = list(
slot_l_hand_str = "atmos_hardsuit",
slot_r_hand_str = "atmos_hardsuit"
)
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -36,6 +36,10 @@
name = "gem-encrusted voidsuit"
desc = "A bizarre gem-encrusted suit that radiates magical energies."
item_state = "wiz_voidsuit"
item_state_slots = list(
slot_l_hand_str = "wiz_hardsuit",
slot_r_hand_str = "wiz_hardsuit"
)
slowdown = 1
w_class = 3
unacidable = 1
+13 -6
View File
@@ -59,12 +59,6 @@
base_icon_state = "snow"
footstep_sound = "gravelstep"
/turf/simulated/floor/holofloor/space
icon = 'icons/turf/space.dmi'
name = "\proper space"
icon_state = "0"
footstep_sound = null
/turf/simulated/floor/holofloor/reinforced
icon = 'icons/turf/flooring/tiles.dmi'
initial_flooring = /decl/flooring/reinforced
@@ -72,8 +66,21 @@
icon_state = "reinforced"
footstep_sound = "concretestep"
/turf/simulated/floor/holofloor/space
icon = 'icons/turf/space.dmi'
name = "\proper space"
icon_state = "0"
footstep_sound = null
plane = PLANE_SPACE_BACKGROUND
dynamic_lighting = 0
/turf/simulated/floor/holofloor/space/New()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
I.plane = PLANE_SPACE_DUST
I.alpha = 80
I.blend_mode = BLEND_ADD
overlays += I
/turf/simulated/floor/holofloor/beach
desc = "Uncomfortably gritty for a hologram."
@@ -35,7 +35,6 @@
L_PROF(loc, "overlay_destroy")
global.all_lighting_overlays -= src
global.lighting_update_overlays -= src
lighting_process.curr_overlays -= src
var/turf/T = loc
if (istype(T))
+3 -3
View File
@@ -79,9 +79,9 @@
recipes += new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2)
recipes += new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2)
recipes += new/datum/stack_recipe("firearm receiver", /obj/item/weapon/receivergun, 15, time = 25, one_per_turf = 0, on_floor = 0)
recipes += new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20)
recipes += new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10)
recipes += new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5)
recipes += new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, time = 25, one_per_turf = TRUE)
recipes += new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, time = 25)
recipes += new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, time = 25)
/material/plasteel/generate_recipes()
..()
+10 -10
View File
@@ -11,25 +11,25 @@
/datum/alloy/plasteel
metaltag = "plasteel"
requires = list(
"platinum" = 1,
"carbon" = 2,
"hematite" = 2
)
ORE_PLATINUM = 1,
ORE_COAL = 2,
ORE_IRON = 2
)
product_mod = 0.3
product = /obj/item/stack/material/plasteel
/datum/alloy/steel
metaltag = DEFAULT_WALL_MATERIAL
requires = list(
"carbon" = 1,
"hematite" = 1
)
ORE_COAL = 1,
ORE_IRON = 1
)
product = /obj/item/stack/material/steel
/datum/alloy/borosilicate
metaltag = "borosilicate glass"
requires = list(
"platinum" = 1,
"sand" = 2
)
ORE_PLATINUM = 1,
ORE_SAND = 2
)
product = /obj/item/stack/material/glass/phoronglass
+33 -9
View File
@@ -302,7 +302,7 @@
new /obj/structure/closet/crate/secure/loot(src)
if(istype(N))
N.overlay_detail = "asteroid[rand(0,9)]"
N.overlay_detail = rand(0,9)
N.updateMineralOverlays(1)
/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
@@ -374,13 +374,21 @@
/turf/simulated/mineral/random
name = "Mineral deposit"
var/mineralSpawnChanceList = list("Uranium" = 5, "Platinum" = 5, "Iron" = 35, "Coal" = 35, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Phoron" = 10)
var/mineralChance = 100 //10 //means 10% chance of this plot changing to a mineral deposit
var/mineralSpawnChanceList = list(
ORE_URANIUM = 5,
ORE_PLATINUM = 5,
ORE_IRON = 35,
ORE_COAL = 35,
ORE_DIAMOND = 1,
ORE_GOLD = 5,
ORE_SILVER = 5,
ORE_PHORON = 10
)
var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit
/turf/simulated/mineral/random/New()
if (prob(mineralChance) && !mineral)
var/mineral_name = pickweight(mineralSpawnChanceList) //temp mineral name
mineral_name = lowertext(mineral_name)
if (mineral_name && (mineral_name in ore_data))
mineral = ore_data[mineral_name]
UpdateMineral()
@@ -388,8 +396,17 @@
. = ..()
/turf/simulated/mineral/random/high_chance
mineralChance = 100 //25
mineralSpawnChanceList = list("Uranium" = 10, "Platinum" = 10, "Iron" = 20, "Coal" = 20, "Diamond" = 2, "Gold" = 10, "Silver" = 10, "Phoron" = 20)
mineralChance = 25
mineralSpawnChanceList = list(
ORE_URANIUM = 10,
ORE_PLATINUM = 10,
ORE_IRON = 20,
ORE_COAL = 20,
ORE_DIAMOND = 2,
ORE_GOLD = 10,
ORE_SILVER = 10,
ORE_PHORON = 20
)
/**********************Asteroid**************************/
@@ -411,13 +428,14 @@
temperature = TCMB
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
var/overlay_detail
var/static/list/overlay_cache
has_resources = 1
footstep_sound = "gravelstep"
/turf/simulated/floor/asteroid/New()
if(prob(20))
overlay_detail = "asteroid[rand(0,9)]"
overlay_detail = rand(0,9)
/turf/simulated/floor/asteroid/ex_act(severity)
switch(severity)
@@ -536,8 +554,14 @@
if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral))
overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[direction])
//todo cache
if(overlay_detail) overlays |= image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail)
if (!overlay_cache)
overlay_cache = list()
overlay_cache.len = 10
for (var/i = 1; i <= overlay_cache.len; i++)
overlay_cache[i] = image('icons/turf/flooring/decals.dmi', "asteroid[i - 1]")
if(overlay_detail)
overlays += overlay_cache[overlay_detail + 1]
if(update_neighbors)
var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)
+11 -11
View File
@@ -24,7 +24,7 @@ var/global/list/ore_data = list()
display_name = name
/ore/uranium
name = "uranium"
name = ORE_URANIUM
display_name = "pitchblende"
smelts_to = "uranium"
result_amount = 5
@@ -38,7 +38,7 @@ var/global/list/ore_data = list()
xarch_source_mineral = "potassium"
/ore/hematite
name = "hematite"
name = ORE_IRON
display_name = "hematite"
smelts_to = "iron"
alloy = 1
@@ -48,7 +48,7 @@ var/global/list/ore_data = list()
scan_icon = "mineral_common"
/ore/coal
name = "carbon"
name = ORE_COAL
display_name = "raw carbon"
smelts_to = "plastic"
alloy = 1
@@ -58,13 +58,13 @@ var/global/list/ore_data = list()
scan_icon = "mineral_common"
/ore/glass
name = "sand"
name = ORE_SAND
display_name = "sand"
smelts_to = "glass"
compresses_to = "sandstone"
/ore/phoron
name = "phoron"
name = ORE_PHORON
display_name = "phoron crystals"
compresses_to = "phoron"
//smelts_to = something that explodes violently on the conveyor, huhuhuhu
@@ -81,7 +81,7 @@ var/global/list/ore_data = list()
xarch_source_mineral = "phoron"
/ore/silver
name = "silver"
name = ORE_SILVER
display_name = "native silver"
smelts_to = "silver"
result_amount = 5
@@ -90,7 +90,7 @@ var/global/list/ore_data = list()
scan_icon = "mineral_uncommon"
/ore/gold
smelts_to = "gold"
smelts_to = ORE_GOLD
name = "gold"
display_name = "native gold"
result_amount = 5
@@ -105,7 +105,7 @@ var/global/list/ore_data = list()
)
/ore/diamond
name = "diamond"
name = ORE_DIAMOND
display_name = "diamond"
compresses_to = "diamond"
result_amount = 5
@@ -115,7 +115,7 @@ var/global/list/ore_data = list()
xarch_source_mineral = "nitrogen"
/ore/platinum
name = "platinum"
name = ORE_PLATINUM
display_name = "raw platinum"
smelts_to = "platinum"
compresses_to = "osmium"
@@ -126,8 +126,8 @@ var/global/list/ore_data = list()
scan_icon = "mineral_rare"
/ore/hydrogen
name = "mhydrogen"
name = ORE_HYDROGEN
display_name = "metallic hydrogen"
smelts_to = "tritium"
compresses_to = "mhydrogen"
scan_icon = "mineral_rare"
scan_icon = "mineral_rare"
+7 -2
View File
@@ -101,7 +101,9 @@
var/turf/t = turf
if(obscuredTurfs[t])
if(!t.obfuscations[obfuscation.type])
t.obfuscations[obfuscation.type] = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
var/image/obfuscation_static = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
obfuscation_static.plane = 0
t.obfuscations[obfuscation.type] = obfuscation_static
obscured += t.obfuscations[obfuscation.type]
for(var/eye in seenby)
@@ -140,7 +142,10 @@
for(var/turf in obscuredTurfs)
var/turf/t = turf
if(!t.obfuscations[obfuscation.type])
t.obfuscations[obfuscation.type] = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
var/image/obfuscation_static = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER)
obfuscation_static.plane = 0
t.obfuscations[obfuscation.type] = obfuscation_static
obscured += t.obfuscations[obfuscation.type]
#undef UPDATE_BUFFER
@@ -100,3 +100,5 @@
var/list/equipment_overlays = list() // Extra overlays from equipped items
var/is_noisy = FALSE // if TRUE, movement should make sound.
var/last_x = 0
var/last_y = 0
@@ -127,6 +127,10 @@
. = ..()
if (is_noisy)
var/turf/T = get_turf(src)
if (T.x == last_x && T.y == last_y)
return
last_x = T.x
last_y = T.y
if (m_intent == "run")
playsound(src, T.footstep_sound, 70, 1)
else
@@ -126,7 +126,7 @@
force_holder = wrapped.force
wrapped.force = 0.0
wrapped.attack(M,user)
if(deleted(wrapped))
if(QDELETED(wrapped))
wrapped = null
return 1
else// mob interactions
@@ -282,4 +282,4 @@
can_hold = list(
/obj/item/stack/material
)
)
@@ -83,15 +83,21 @@
overlays.Cut()
if(!enabled)
if(icon_state_screensaver)
var/probably_working = hard_drive && processor_unit && damage < broken_damage && (apc_power(0) || battery_power(0))
if(icon_state_screensaver && probably_working)
overlays.Add(icon_state_screensaver)
set_light(0)
if (screensaver_light_range && probably_working)
set_light(screensaver_light_range, 1, screensaver_light_color ? screensaver_light_color : "#FFFFFF")
else
set_light(0)
return
set_light(light_strength)
if(active_program)
overlays.Add(active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu)
set_light(light_strength, l_color = active_program.color)
else
overlays.Add(icon_state_menu)
set_light(light_strength, l_color = menu_light_color)
/obj/item/modular_computer/proc/turn_on(var/mob/user)
if(tesla_link)
@@ -63,6 +63,7 @@
H.holder2 = src
user.drop_from_inventory(H)
H.forceMove(src)
update_icon()
// Uninstalls component. Found and Critical vars may be passed by parent types, if they have additional hardware.
/obj/item/modular_computer/proc/uninstall_component(var/mob/living/user, var/obj/item/weapon/computer_hardware/H, var/found = 0, var/critical = 0)
@@ -101,10 +102,10 @@
to_chat(user, "You remove \the [H] from \the [src].")
H.forceMove(get_turf(src))
H.holder2 = null
update_icon()
if(critical && enabled)
to_chat(user, "<span class='danger'>\The [src]'s screen freezes for few seconds and then displays an \"HARDWARE ERROR: Critical component disconnected. Please verify component connection and reboot the device. If the problem persists contact technical support for assistance.\" warning.</span>")
shutdown_computer()
update_icon()
// Checks all hardware pieces to determine if name matches, if yes, returns the hardware piece, otherwise returns null
@@ -153,10 +153,14 @@
if(components.len)
to_chat(user, "Remove all components from \the [src] before disassembling it.")
return
new /obj/item/stack/material/steel( get_turf(src.loc), steel_sheet_cost )
src.visible_message("\The [src] has been disassembled by [user].")
//relay_qdel()
qdel(src)
to_chat(user, span("notice", "You begin to disassemble \the [src]."))
playsound(user, 'sound/items/Ratchet.ogg', 100, 1)
if (do_after(user, 20))
new /obj/item/stack/material/steel(get_turf(src.loc), steel_sheet_cost)
src.visible_message("\The [user] disassembles \the [src].",
"You disassemble \the [src].",
"You hear a ratchet.")
qdel(src)
return
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -169,6 +173,7 @@
return
to_chat(user, "You begin repairing damage to \the [src]...")
playsound(src, 'sound/items/Welder.ogg', 100, 1)
if(WT.remove_fuel(round(damage/75)) && do_after(usr, damage/10))
damage = 0
to_chat(user, "You repair \the [src].")
@@ -28,6 +28,9 @@
var/icon_state_unpowered = null // Icon state when the computer is turned off
var/icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.
var/icon_state_screensaver = null
var/screensaver_light_range = 0
var/screensaver_light_color = null
var/menu_light_color = null
var/max_hardware_size = 0 // Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed.
var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer.
var/light_strength = 0 // Intensity of light this computer emits. Comparable to numbers light fixtures use.
@@ -4,7 +4,9 @@
icon = 'icons/obj/modular_console.dmi'
icon_state = "console"
icon_state_unpowered = "console"
icon_state_menu = "menu"
icon_state_screensaver = "standby-light"
icon_state_menu = "menu-light"
menu_light_color = LIGHT_COLOR_BLUE
hardware_flag = PROGRAM_CONSOLE
anchored = TRUE
density = 1
@@ -12,6 +14,8 @@
base_active_power_usage = 500
max_hardware_size = 3
steel_sheet_cost = 20
light_strength = 4
light_strength = 2
max_damage = 300
broken_damage = 150
broken_damage = 150
screensaver_light_range = 1.4
screensaver_light_color = "#0099ff"
@@ -22,6 +22,7 @@
var/available_on_syndinet = 0 // Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to 1 to enable.
var/computer_emagged = 0 // Set to 1 if computer that's running us was emagged. Computer updates this every Process() tick
var/ui_header = null // Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /nano/images/status_icons. Be careful not to use too large images!
var/color = "#FFFFFF" // The color of light the computer should emit when this program is open.
/datum/computer_file/program/New(var/obj/item/modular_computer/comp = null)
..()
@@ -12,6 +12,7 @@
var/dos_speed = 0
var/error = ""
var/executed = 0
color = LIGHT_COLOR_RED
/datum/computer_file/program/ntnet_dos/process_tick()
dos_speed = 0
@@ -7,6 +7,7 @@
size = 73 // Very large, a price for bypassing ID checks completely.
available_on_ntnet = 0
available_on_syndinet = 1
color = LIGHT_COLOR_RED
/datum/computer_file/program/camera_monitor/hacked/process_tick()
..()
@@ -9,6 +9,7 @@
available_on_syndinet = 1
nanomodule_path = /datum/nano_module/program/revelation/
var/armed = 0
color = LIGHT_COLOR_RED
/datum/computer_file/program/revelation/run_program(var/mob/living/user)
. = ..(user)
@@ -9,6 +9,7 @@
usage_flags = PROGRAM_CONSOLE
requires_ntnet = 0
size = 8
color = LIGHT_COLOR_BLUE
/datum/nano_module/program/card_mod
name = "ID card modification program"
@@ -16,6 +16,7 @@
usage_flags = PROGRAM_CONSOLE
network_destination = "station long-range communication array"
var/datum/comm_message_listener/message_core = new
color = LIGHT_COLOR_BLUE
/datum/computer_file/program/comm/clone()
var/datum/computer_file/program/comm/temp = ..()
@@ -13,6 +13,7 @@
network_destination = "power monitoring system"
size = 9
var/has_alert = 0
color = LIGHT_COLOR_ORANGE
/datum/computer_file/program/power_monitor/process_tick()
..()
@@ -41,6 +42,7 @@
network_destination = "alarm monitoring network"
size = 5
var/has_alert = 0
color = LIGHT_COLOR_CYAN
/datum/computer_file/program/alarm_monitor/process_tick()
..()
@@ -72,6 +74,7 @@
requires_ntnet_feature = NTNET_SYSTEMCONTROL
usage_flags = PROGRAM_CONSOLE
size = 17
color = LIGHT_COLOR_CYAN
/datum/computer_file/program/rcon_console
filename = "rconconsole"
@@ -86,6 +89,7 @@
requires_ntnet_feature = NTNET_SYSTEMCONTROL
usage_flags = PROGRAM_CONSOLE
size = 19
color = LIGHT_COLOR_GREEN
// Night-Mode Toggle for CE
/datum/computer_file/program/lighting_control
@@ -101,3 +105,4 @@
requires_ntnet_feature = NTNET_SYSTEMCONTROL
usage_flags = PROGRAM_CONSOLE
size = 9
color = LIGHT_COLOR_GREEN
@@ -12,6 +12,7 @@
available_on_ntnet = 1 // ... but we want it to be available for download.
nanomodule_path = /datum/nano_module/arcade_classic/ // Path of relevant nano module. The nano module is defined further in the file.
var/picked_enemy_name
color = LIGHT_COLOR_BLUE
// Blatantly stolen and shortened version from arcade machines. Generates a random enemy name
/datum/computer_file/program/game/arcade/proc/random_enemy_name()
@@ -14,6 +14,7 @@
var/downloading = 0
var/message = ""
var/show_archived = 0
color = LIGHT_COLOR_GREEN
/datum/computer_file/program/newsbrowser/process_tick()
if(!downloading)
@@ -15,6 +15,7 @@
var/datum/ntnet_conversation/channel = null
var/operator_mode = 0 // Channel operator mode
var/netadmin_mode = 0 // Administrator mode (invisible to other users + bypasses passwords)
color = LIGHT_COLOR_GREEN
/datum/computer_file/program/chatclient/New()
username = "DefaultUser[rand(100, 999)]"
@@ -11,6 +11,7 @@ var/global/nttransfer_uid = 0
network_destination = "other device via P2P tunnel"
available_on_ntnet = 1
nanomodule_path = /datum/nano_module/program/computer_nttransfer/
color = LIGHT_COLOR_GREEN
var/error = "" // Error screen
var/server_password = "" // Optional password to download the file.
@@ -10,3 +10,4 @@
network_destination = "crew lifesigns monitoring system"
size = 11
usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
color = LIGHT_COLOR_CYAN
@@ -10,6 +10,7 @@
available_on_ntnet = 1
nanomodule_path = /datum/nano_module/program/computer_aidiag/
var/restoring = 0
color = LIGHT_COLOR_PURPLE
/datum/computer_file/program/aidiag/proc/get_ai()
if(computer && computer.ai_slot && computer.ai_slot.check_functionality() && computer.ai_slot.enabled && computer.ai_slot.stored_card && computer.ai_slot.stored_card.carded_ai)
@@ -9,3 +9,4 @@
usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
requires_ntnet = 1
size = 8
color = LIGHT_COLOR_PURPLE
@@ -8,6 +8,7 @@
required_access_run = access_network
required_access_download = access_heads
usage_flags = PROGRAM_CONSOLE
color = LIGHT_COLOR_GREEN
available_on_ntnet = 1
nanomodule_path = /datum/nano_module/computer_ntnetmonitor/
@@ -31,6 +31,7 @@
available_on_ntnet = 1
requires_ntnet = 1
required_access_download = access_heads
color = LIGHT_COLOR_ORANGE
/datum/nano_module/camera_monitor
name = "Camera Monitoring program"
@@ -12,6 +12,8 @@ var/warrant_uid = 0
filename = "digitalwarrant"
filedesc = "Warrant Assistant"
extended_desc = "Official NTsec program for creation and handling of warrants."
program_icon_state = "security"
color = LIGHT_COLOR_ORANGE
size = 8
requires_ntnet = 1
available_on_ntnet = 1
@@ -7,6 +7,7 @@
filedesc = "NTOS Client Manager"
extended_desc = "This program allows configuration of computer's software"
program_icon_state = "generic"
color = LIGHT_COLOR_GREEN
unsendable = 1
undeletable = 1
size = 4
@@ -7,6 +7,7 @@
filedesc = "Computer Configuration Tool"
extended_desc = "This program allows configuration of computer's hardware"
program_icon_state = "generic"
color = LIGHT_COLOR_GREEN
unsendable = 1
undeletable = 1
size = 4
@@ -59,4 +60,4 @@
ui = new(user, src, ui_key, "laptop_configuration.tmpl", "NTOS Configuration Utility", 575, 700, state = state)
ui.auto_update_layout = 1
ui.set_initial_data(data)
ui.open()
ui.open()
@@ -4,6 +4,7 @@
filedesc = "NTOS File Manager"
extended_desc = "This program allows management of files."
program_icon_state = "generic"
color = LIGHT_COLOR_GREEN
size = 8
requires_ntnet = 0
available_on_ntnet = 0
@@ -3,6 +3,7 @@
filedesc = "NTNet Software Download Tool"
program_icon_state = "generic"
extended_desc = "This program allows downloads of software from official NT repositories"
color = LIGHT_COLOR_GREEN
unsendable = 1
undeletable = 1
size = 4
@@ -4,7 +4,7 @@
critical = 0
enabled = 1
icon_state = "teslalink"
hardware_size = 2
hardware_size = 3
origin_tech = list(TECH_DATA = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
var/obj/machinery/modular_computer/holder
var/passive_charging_rate = 250 // W
+2 -1
View File
@@ -116,7 +116,8 @@ var/list/organ_cache = list()
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
if(B && prob(40))
reagents.remove_reagent("blood",0.1)
blood_splatter(src,B,1)
if (isturf(loc))
blood_splatter(src,B,1)
if(config.organs_decay) damage += rand(1,3)
if(damage >= max_damage)
damage = max_damage
+12 -2
View File
@@ -15,7 +15,17 @@ var/global/datum/robolimb/basic_robolimb
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from.
var/unavailable_at_chargen // If set, not available at chargen.
var/list/species_can_use = list("Human","Skrell","Tajara","Zhan-Khaza","M'sai","Unathi","Vaurca Worker","Vaurca Warrior","Baseline Frame")
var/list/species_can_use = list(
"Human",
"Skrell",
"Tajara",
"Zhan-Khazan Tajara",
"M'sai Tajara",
"Unathi",
"Vaurca Worker",
"Vaurca Warrior",
"Baseline Frame"
)
var/paintable = 0 //tired of istype exceptions. bullshirt to find, and by god do i know it after this project.
/datum/robolimb/bishop
@@ -61,4 +71,4 @@ var/global/datum/robolimb/basic_robolimb
company = "Human Synthskin"
desc = "This limb is designed to mimic the Human form. It does so with moderate success."
icon = 'icons/mob/human_races/r_human.dmi'
species_can_use = list("Human")
species_can_use = list("Human")
+1 -1
View File
@@ -766,7 +766,7 @@
var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET)))
if(amount_to_take)
stack.use(amount_to_take)
if(deleted(stack))
if(QDELETED(stack))
holdingitems -= stack
beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET))
continue
+2 -2
View File
@@ -1097,8 +1097,8 @@ datum/design/item/experimental_welder
build_path = /obj/item/weapon/computer_hardware/processor_unit/photonic/small
sort_string = "VBAAY"
// Tesla Link
/datum/design/item/modularcomponent/teslalink
// AI Slot
/datum/design/item/modularcomponent/aislot
name = "intellicard slot"
id = "aislot"
req_tech = list(TECH_POWER = 2, TECH_DATA = 3)