Introduction

Thank you for your interest in Project TI-Trek, the first massively-multiplayer online game for the Texas Instruments TI-84+ CE graphing calculator. This project has been a long time coming, and seen a lot of ups and downs, pauses and restarts, start overs, and many painstaking hours of figuring out what I did so wrong that my calculator achieved nuclear fusion while attempting to test it. I owe a debt of gratitude to fellow members of the calculator programming community, particularly Cemetech, whose encouragement and assistance has made this project possible. In particular, I owe an even larger debt of gratitude to a smaller subset of the community who have been actively involved in the development of this project, who will be named later in this document. And last but not least, I would like to acknowledge the inspiration from the genre of space-based sci-fi including Star Trek, Star Wars, Orville, Stargate, and others; My love of this genre was a major factor driving this project.

This project is one of, if not the first of its kind. It is an MMO, in which you can create and customize a virtual spaceship styled after the ones in Star Trek and its spinoffs. The game is set within a randomly generated map, with bodies that move through the sky, stars that experience their life cycle, and more. Not only is the map custom and fluid (although based on a set of pre-computed paths), but we also implement some aspects of real-world physics. Distances mirror those in real space, gravity is accurate, the sizes of objects are accurate. Gravity will affect all non-static entities, and of course stars and black holes and other celestial objects will pose a threat to players in the game, as well as other players.

Getting Started

Dependencies

This project is facilitated by a complex network of handshakes between various hardware and software components that simulate a network connection from your calculator. If everything is working smoothly, it is a beautiful thing. If things don't work (as they often do not given that the networking is a temporary, experimental stand-in for a more stable IP-stack library on the calculator), then I quickly find myself searching for the nearest window to pitch myself out of.

The functioning of the project's networking is simple-complex, a similar euphemism to the term "fresh-frozen" coined by some of the people Gordon Ramsay helps on Kitchen Nightmares. The USB and Serial drivers on the user's calculator handshake with a "Bridge" program running on the user's computer. This Bridge is a two-way relay, converting serial packets to TCP packets and converting TCP packets to serial packets. TCP is, of course, one of the two main Internet transfer protocols, meaning that the network, much like the Death Star, is now fully-armed and operational.

Below you find a list of the dependencies of this project, complete with a minimum required version and an indication of which platform they run on.

DependencyVersionTarget
TITREK.8xp>=0.0.104calc
clibs.8xgunknowncalc
hashlib.8xv>=9.0calc
python>=3.0pc
pyserial python library>=3.5pc
titrek serial bridge>=1.1pc

Download links for many of these software components can be found on the Downloads page.

For the record, and those wondering... yes, the term "PC" covers all users of personal computers regardless of the operating system those computers are using. PC does not mean "just Windows". That's right Windows users, you don't own that word.

Calculator Configuration

1. Register on the Web Deck: While this step does not occur on the calculator, it is an important first step to being able to use the game. Without doing this, you will not be able to log in to any account on the server, and therefore unable to play the game or do anything else from your calculator. If you already have an account, you can skip to Step 2. To create an account on the Web Deck, head over to Play @ TI-Trek. You will see the Login and Register interface in the titlebar of the page. Make sure the selector on the left is set to "Register", then input your desired account name and password. If all goes well, another window will pop up in the middle of the screen with the ability to input an email address, to alter your desired password, and to complete a challenge to authenticate you are not a bot. Completing those things should result in your account being created. Otherwise, you've done something wrong--look for an error message.

1. Download your Login Keyfile and Send it to your Calculator: Whenever you create an account or edit your password through the Web Deck, the interface creates a keyfile that can be used to grant one or more calculators access to your account. This keyfile is a 128-byte PBKDF2 token generated from your username, password, and a 32-byte salt. This keyfile can be downloaded from the "Info & UI" page of the Web Deck. From there, simply transfer the keyfile to your calculator using TI-Connect CE or TiLP2 or some other manner of connectivity software that can interact with your calculator. Once this is done, the next time you run the TI-Trek client on your calculator, the key will be imported into the game's save file and the keyfile will be deleted.

