Files
Bubberstation/code/modules/modular_computers/documentation.md
John Willard 6bb2175fa5 [BOUNTY] Re-adds Contractors (#79737)
## About The Pull Request

Adds Contractors back to the game as a kit that Infiltrators (Only
midround/latejoin Traitors, not roundstart) can buy. Buying this will
give you access to the new Contractor items in the uplink (which
replaces the Contractor shop).
I've also refactored things about contractor and how it's handled, such
as removed its sleep calls, swapping its UI to tsx, making it actually
functional within more modern TG code and the reworked Traitors as a
whole, among other things.

I also fixed the contractor guide paper (the text was broken) and made
contractor kit boxes no longer empty.

Contractor items only appear once the contractor kit is purchased, but
they can't be bought until you make an account.

Video demonstration

https://github.com/tgstation/tgstation/assets/53777086/c6aed4e8-bbd4-4ba0-b6a2-9f58fd308d09

Regular Traitors can't access it

![image](https://github.com/tgstation/tgstation/assets/53777086/539b8121-a1fa-4f2d-8e69-ec3d9708152c)

The Contractor UI (Modified to not have a shop anymore) - Ignore the
Invalid Targets, those appear when there's no possible targets

![image](https://github.com/tgstation/tgstation/assets/53777086/e128aecc-0795-4a6b-b8c5-e6f431401330)

Roundend report

![image](https://github.com/tgstation/tgstation/assets/53777086/71b88262-61de-4652-862b-79a7d5ded979)

## Why It's Good For The Game

Contractor was a fun way of playing Traitor that isn't relying on RNG
objectives to pop up, this is instead constant stream of content for the
contractor that encourages non-lethal play, and is now a viable
alternative now that Infiltrators don't have Reputation anymore.

Link to bounty: https://tgstation13.org/phpBB/viewtopic.php?f=5&t=35160

Relevant image from bounty

![image](https://github.com/tgstation/tgstation/assets/53777086/b26a17b0-2f10-4e53-b8fc-25cf8130584e)

## Changelog

🆑
add: Infiltrators (Latejoin/Midround traitors) can now buy and use
Contract kits again.
del: Contractor baton can now only be purchased once.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-18 18:38:37 +00:00

2.0 KiB

Modular computer programs

How module computer programs work

Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to.

Base setup

This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base

/datum/computer_file/program/ntnetmonitor
	/// This is obviously the name of the file itself. not much to be said
	filename = "ntmonitor"

	/// This is sort of the official name. it's what shows up on the main menu
	filedesc = "NTNet Diagnostics and Monitoring"

	/// This is what the screen will look like when the program is active
	program_icon_state = "comm_monitor"

	/// This is a sort of a description, visible when looking on the ntnet
	extended_desc = "This program is a dummy."

	/// size of the program. Big programs need more hard drive space. Don't
	/// make it too big though.
	size = 12

	/// If this is set, the program will not run without an ntnet connection,
	/// and will close if the connection is lost. Mainly for primarily online
	/// programs.
	requires_ntnet = 1

	/// This is access required to run the program itself.
	run_access = access_network

	/// This is the access needed to download from ntnet or host on the ptp
	/// program. This is what you want to use most of the time.
	download_access = access_change_ids

	/// If it's available to download on ntnet. pretty self explanatory.
	available_on_ntnet = 1

	/// ditto but on emagged syndie net. Use this for antag programs
	available_on_syndinet = 0

	/// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_PDA combination)
	/// or PROGRAM_ALL. Use this to limit what kind of machines can run the
	/// program. For example, comms program should be limited to consoles and laptops.
	usage_flags = PROGRAM_ALL

	/// This one is kinda cool. If you have the program minimized, this will
	/// show up in the header of the computer screen. You can even have the
	/// program change what the header is based on the situation! See `alarm.dm`
	/// for an example.
	var/ui_header = "downloader_finished.gif"