(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 01:23:55 +01:00
parent c93a3c755e
commit 1edc286cc3
15 changed files with 133 additions and 37 deletions
@@ -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