Connecting Calculator and PC

1. Plug in the Calculator: At present the game requires a serial link between your calculator and your PC with Internt access to work, although in the future an ECM and IP-stack library may make it possible to connect your calculator directly to a router. To create this link, you will need to acquire a USB-A to USB mini-B cable. This is a standard cable type. If you have misplaced the original cable that came with your device, you can get another one from pretty much any place that sells cables and adapters. They aren't expensive.

2. Transfer Calculator Software: The next step is to get the TI-Trek client on your calculator, as well as the other dependencies indicated. To do so, you will need to use TI-Connect CE or TiLP2 or some other manner of connectivity software that can interact with your calculator. From there, follow the instructions provided by that software for transferring the dependencies to the calculator.

3. Run the TI-Trek Client: Once that step is done, you will want to run the TI-Trek client from your calculator. It should pause on a white screen for a while (the USB hardware is initializing, as well as the hardware-based secure RNG in the cryptographic library) and then you should be on a black screen with a menu and a green USB icon. If this icon is anything other than green, something went wrong and you should poke the project Discord for assistance. If this icon is green, then you can proceed to the next step. If, however, you get an error about a missing library before even getting to the menu screen, you didn't install all the dependencies on the device correctly. Double check the list and see if you missed something.

4. Run TI-Trek Serial Bridge: The Serial Bridge polls all active serial connections to your computer, meaning that if the serial device is not initialized by the calculator yet, the computer will not detect it and the Bridge will not work. This is why running the Bridge occurs AFTER running the client. Run the bridge by typing python3 bridge.py from a Terminal from inside the folder the file is located. When you run the Bridge, if everything is working properly, you will see the following (or something similar) in Terminal/Command Prompt:

                    0 /dev/cu.Bluetooth-Incoming-Port - n/a
                    1 /dev/cu.usbmodem1300975FC51 - TI-84 Plus CE
                    2 device not listed
                    Select Device: |
You will want to input the number corresponding to the device you want to attach the Bridge to, or the number corresponding to "device not listed" to exit the Bridge and try again. Then press Enter to confirm your selection. You should see the following in your Terminal/Command Prompt window:
                    Running in debug mode.
                    0 /dev/cu.Bluetooth-Incoming-Port - n/a
                    1 /dev/cu.usbmodem1300975FC51 - TI-84 Plus CE
                    2 device not listed
                    Select Device: 1    # this will differ by what number you input
                    ^C to exit.
                    Serial listening.
If you see anything other than this, something went wrong and you should reach out for assistance via the project's Discord. If you do see this, then the Serial Bridge is connected to your device properly and you can proceed to the next section that elaborates on Gameplay. If you see a message about "pipes", then the Bridge is running in Pipe mode, which is even more experimental than serial. You'll have to open up the config.json file in the same folder as the Python script and edit the Mode entry to "serial".

Connecting from CEmu

As of now, support for CEmu is limited due to the fact that CEmu only has support for host-mode USB, not device mode, which the TI-Trek client uses. However, there is an obscure and not-publicized release of CEmu called the "pipe" branch, which, through the use of specialized code, writes data that would otherwise go to the serial interface to temporary pipe files. You can download that here. When the Bridge is switched into Pipe mode by setting the Mode option in config.json to "cemu" or "pipe", the Bridge reads those files for data to relay to the remote host, instead of the serial interface.

It is worth note that as the project continues to develop on the serial interface and possibly even the IP stack, testing on the CEmu pipe branch will cease and support for that feature will terminate, followed by the eventual removal of that feature.

Gameplay

Splash Screen

The first thing you will see whenever you run this program is the Splash Screen. This is your gateway to all the features of the program. You will see a screenshot of the splash screen to the right. The screen will consist of 2 main parts, a menu and some indicators. First, the indicators: At the very bottom of the screen you will see a USB indicator. This icon will be green to indicate that the serial interface is successfully set up and will be red to indicate that the serial device failed to initialize. Just above that, is the graphics error indicator, a text error that appears when the version of the graphics you have installed on your calculator is incompatible with the current program version. If you do not see this alert, you can rest assured your graphics are properly loaded.

