The anatomy of a program
A program consists of four parts: it has an icon, an interface, any number of various functions and a fingerprint. When a program is run it executes its functions one after the other. A program normally executes one function each turn while it is run.
When a new program is created its Functions are determined: their number determines the base difficulty level of writing the program. In addition to Functions a program also consists of Interface Elements intended to make the program easier to use and more likely to play nice with other programs and Graphical Elements intended to give the program’s icon more Oomph!. The number of Functions, Interface Elements and Graphical Elements is added together: this is how much processing power is needed to run the program.
If the programming roll is successful the ”left over” success is compared to the Interface Rating table. The number of Interface Elements in the program is added to the bonus from the table to determine the Interface Bonus of the program.
Finally an icon is created for the program with a VR Graphics roll. The Graphics Quality table is consulted, to which the Graphical Elements of the program are added to get the final Graphics Quality of the program. Most people have difficulty seeing the improvement in Graphics Quality beyond +5, so this is the maximum commonly applicable bonus. A real connoisseur of virtual graphics can still tell the difference though, and a higher bonus can apply amongst such strange individuals.
|Number of Functions||TD||Extra success||Interface Bonus||VR Graphics roll||Graphics Quality|
|8||17||28||+7||No additional bonus beyond 30+|
The program also has a unique fingerprint based on all of the above. This can be used to ban the particular piece of software from being run on a system as part of a firewall. Altering the fingerprint of an existing program is not terribly difficult, although it is fairly time consuming. Many netrunners view it as tiresome drudge-work.
The base difficulty of this INT+Programming roll is TD 15 and the task takes approximately 1 hour per program. A runner can attempt to alter the fingerprints in approximately 30 minutes per program, but the TD increases to 20. Very competent runners can attempt to alter the fingerprints in approximately 15 minutes per program, but the TD increases to 25.
So what do Functions do then? Pretty much anything you could conceivably make a program do. Some operations are too simple to be considered full functions and are called minor functions.
Minor functions represent bits of code, or simple functions of the operating system, which are too insignificant to count as full functions. These minor functions are often vital for a program’s successful operation. Minor functions do not take time to execute: each turn a program keeps executing minor functions until it encounters a function. Players and GM:s are encouraged to come up with their own minor functions using the following list as a guideline.
|Minor Function||What does it do?|
|Edit data||Edit, delete, cut, copy, paste, etc. data. This minor function is sufficient as long as only a small amount of data is involved.|
|Jump||Instead of executing the next command the program jumps to the indicated command. The most obvious use of this is to write a program which loops over and over for ever.|
|If||This minor function makes the program do one thing if a condition is true and another if the condition is untrue. This minor function is unable to act based on anything outside the program itself. The most common uses are to exit a loop once it has served its purpose, for example stopping a trace once the location is exact, or to provide a program with some flexibility based on what has happened.|
|Hold||When a program executes this minor function it remains running, but stops automatically executing functions and minor functions. The main purpose of this is to keep an expert system, such as a firewall, active while it waits for the trigger condition to be fulfilled. A netrunner can kick a program out of a Hold as an action.|
|No Operation||This minor function does nothing, but counts as a major function for execution.|
Full functions represent a significant amount of code. Each program being run normally executes one function each turn. If a function can not be executed, for example because it lacks a target, it is skipped until the program ends or finds a function it can execute. Players and GM:s are encouraged to come up with their own functions using the following list as a guideline.
|Function||What does it do?|
|Gain Access||When this function is executed a door permits entry, even though valid credentials were not supplied to it. The bread and butter of an attack program.|
|Stop (Function)||When this function is executed the execution of its target function is cancelled. Stop can be piled on top of stop for a (theoretically) endless tug of war. The target program must be interacted with in order for its function to be stopped. See Interactions for more.|
|Ban Software||When this function is executed the digital fingerprint of every program the target used during the run is banned, keeping them from being used on the system. Until their fingerprints are altered, that is. A firewall classic.|
|Ban Hardware||When this function is executed the digital fingerprint fingerprint of the target system is banned, so that all contact with it is refused. Like the software ban, this can be circumvented by altering the system’s fingerprint. Another firewall classic.|
|Trace Origin||This function attempts to trace the physical origins of the connection. Every turn this function is executed it rolls Interface and reduces the trace length by 1 for each 5 points rolled. So 5-9 = -1 trace length, 10-14 = -2 trace length, 15-19 = -3 trace length, etc.|
|Expert System||This function lets the program react to its surroundings and to adapt its behavior. Each function dedicated to Expert System improves the program’s Expert System Level by one. These functions are never executed but are skipped: they merely indicate the complexity of the program’s internal logic. See Expert Systems for more.|
|Manipulate Data||When this function is executed a great deal of data is manipulated and/or analyzed. For example an entire database is copied, or searched through for a particular entry which is then altered. Actions which do not involve a great deal of data can be achieved with the minor function Edit data.|
|Destroy Software||A variation of Manipulate Data, which when executed deletes and corrupts all software on a system accessible to the program. If this included the operating system the system crashes and can not be used again until it is completely reformatted and the programs reinstalled.|
|Get Logs||A variant of Manipulate Data, which when executed checks the system’s logs to connect actions to users. If an action is known this function can reveal a user. If a user is known this function can reveal everything they have done. Can not be run without access to Operating System interface. Can be opposed by Obfuscate.|
|Detect||A variant of Manipulate Data, which when executed reveals how many users are currently in a room and what they are doing right now. If there is a large number of users in the room a further analysis function might be needed to find any useful information about what is happening. Can be opposed by Hide.|
|Obfuscate||A variant of Manipulate Data, which when executed attempts to hide the evidence of some action having been performed. The target action must first be executed, then when Obfuscate is executed roll Interface. The highest difficulty level which would have been successful is the TD for any attempt to detect that which has been obfuscated.|
|Hide||A variant of Manipulate Data, which when executed attempts to hide the presence of a user in a particular room. When Hide is executed roll Interface. The highest difficulty level which would have been successful is the TD for any attempt to detect that which has been hidden.|
|Operate Machinery||When this function is executed toasters toast, traffic lights light and industrial systems industry. This is the function which embedded systems spend most of their time running. A variant must be written for each type of automated operation. Complicated operation might require more than one instance of this function, see Expert Systems for a guideline, although manual remote control can always be achieved with just one instance.|
|Destroy Hardware||A variation of Operate Machinery, which when executed causes the target hardware to do something which damages it. For example a computer might be forced to shut down its cooling fans and then to calculate the exact value of Pi. A variant must be written for each type of target, because different machines require different instructions to destroy themselves.|
|Emulate||A variation of Expert System, this function emulates another computer system. Each instance of this function provides 1/4 of a processing power unit.|
Writing a Killer App
(TEXT ABOUT WRITING GOOD PROGRAMS GOES HERE)