(ANTAG) Adds Revelation Virus

- Adds revelation virus, a program that destroys the hard drive on execution. It also has chance of destroying the computer's power supply and/or battery.
- (Added): Simple UI for virus that allows user to rename the program to look like non-malicious one. The virus must be armed first via this UI. Once armed, it will trigger on next execution (even if copied/sent to other system)
- Adds extended description to programs, that contains basic information on what the program is doing.
This commit is contained in:
Atlantis
2015-12-16 16:17:11 +01:00
parent c93a3c755e
commit 1edc286cc3
15 changed files with 133 additions and 37 deletions
@@ -43,37 +43,4 @@
cpu.network_card.identification_string = "Unknown Console"
if(cpu)
cpu.screen_on = 1
cpu.enabled = 1
update_icon()
/*
/obj/machinery/modular_computer/console/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/cell)) // Power Cell. Try to insert it into the console, if it doesn't have cell installed.
if(!cpu || (stat & (BROKEN|MAINT)))
user << "\The [cpu] seems to be broken."
return
if(cpu.battery)
user << "You try to insert \the [W] into \the [cpu], but it't battery slot is occupied."
return
cpu.battery = W
user.drop_from_inventory(W)
W.forceMove(src)
user << "You insert \the [W] into \the [cpu]'s battery slot."
return
if(istype(W, /obj/item/weapon/crowbar)) // Crowbar, remove power cell, if it has one.
if(!cpu || (stat & (BROKEN|MAINT)))
user << "\The [cpu] seems to be broken."
return
if(!cpu.battery)
user << "\The [cpu] doesn't seem to have battery installed."
return
user << "You begin removing \the [cpu.battery] from \the [cpu]."
if(do_after(user, 20))
cpu.battery.forceMove(get_turf(src))
user << "You crowbar \the [cpu.battery] from \the [cpu]."
cpu.battery = null
battery_powered = 0
power_change()
return
return ..()
*/
update_icon()
@@ -8,6 +8,7 @@
var/running = 0 // Set to 1 when the program is run and back to 0 when it's stopped.
var/obj/item/modular_computer/computer // Device that runs this program.
var/filedesc = "Unknown Program" // User-friendly name of this program.
var/extended_desc = "N/A" // Short description of this program's function.
var/program_icon_state = null // Program-specific screen icon state
var/keyboard_icon_state = null // Program-specific keboard icon state, only supported on some devices.
var/requires_ntnet = 0 // Set to 1 for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes.
@@ -5,6 +5,7 @@
filedesc = "Power Monitoring"
nanomodule_path = /datum/nano_module/power_monitor/
program_icon_state = "power_monitor"
extended_desc = "This program connects to sensors around the station to provide information about electrical systems"
keyboard_icon_state = "keyboard9"
required_access = access_engine
requires_ntnet = 1
@@ -16,6 +17,7 @@
filedesc = "Alarm Monitoring"
nanomodule_path = /datum/nano_module/alarm_monitor/engineering
program_icon_state = "alarm_monitor"
extended_desc = "This program provides visual interface for station's alarm system."
keyboard_icon_state = "keyboard4"
requires_ntnet = 1
network_destination = "alarm monitoring network"
@@ -26,6 +28,7 @@
filedesc = "Atmosphere Control"
nanomodule_path = /datum/nano_module/atmos_control
program_icon_state = "atmos_control"
extended_desc = "This program allows remote control of air alarms around the station"
keyboard_icon_state = "keyboard4"
required_access = access_atmospherics
requires_ntnet = 1
@@ -39,6 +42,7 @@
filedesc = "RCON Remote Control"
nanomodule_path = /datum/nano_module/rcon
program_icon_state = "generic"
extended_desc = "This program allows remote control of power distribution systems around the station."
keyboard_icon_state = "keyboard1"
required_access = access_engine
requires_ntnet = 1
@@ -3,6 +3,7 @@
filedesc = "Suit Sensors Monitoring"
nanomodule_path = /datum/nano_module/crew_monitor
program_icon_state = "crew"
extended_desc = "This program connects to life signs monitoring system to provide basic information on crew health."
keyboard_icon_state = "keyboard7"
required_access = access_medical
requires_ntnet = 1
@@ -2,6 +2,7 @@
filename = "ntn_dos"
filedesc = "DoS Traffic Generator"
program_icon_state = "hostile"
extended_desc = "This advanced script can perform denial of service attacks against NTNet quantum relays. The system administrator will probably notice this. Multiple devices can run this program together against same relay for increased effect"
size = 20
requires_ntnet = 1
available_on_ntnet = 0
@@ -0,0 +1,78 @@
/datum/computer_file/program/revelation
filename = "revelation"
filedesc = "Revelation"
program_icon_state = "hostile"
extended_desc = "This virus can destroy hard drive of system it is executed on. It may be obfuscated to look like another non-malicious program. Once armed, it will destroy the system upon next execution."
size = 13
requires_ntnet = 0
available_on_ntnet = 0
available_on_syndinet = 1
nanomodule_path = /datum/nano_module/revelation/
var/armed = 0
/datum/computer_file/program/revelation/run_program(var/mob/living/user)
. = ..(user)
if(armed)
activate()
/datum/computer_file/program/revelation/proc/activate()
if(computer)
computer.visible_message("<span class='notice'>\The [computer]'s screen brightly flashes and loud electrical buzzing is heard.</span>")
computer.enabled = 0
computer.update_icon()
qdel(computer.hard_drive)
if(computer.battery_module && prob(25))
qdel(computer.battery_module)
computer.visible_message("<span class='notice'>\The [computer]'s battery explodes in rain of sparks.</span>")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(10, 1, computer.loc)
s.start()
if(istype(computer, /obj/item/modular_computer/processor))
var/obj/item/modular_computer/processor/P = computer
if(P.machinery_computer.tesla_link && prob(50))
qdel(P.machinery_computer.tesla_link)
computer.visible_message("<span class='notice'>\The [computer]'s tesla link explodes in rain of sparks.</span>")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(10, 1, computer.loc)
s.start()
/datum/computer_file/program/revelation/Topic(href, href_list)
if(..())
return 1
else if(href_list["PRG_arm"])
armed = !armed
else if(href_list["PRG_activate"])
activate()
else if(href_list["PRG_obfuscate"])
var/mob/living/user = usr
var/newname = sanitize(input(user, "Enter new program name: "))
if(!newname)
return
filedesc = newname
/datum/computer_file/program/revelation/clone()
var/datum/computer_file/program/revelation/temp = ..()
temp.armed = armed
return temp
/datum/nano_module/revelation
name = "Revelation Virus"
/datum/nano_module/revelation/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
var/list/data = list()
var/datum/computer_file/program/revelation/PRG = program
if(!istype(PRG))
return
data = PRG.get_header_data()
data["armed"] = PRG.armed
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "revelation.tmpl", "Revelation Virus", 400, 250, state = state)
ui.auto_update_layout = 1
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
@@ -5,6 +5,7 @@
/datum/computer_file/program/computerconfig
filename = "compconfig"
filedesc = "Computer Configuration Tool"
extended_desc = "This program allows configuration of computer's hardware"
program_icon_state = "generic"
unsendable = 1
undeletable = 1
@@ -1,6 +1,7 @@
/datum/computer_file/program/filemanager
filename = "filemanager"
filedesc = "NTOS File Manager"
extended_desc = "This program allows management of files."
program_icon_state = "generic"
size = 10
requires_ntnet = 0
@@ -2,6 +2,7 @@
filename = "ntndownloader"
filedesc = "NTNet Software Download Tool"
program_icon_state = "generic"
extended_desc = "This program allows downloads of software from official NT repositories"
unsendable = 1
undeletable = 1
size = 3
@@ -133,7 +134,8 @@
all_entries.Add(list(list(
"filename" = P.filename,
"filedesc" = P.filedesc,
"size" = P.size,
"fileinfo" = P.extended_desc,
"size" = P.size
)))
data["hackedavailable"] = 0
if(prog.computer_emagged) // If we are running on emagged computer we have access to some "bonus" software
@@ -143,6 +145,7 @@
hacked_programs.Add(list(list(
"filename" = P.filename,
"filedesc" = P.filedesc,
"fileinfo" = P.extended_desc,
"size" = P.size
)))
data["hacked_programs"] = hacked_programs
@@ -2,6 +2,7 @@
filename = "ntmonitor"
filedesc = "NTNet Diagnostics and Monitoring"
program_icon_state = "generic"
extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes"
size = 7
requires_ntnet = 1
required_access = access_network
@@ -2,6 +2,7 @@
filename = "ntnrc_client"
filedesc = "NTNet Relay Chat Client"
program_icon_state = "generic"
extended_desc = "This program allows communication over NTNRC network"
size = 10
requires_ntnet = 1
requires_ntnet_feature = NTNET_COMMUNICATION
@@ -3,6 +3,7 @@ var/global/nttransfer_uid = 0
/datum/computer_file/program/nttransfer
filename = "nttransfer"
filedesc = "NTNet P2P Transfer Client"
extended_desc = "This program allows for simple file transfer via direct peer to peer connection."
program_icon_state = "generic"
size = 5
requires_ntnet = 1