Program Settings

Running the program for the first time will initialize a settings queue with default options for some of the key functions of the program. This will occur again whenever the settings save file is missing, or its size does not match that of the built settings queue. This also means that program updates that change the size of the queue will cause your settings to be reset. You can see the editable settings in the image to the left.

There are a few aspects of your gameplay experience that can be altered from the Settings page, accessed by hovering the selector bar over the Settings menu option and pressing Enter. In order, they are:

OptionValuesFunction
Debug Modebool true|falseDisplay packet data in chat widget.
Frame Refresh Rateint 0-255Number of ticks between frame refresh requests.
Packet Limitint 0-255Maximum number of packets to process per tick.
Network Timeout Limitint 0-16777216Number of ticks to wait without network activity before timing out.
Log Display Lengthint 0-16777216Number of ticks to leave chat log lines up for.

Server List

Selecting the Play Game option from the main menu brings up the server list, which allows you to choose from a selection of servers to connect to. Any valid form of server identification is acceptable here; hostname or IP address, as long as it is a valid URI. You may also choose to add an optional port number using the :port notation. For example play.titrek.us or play.titrek.us:51701 are both valid. The default server, play.titrek.us, is filled in to the first slot by default and cannot be edited or removed; However, the other nine (9) slots may be filled with whatever server hostname, IP, and port you choose. As indicated to the right of the interface, the Enter key selects a server, and the Del key Edits (or Deletes) an existing server (to remove, simply press Enter without entering text when prompted for the server name). To attach a keyfile to a specific server, press the Sto-> key. This will bring up a small box where you can scroll through any keyfiles found on the device (a keyfile is an application variable that starts with the identifier string "TrekKey"). Use the left and right arrows to scroll through them, Enter to bind the key, or Clear to go back without doing anything.

Keybindings
(Menus)
KEYACTION
move option selector up
move option selector down
Enterselect option
Clearexit menu
(Server List)
in addition to Menus (above)
KEYACTION
Enterconnected to selected server
Deledit selected server
Sto->attach keyfile to selected server
Keybindings
(General)
KEYACTION
Y=enable/disable sensors interface
Windowenable/disable tactical systems interface
Zoomenable/disable main systems interface
Traceenable/disable repair system interface
Graphenable/disable ship inventory interface
Varsenable/disable client debug mode
Clearexit secondary menu, disconnect from server
Prgmbring up message input
2ndfire armed weapon module
Logbring up engines max, speed config
steer ship down
steer ship left
steer ship up
steer ship right
Keybindings
(Main Systems Overview)
* Overwrites the normal keybind when on this screen
KEYACTION
Statshow module details
Clearhide module details
Modetoggle selected module online/offline
???this is a placeholder
* scroll up through modules
* scroll down through modules
Keybindings
(Tactical Systems Overview)
* Overwrites the normal keybind when on this screen
KEYACTION
Statshow module details
Clearhide module details
Modetoggle shield module/arm weapon module
* scroll up through modules
* scroll down through modules
Keybindings
(Speed Configuration)
* Overwrites the normal keybind when on this screen
KEYACTION
Storeconfirm change
* scroll up through engines
* scroll down through engines
* adjust speed slider left
* adjust speed slider right

Viewscreen & Ship Interior

This game is a highly complicated and feature-rich game, and as such the interface is quite hefty. That being said, it does have a few key elements that you can see when you look at it. The biggest area of the screen is the "Viewscreen". It is a black window-looking area of the screen where the majority of the visuals and information you will see in this game are shown. The second main part of the screen is the "Overview Tabs". This section of the screen provides five basic informational categories that can be used to view more information about your ship. From left to right: Sensors, Tactical, Mains, Repair, and Cargo. Also, with none of the menu options selected, you can see an unobstructed view of space in front of you.

Main Systems Overview

