- 0xduraki

Modding Uplink by Introversion

Are you a modder? Do you want to learn how to make game modes and game hacks? You are at the right place. We will take Uplink as an example and explore various things, based on recollection of the source code. The source codes is visible at this link.

Interesting URLs from Introversion (Publisher/Developer):

  • https://devwiki.introversion.co.uk
  • https://devwiki.introversion.co.uk/uplink/index.php (Requires Login)1

Game Configuration Data

  • Windows: <path-to-game>\users\options\
  • Linux: $HOME/.uplink/
  • MacOS: $HOME/Library/Application Support/Uplink/options

Game Save Data

  • Windows: <path-to-game>\users\
  • Linux: $HOME/.uplink/
  • MacOS: $HOME/Library/Application Support/Uplink/

Releases by Date (by platform)

  • 2001 (Windows)
  • 2003 (Linux)
  • 2003 (Macintosh)
  • 2012 (iPad)
  • 2012 (Android)

For MacOS

On MacOS, specifically when using 2K resolution or above, either via Retina or external display; the font size of Uplink interface becomes to small to read. You can change this behaviour by patching address:

00000001000cdd28          mov        ecx, 0xa                                    ; argument #4 for method sub_1000a2da0

What this does is replace the default Uplink UI font size from 9 to 10, making it appear larger on the screen and more easier to read. Looking at the source code, the following item is present:

// taken from: uplink/src/uplink.cpp
void Init_Fonts	()
{
	...
		success =
		  (GciLoadTrueTypeFont ( HELVETICA_10, "Dungeon", dungeonFontFilename, 9  ) &
		   GciLoadTrueTypeFont ( HELVETICA_12, "Dungeon", dungeonFontFilename, 11 ) &
		   GciLoadTrueTypeFont ( HELVETICA_18, "Dungeon", dungeonFontFilename, 16 ));

The above fixes the first call of GciLoadTrueTypeFont() function, and changing the default mov ecx, 0x9 to mov ecx, 0xa (10). Produce a new binary and run it from MacOS application directory. Voi-la! 🎉

References: uplink/src/uplink.cpp

For Linux

Upon browsing the web I stumbled upon a blog post by Ubuntu Adventures, which provided alternative soultion on fixing the game resolution in the game by changing the launch option arguments using launcher script and a bit of Bash. His solution involved modifying the launch options to include the !graphics_screenwidth and graphics_screenheight arguments which can be set to any desired resolution.

His solution works on Linux Steam-version of the Uplink game. Note that you need to change the cd path to match your Steam/Uplink installation directory and adjust the resolution values as needed - simply replace 1920 and 1080 with your desired resolution.

First, create an empty uplink.sh anywhere you like and make it executable (for example, in your home directory):

$ touch $HOME/uplink.sh
$ chmod +x $HOME/uplink.sh

Now edit the uplink.sh file to include the desired resolution as per original blog post:

$ vim $(HOME)/uplink.sh

# uplink.sh (for 1920x1080 resolution under Linux)
cd /opt/Steam/SteamApps/common/Uplink
./uplink.bin.x86_64 '!graphics_screenwidth' 1920 '!graphics_screenheight' 1080

Definitions

Some interesting definitions have been identified.

Game World and Mapped Data

Taken from: `https://github.com/vb6mmorpg/uplink-source-code/blob/master/uplink/src/game/data/data.h`

#define		WORLD_START_DATE				0, 0, 0, 24, 2, 2010
#define		GAME_START_DATE					0, 0, 0, 24, 3, 2010	// ;)
#define		PLAYER_START_BALANCE			3000
#define		PLAYER_START_GATEWAYNAME		"Gateway ALPHA       "
#define		PLAYER_START_CPUTYPE			"CPU ( 60 Ghz )"
#define		PLAYER_START_MODEMSPEED			1
#define		PLAYER_START_MEMORYSIZE			24

// also see
#define		IP_LOCALHOST						"127.0.0.1"


// also see
#define		TICKSREQUIRED_*
#define		TRACESPEED_*
#define		HACKDIFFICULTY_*
#define		PROB_MISSION_*
#define		PAYMENT_*
#define 	MINDIFFICULTY_*
#define 	TIME_*
#define 	MINDIFFICULTY_*
#define 	MINDIFFICULTY_*
#define 	MINDIFFICULTY_*

Global App Defines

Taken from: `https://github.com/vb6mmorpg/uplink-source-code/blob/master/uplink/src/app/globals_defines.h`

#define		ALPHA				0.85f							// Alpha value used for interface
#define		ALPHA_DISABLED		0.5								// Alpha value for disabled buttons
//#define	CHEATMODES_ENABLED									// Eg all-links, all-software, password-bypass etc

Game Data, Titles, World Map Gateways, SW/HW Upgrades

Taken from: `https://github.com/vb6mmorpg/uplink-source-code/blob/master/uplink/src/game/data/data.cpp`

UPLINKRATING []
NEUROMANCERRATING []
PHYSICALGATEWAYLOCATIONS []
SOFTWARE_UPGRADES []

Other Moddings

List of other modding ideas I may implement in the future. This section contains other modding details or additions that could be implemented in the future. These includes: adding new local gateway locations (ie. when registering agent) that represents Uplink Corporation office(s),

Adding a new local gateway location (ie. Uplink Corporation office)

Cheats and Easter Eggs

Cheat Mode

To open up the cheat mode menu, do the following:

  1. Make a player with username TooManySecrets and any password
  2. While playing, press F1 in-game after logging-in and press F1 to open the cheat mode menu
  3. This cheat has been removed as of Uplink v1.2 and is no longer available (ie. in Steam version)

See also: [theunderground]’s Uplink cheat page archived here

Accessing Protovision Game Server

To access the Protovision Game Server which is not possible using the Password Breaker available in the game, use the password joshua and you will be able to log in. This server is actually a reference to the 80’s movie Wargames. When you enter the server, there is a menu with 2x options, the Wargames and Hints. Entering the “Wargames” section will give you a list of games. By clicking on the bottom one (Global Thermonuclear War), you get taken to a World Map with several major cities on it. Clicking on each city will send a red line representing a missile flying towards the city, followed by an explosion. The close button for this screen is underneath the Trace Tracker, and you should have it running while playing. By clicking on the “Hint” menu, you are given a very cryptic message about the Introversion IP, though this doesn’t actually have anything to do with it.

Destroy a Computer/Server

When accessing any Internal machine click on the “Admin” button, then click on the “Console” and type the following commands:

> cd usr
> delete
> cd log
> delete
> cd sys
> delete
> shutdown

Multiple Monitors

The early version of the Uplink game had the ability to use multiple monitors but this feature was removed in later versions due to unstability issues. The multiple monitor feature required two separate game purchases (ie. 2 disks) and a separate license. The option was complex to setup but in essence, gamers were instructed to start the game Uplink on main computer, and go to Network options, then click the “Start Server” button and then load the game using agent account credentials.

On another computer users were required to connect to the network, then enter the Network options and click the “Connect to Server” button. Next, exit the options screen and on the main Title screen, there should be two buttons visible in the top left corner, one showing COMMS and the other showing STATUS. Select whichever one you want the monitor to display and it shuould load the relevant details on the screen.

LAN

The LAN systems were added in later versions of the Uplink game from version 1.2 onwards. In Uplink, a LAN is much of the same as the real LAN - a local area network that interconnects computers in a limited area such as a school, building or office. LAN hacking will require a fast, high-bandwidth gateway to safely navigate the LAN. For optimum performance, about 600Ghz in processing power and 6Gqs of bandwidth will do you fine. Suggestions for a gateway would be a ZION or TRINITY for all round performance. If you need more power in one area though, check out the OMEGA (more Power, less Memory) or the AM-CORE (less Power, more Memory) gateway.

Take a look at Minoriko’s Guide to LAN on Steam community guides. More on LAN can be also found on Modlink’s Uplink LAN guide.

There are no jobs left on the mission board, what now?

If you click the fast forward button in-game (the blue one at the top with the 2x arrows on it), then eventually a new missions will appear in the mission board list.

Save Game

There is no save game feature in the game per se, but it gets saved automatically every few minutes. Unfortunately, if you get caught, it’s game over. There is a workaround to this, since the game state is saved to disk every - either in ~/.uplink (Linux) or other platform-specific locations (see top of this note), it’s possible to manually save the game state and load it back in later using Python or similar scripting solution. The script acts as a backup utility that saves the game state to disk periodically using cron, and can be used to restore the game state in case of a crash, or if you get caugh during gameplay.

The Python script makes a copy of the ~/.uplink directory in the ~/.uplink/backup/ folder every time it runs and it detects that the game is running by checking for the uplink process in the system. If the game is running, the copied backup savedata is annotated with the current timestamp in the filename, so you can easily identify which backup corresponds to which game save. If you get caught, you can simply load the most recent backup to continue playing from where you left off.

#!/usr/bin/env python

import os
import shutil
from datetime import datetime

UPLINK_DIR = "{home}/.uplink".format(home=os.path.expanduser('~'))

def get_timestamp_from_year_to_second():
    """A compact timestamp."""
    now = datetime.now()
    date = datetime.date(now)
    time = datetime.time(now)
    template = "{year}_{month:02}_{day:02}_{hour:02}{minute:02}{second:02}"
    return template.format(year=date.year, month=date.month, day=date.day,
                           hour=time.hour, minute=time.minute, second=time.second)

def main():
    shutil.mkdir("{home}/.uplink/backup".format(home=os.path.expanduser('~')))
    dest = "{home}/.uplink/backup/uplink_{timestamp}".format(home=os.path.expanduser('~'))
    dest.format(timestamp=get_timestamp_from_year_to_second())
    shutil.copytree(UPLINK_DIR, dest)

#############################################################################

if __name__ == "__main__":
    main()

Hacking Save Game

The archived version on downlink’s old website provides a guide on how to hack the save game of Uplink. You will need to use a hex editor and a custom tool from Uplink’s DevCD (redshirt) to modify the save game file.

Resources

Miscellaneous

Mods from other sources

Downloads

Uplink Soundtrack

Tracks:

00:00  Skaven - Deep in her Eyes
03:11  Timelord - Mystique Part I <timelord@nol.net>
06:50  Timelord - Mystique Part II <http://www.phoenix.net/~dspyre/timelord.html>
14:18  Ryan Cramer - Digital Serenity <rcramer@di.net>
17:59  Dual Crew - Symphonic
22:11  Karsten Koch - The Blue Valley

Unused tracks:

34:14  Hector - Clouds Of Fire <hector@edna.cc.swin.edu.au>
37:13  Timelord - Mystique Part III <timelord@nol.net>
40:39  Dustbin - Pink Noise <www.cbr.avnet.it>

Whole soundtrack is available on YouTube. This video also includes some music which is not used in the game, but was included with the bonus CD.

Bonus CD & Dev CD

Introversion offered two extras for fans - a “Bonus CD” and a “Dev CD”. The Bonus CD file can be downloaded from archived Introversion’s website.

  • The Bonus CD contained pictures, wallpapers, beta versions, articles, and other “behind the scenes” materials from the making of the game.
  • The Dev CD contained the complete source code and tools needed for modders to alter the game, and could be purchased from Introversion’s web store for 30 GBP.

The Bonus CD was originally offered to people who convinced a friend to purchase Uplink. After the turnover was less than expected, the Bonus CD was made available for purchase in June 2002 for US$ 7.00 off Introversion’s site. The initial run of discs eventually ran out, and the CD was later made available for free download.

Introversion also released a “Game Bible” in four hidden parts called “books”. These covered the development of Uplink from conception up to the release of the “Project Nakatomi” patch of the game. The books were hidden on the Bonus CD, website, and as the final reward for solving the “treasure hunt” on Introversion’s site leading up to the release of the Nakatomi patch.

All four books were hidden or encrypted, with clues located on Introversion’s website, or within the game packaging itself (such as the hex string on the back cover). Decrypting the books required some minor “hacking” skills, such as using “one time pad” decryption programs, or “redshirt” programs to extract .dat files hidden inside other files. Personally decrypting the four books was considered a point of pride within the Uplink community, so hints requested on the community forums were intentionally kept obtuse.

See the Modlink’s Bonus Disk website for more interesting information.

 

Developer Forums

💬
There is a members-only topic in the Uplink Forums called Development. This topic was intended for Introversion developers and owners of the Developer CD only.

Compiling Uplink Codebase

This guide is intended to get you up and running with the Uplink Dev CD as quickly as possible. We will be assuming you have some knowledge at least of compilers, C++ etc.

  1. Install Uplink Fairly self explanatory really, but you’d be suprised. You won’t be able to run any of the binaries you compile unless you have Uplink installed and ready.

  2. Copy data to Hard Disk You need to copy all the neccesary directories onto your hard disk. The directories you will need are:

/contrib (all external libraries used by Uplink)
/lib (all our own internal libraries used by Uplink)
/source (the main source tree)

Copy those three directories into your Uplink directory on your Hard Disk.

  1. Chose compiler
  • If you are compiling Uplink with MS Developer Studio, click here
  • If you are compiling Uplink under Linux, click here

Original information provided by the Uplink Developers Guide, see archived version for more details. In case of any compiling issues, reference to compilation problems guide available here as online archive.

Quick getting started Uplink source-code tour is available via online archive. Directory listing of the developers CD contains contrib ref, docs, lib ref, other, source, and tools ref as described in the archived here.

Other Easter Eggs


Trivia

Uplink trivia and in-game errata. The information provided here is intended to be a quick reference for players who are already familiar with the game.

 

Important Errata

⚠️
This section contains trivia about the game alongside other topics regarding the game which might spoil the experience.

The Uplink game extras I found around the web. Each trivia entry is contained within a details block, clicking the title will expand the block and reveal the trivia.

IP Addresses Being set in a then-future 2010, the game correctly assumed that the IPv4 protocol would run out of addresses, although this would happen in November 2019 in the real world. However, the game tries to resolve that by simply giving each number a range higher than the usual 255, while in the real world a completely different system is used for the IPv6 protocol.
Project Nakatomi

In 2002, Introversion released the “Project Nakatomi” patch (v1.21) that included such additions as LAN hacking and a functional in-game IRC chat interface. Project Nakatomi was so named as it was aimed at the “die hard” fans of Uplink: Hacker Elite (Nakatomi Plaza is the skyscraper setting of the film Die Hard).

In keeping with the hacking theme, Introversion created an alternate-reality “treasure hunt” leading up to the release, teasing what Project Nakatomi would be. They underestimated the dedication of their fans however, and through efforts of formed groups such as the “Project Nakatomi Task Force,” fans cracked the first layers of the “treasure hunt” before it was ready! The trail hit an apologetic dead-end message at a secure section of Introversion’s site, and the rest of the hunt had to be added later.

Storyline Mission

First, do classic missions first because you need heavy software. Fast forward until you see a news that uplink top agent is dead from apparent suicide. After a few days, you will receive an email. It says to stand up against ARC. Poke ARC central database for a long time and an email will come. Reply to the message from ARC. The message subject is named “An offer you can’t refuse”.

You will receive a mission and a email with Revelation attached. Arunmor’s email will arrive shortly (you must fast forward time, or play other missions). Now choose your side.

Hacking a bank for money

A get-rich-quickly scheme and approach involves stealing money from a bank using a variety of methods. One of the methods is stealing from the notable bank users by hacking the banks’ admin account. The steps to do this are:

  1. Pick a random bank.
  2. Bounce through InterNIC and all public access servers.
  3. Hack the bank’s admin account.
  4. Write down all account numbers.
  5. Clear bank and InterNIC logs.
  6. Log into bank with each account, checking for high-value transfers.
  7. Siphon money from those valuable accounts.

Always clear logs on both ends, and always use monitor (trace tracker) and proxy bypass tools to cover your tracks. Also, you should create an account with the bank you are about to steal from. This lets you transfer the money there, so that you only have to clear the logs at one bank, making the stealing process easy.

Note: Since you are hacking a bank - their security systems are designed to detect and prevent such activity quite fast, you need to make sure you are bouncing through all public access servers from InterNIC to avoid detection; @see this.

Uplink IRC

There is an Uplink IRC channel at this address. You will see us on there occasionally, so drop in and have a chat.

server: irc.uplinkcorp.net
port: 6667
channel: #uplink or #uplinkcorp

See archived webpage of Uplink’s IRC FAQ for more information.

Secret Service File Server

Cool thing you can do is hack into the Secret Service File Server. You can find the systems IP by hacking the Global Criminal Database and looking under the links. The password is always vu8fks903dhd42e. There are 4 files on the server, named:

  • Area 51 Structural Plans
  • J.F Kennedy Mission
  • Iraq Intelligence
  • ARC Mole Mission Log

The really strange thing is that this game was written before the war in Iraq happened.