This data screen shows abridged information about the main systems on your ship--those systems that control the basic functions of your ship. This includes engines--orbital thrusters, sublight engines, and FTL engines--as well as life support, transportation, sensors and more. On this screen, you will see: (1) A small icon representing the type of module, (2) A health bar indicating the current health of the module [this health bar will change color to indicate health danger zones], (3) And the overall background color of the module will change to indicate if the module is online or offline [green indicating online, red indicating offline].

Tactical Systems Overview

This data screen shows abridged information about the tactical (combat) systems on your ship. Much like the main system interface, these module backgrounds will change color to indicate online/offline state. Typically, only one weapon module can be "online" at a time, although that status will be referred to as "armed". Off to the left part of the screen, you will see some information about your overall ship status: (1) Two icons, showing the current design of your ship as seen from the side and top, with circles around them indicating shield integrity. (2) Under that you will see the current hull integrity, represented as a gray bar. (2) Underneath that, you will see a blue bar indicating overall shield stability (which is a cumulative health among all your active shield modules) if you have one or more shields installed. If you are in battle, you will likely want to spend a lot of time on this screen to monitor the status of your defensive and offensive systems.

Speed Configuration

This data screen presents information about all of the propulsion systems on your ship. These systems are: Thrusters, Sub-light Engines, and Warp/FTL Drives, respectively. The information you are given is: current speed, maximum speed, and maximum acceleration possible. From here, you can toggle between the three drives using the Up and Down Arrow keys and use the Left and Right ones to move the sliders to adjust the speed of the specific engine. Bear in mind that what you see is purely visual until you "engage" your alterations by pressing the Store key. Doing so will disable all the other engines, enable the selected one, and set the new speed if possible. If something prevents that, a speed of 0 will be returned for the selected engine (which will effect no change).

Custom Graphics Packs

Making Your Own Graphics Pack

Project TI-Trek gives end users the ability to alter the style of the interface they see when using the game. To do this, simply replace the appvar TrekGFX with one of your own, built using your own sprites. While this is for the most part an uninvolved process, it is important to keep the order of the sprites and their encodings entact. To assist with this, I have enclosed a template YAML, with the correct settings encoding options specified. The sprite list is commented out, with each commented line indicating which sprite goes where. Do not go out of order. You can download that file here.

Once you have edited your YAML file appropriately, and have all the sprites you need, you will need to build the graphics. Doing so will require that you have the CE toolchain on your computer, and the latest version of convimg. Run convimg by opening a Terminal window, navigating to the folder in which your YAML is stored, and then run convimg.

            cd path/to/convimg.yaml
            convimg

This assumes that you have followed the toolchain's directions for adding its binaries to your system PATH. If you didn't, then you should be doing this:

            cd path/to/convimg.yaml
            path/to/convimg/convimg

If run without error, you should see the following in your Terminal window. If you do NOT see this, contact the Project devs.

            [info] Generating output for convert 'customgfx'
            [info]  - Writing 'TrekGFX.h'
            [info]  - Writing 'TrekGFX.c'
            [info]  - Writing 'TrekGFX.8xv'

Your custom graphics pack has been successfully built. Congratulations!

Importing a Custom Graphics Pack

If you have built a custom graphics pack, or have downloaded someone else's and want to install it in place of the defaults, you can do so by navigating to the folder where the TrekGFX.8xv file you just built or downloaded is located. You can then send it to your calculator (or emulator) by following the procedures for transfering files laid out by the software of your choice (TI-Connect, TiLp, etc). If you have followed the procedures laid out here properly, everything should work smoothly. However, if the calculator returns a graphics error or your sprites appear mismatched, consult the Troubleshooting section.

Hosting a Server Instance

Want to run your own TI-Trek server? The reasons are plenty. Want liberty to modify the server to a different play-style, have your own missions, or just build your own community there? It is possible to do so.

First things first, just clone the repository for the server!

            git clone https://github.com/acagliano/titrek-server

Now that you have the current build of the server, now comes the time to give it a /home! No pun intended; That is precisely what you must do. You must create a directory in which the files for the server will go. Of course, if you clone the repository, you will have one. You can proceed to move that directory to the place where you want the server to be on your computer. Or you can...you know... clone it there to begin with.

Configuring the Server

To customize certain portions of the server, you will want to locate and open the file config.json with your favorite style of text editor. You will see a JSON file that looks something like this:

            {
            "port":51701,
            "debug":true,
            "packet-size":4096,
            "min-client":[0, 0, 98],
            "max-players":100,
            "idle-timeout":600,
            "enable-discord-link":true,
            "log":"logs/server.log",
            "gamedata": { "path":"data/" },
            "player": { "path":"data/players/" },
            "space": { "path":"data/space/" }
            }

See the lists below for a description of what each option in the file does.

Settings

port
Port on which the server will listen.
Accepted: Any valid port number
debug
Whether or not packet debug info will be printed to the log and console. It can get lengthy.
Accepted: true | false
packet-size
The size of the send() and recv() buffers the server works with.
The default (4096) mirrors the buffer size on the calculator.
Accepted: Any valid size in bytes
min-client
Bytearray containing 3-byte version ID of the earliest client version that will be allowed to connect.
Accepted: [<major>, <minor>, <revision>]
max-players
Maximum number of simultaneous connections allowed.
Accepted: Any, within reason
idle-timeout
How long .recv() should block before triggering an exception and closing the connection.
Accepted: Number, indicating time (in seconds)
enable-discord-link
Whether or not the server sends chat and status messages to the server's Discord.
Accepted: true | false
log
Specifies the path to the server's logfile.
Accepted: A string representing a file path. The file does not need to be manually created.
player
A dictionary of configuration options for handling of player data (see below).
space
A dictionary of configuration options for handling of map data (see below).

Now you need to make sure you have the dependencies needed for the server software to run. Many of these are system libs, but nonetheless, the full list of dependencies is below. If you do not have them, use pip or pip3 to install them:

            socket, threading, ctypes, hashlib, json, os, sys, time, math, ssl,
            traceback, subprocess, logging, gzip, re, pycryptodomex

Running the Server

Now it is time to launch the server. To do so, open a Terminal window:

            cd <path_to_server.py>
            python3 server.py

If it runs without issue, congratulations! You have gotten the game server up and running! Now there is one further optional setup procedure. This is if you want to run the server as a daemonized process, accessible through a screen session. It uses systemctl (if your server environment uses something else, you will have to figure out the equivalent scripting).

            [Service]
                WorkingDirectory=<path to the server root>
                User=<user you want to run as>
                Group=<group you want to run as>
                ExecStart=/bin/sh -c '/usr/bin/screen -DmS trek /usr/bin/python3 <path to runserver.py>'
                ExecStop=/usr/bin/screen -p 0 -S trek -X eval 'stuff "stop"\\015'
                ExecStop=/bin/sleep 10
                
            [Install]
                WantedBy=multi-user.target

You will likely need to adjust some of the paths from what is shown above. Once you enable the systemd file, working with the service should be as simple as systemctl stop|start|status.

TrekFilter Service Firewall

Overview

TrekFilter is an internal, custom packet filter service firewall I wrote to protect the service from some of the stray (or more focused) attacks I saw in the server logs earlier in the server's life. TrekFilter used to be more configurable, but I have taken away the ability to interface with it and turned it into a rigid security structure that performs three (3) important checks on each incoming packet. If a packet fails any one of the three integrity checks, a firewall event is triggered.

  1. Packet Size: Some packets have static sizes, and others are mappable over some function (Ex: 8 bytes per module requested). For these packets, an expected size is listed in the Firewall's metadata. Should an incoming packet of a type with a specified size or mapped size not match what is expected, a firewall event is triggered.

  2. Unpriviledged Client Sending Priviledged Packet: Certain packets types should only be used by logged in clients. If a client that is not logged in is sending a packet they should not, either they are using an outdated, modified, or bugged client (the server's enforced minimum client supported should prevent this in most cases) or the client has no idea about the service's protocol and is thus likely an attacker. If a client that is not logged in sends a packet that it should not be sending, a firewall event is triggered.

  3. Special Characters in Text Fields: Certain packets, such as the message packet, should have printable characters in them. In this case, if those packets contain special characters in that part of the packet, a firewall event is triggered.

A Firewall Event

A firewall event is a response from the filter to any of the above three packet integrity checks failing. When one occurs the following actions are taken to ensure that the offense is promptly dealt with and the (possible) attack is interrupted:

  1. The offending user is immediately disconnected.

  2. The offense is logged by the server using loglevel [FILTER].

  3. A message is sent to the #security channel of the Project TI-Trek discord.

  4. * A fail2ban jail monitors the server log for offenses. Too many hits in a period of time causes the offender to be banned.

Troubleshooting

Having a problem with one of the parts of this project? Chances are we encountered some of the same issues during testing already. Before you resign yourself to failure, have a gander at this list of issues we encountered, and suggestions to resolve them based on how we fixed it. Some of the information here might help you out.

Bridge Fails to Detect Physical Calc
  1. Is your calculator's USB port malfunctioning?
  2. Is your SRLDRVCE and USBDRVCE up to date?
  3. Is your settings savefile outdated? This can cause problems.
    Delete the appvar TREKSETT and try again.
  4. Is your computer running Windows? The serial/usb drivers don't play well with Windows. Wait for a fix.
Bridge Fails to Detect CEmu Pipes
  1. This is a known issue with CEmu support. The best solution at present is to keep starting CEmu, running the Client program, then quiting and closing CEmu with the bridge running until it detects the pipe files. After that, follow the directions for using the bridge normally.
Custom GFX Version Error
  1. You have built custom graphics with an outdated custom YAML file, or the pack you are using is outdated. Custom graphics verify version number using image counts. Download the template YAML linked in the "Custom Graphics" section and add the missing sprite(s).
Custom GFX Image Mismatch
  1. This is related to the previous issue, and it is another manifestation of a version error. Since custom graphics check for version using sprite count, two graphics versions with the same number but different orders won't be detected, and sprites will show up where they don't belong. To fix, follow the procedure in the previous issue.

Technical Info

In this section we will review some under-the-hood information about this game, including memory requirements, file creation, and more. It should go without saying that this game requires a lot of memory to run.

Files Used or Created

PGRM: TITREK
The Client Program
File Size: 34614 bytes
* You will need enough RAM free to accomodate the listed size.
APPVAR: TrekGFX
Default Assets Pack
File Size: 30729 bytes
*This remains in archive, and so RAM space is not needed.
APPVAR: TrekSett
Settings Save File
File Size: 585 bytes
* This is moved to RAM when saving settings, so listed size in RAM is needed.

RAM Areas Used

pixelShadow
userMem
Stack
Serial Buffer: 8192 bytes
Server-Side Assets Cache: variable
Splash Screen sprite: 13818 bytes
USB status sprites: ~750 bytes
Log indicator sprites: ~400 bytes
Game State saves: ~650 bytes
Assorted RAM for functions: ~1000 bytes

Credits

I would like to thank the following individuals for their significant contributions to this project:

Client-Side Programming
(Lead) Anthony Cagliano
Adam "beck" Beckingham
commandblockguy
Server-Side Programming
(Lead) Adam "beck" Beckingham
commandblockguy
Anthony Cagliano
Bridge Programming
commandblockguy
Sprite Designers
Bailey Conrad
Ampersand
Pieman
TurquoiseDrag0n
Donators
Adam "beck" Beckingham
Pieman
ACagliano
Zeda

Legal Notices

Disclaimer

At long last we have arrived at the fun section -- the part where I turn into an alarmist and spend way too long freaking you out over worst-case usage scenarios that will likely never happen, but that I need to in order to cover arbitrary legal grounds.

This is a compiled C program, which means that on your calculator it is effectively assembly and is thus capable of breaking in quite spectacular and oftentimes amusing ways. For instance, how cool would it be to have your own personal firework-emitter, flamethrower, or nuclear reactor in your pocket, accessible by simply running our program. Unfortunately, however, should the FBI come calling, we will be forced to disavow all knowledge.

Dark humor aside, all official releases of this project are relatively stable, or stable enough that we can guarantee they will NOT trigger a nuclear meltdown of your calculator's circuitry. However, do be aware that improper usage of this software (in a manner inconsistent with the procedures laid out in this document) may cause some adverse effects. This includes but is not limited to: RAM clears, program and appvar corruption, and memory corruption. While we at Project TI-Trek have taken great care to ensure that all components of this project are stable, by using this software you assume any and all risk associated with it and agree to save harmless Project TI-Trek and its affilates.

Software Licenses

General EULA for Project Components

All major components of this project--server, client, and bridge--are the property of Project TI-Trek and of their respective developer(s) and are under intellectual copyright as laid out in Section 102 of the Copyright Act of 1976. The software components of this project are all distributed under the terms of the GNU General Public License Agreement v3 (GPLv3), and we assert that any distribution of our software must provide the same license agreement.

By common consent, we also assert that any assets, sprites, artwork, or publications released by us are also the property of Project TI-Trek and their respective designers or creators and that they are also distributed under the terms of GPLv3, with the same requirement that all subsequent redistributions/alterations be governed by the same license agreement.

The default game server provided by us for initial testing, and later sustainable gameplay, is governed by the same license as indicated in the first paragraph (GPLv3). However, be advised that the data files retained by our instance of the server are not. They are closed source, and viewable only by the individual account-holder to which they belong and, in abridged format, by Project staff on the Admin page of the "Web Deck". Be aware that gaining access to files on our server that you should not have access to is data theft, a cyber crime, and will result in prompt legal action.

EULA for Our Hosted Server Instance

As an end user of Project TI-Trek, you are given the privilege of using our server to play the game. In the initial stages, this server is used as a deployment environment to test new feature additions. However, it is also available for sustainable gameplay for project users. We will provide the ability to use our server free-of-charge for the foreseeable future. This means that not only is having an account and playing the game free of charge, but you will also not be asked to buy any special packages to unlock additional features or get more currency, access special areas of the map, or any of the other pay-to-win garbage that has become commonplace on almost every other MMO.

This being said, let me reiterate--the use of our server is a privilege, not a right. We can and will terminate your ability to use our service for violating our Terms of Service. The Terms are quite simple: don't be an asshole. If you are unclear as to what constitutes being an asshole, you probably need to re-evaluate yourself. But in the event you need a more specific breakdown, read on.

Modified Clients: Do not connect to our service with modified clients. We cannot guarantee that the server will support them, and we do not know what kind of advantage using it will give you over other players. Don't do it. It will get you IP banned.

Online Conduct: We expect a level of maturity from users. The server will at some point support a global chat. This means it will likely come with its share of trolls and flamers. Let's have no pretense here: trolling and flaming will result in being IP banned at the very least. Treat others with kindness. All chat messages are logged. A bit of in-game-context trash talking is one thing. Turning our platform into a medium to bully others will result in punitive action, from banning your IP address to contacting appropriate authorities. Simple as that. Don't test us. I work with children for at least part of my living and as a result I take bullying and harassment very seriously.

Now that we have passed the Terms of Service, let's finish the last topic of the EULA--information use. Our server does have moderate forms of data capture, particularly during the registration phase. We collect the following information from users: a username, a password, and an email address. The latter can be omitted should a user wish not to share it; If you do provide it, it will be used to send automated emails for major project updates only, unless you subscribe to other things. This is the only information we collect, as a result, our server is COPPA-compliant, as we collect no personally identifiable information from anyone, let alone a minor. You may upload assets to the "Web Deck" to control different aspects of your LARP experience within this game, but again...this information is cosmetic and cannot be used to identify you in any way. If you are a parent whose child is interested in playing this game and you would like to know more, feel free to contact the Project devs using one of the three options provided in the footer at our Official Website.