Arunmor Terminal Framework v1.0 - Create Terminal Applications Easily

Metro

Lead Developer
Lead Developer
Employee
Group Moderator
Dec 26, 2020
74
90
71
arunmor_clear.png
Arunmor Terminal Framework

Arunmor Terminal Framework (ATF) is a library that allows users to create powerful applications with minimal fuss. Inspired by Fallout in design, it is an easy to use framework that grants users the ability to create simple yet highly configurable retro terminal user interfaces for their applications. Suitable for both personal and business use, terminal applications are excellent for all purposes!

rp_civilcity_cg1a0020.jpgrp_civilcity_cg1a0018.jpgrp_civilcity_cg1a0019.jpg

Installing Arunmor Terminal Framework
  1. Copy the the ATF library listed in the spoiler below.
  2. On your MaxNet terminal, navigate to "r/programs"
  3. Enter the command "file create ATF.mscx"
  4. Enter the command "file open ATF.mscx" to open the file.
  5. Paste the contents of your clipboard into the file and click save.
Code:
24
{"compiler_version":1.0}
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
mDQXExYWBTZOPGtVWiqAxIfO

After following these steps, ATF is yours to begin using!


Usage
When creating a new ATF application, you must include the ATF library by placing "include ATF.mscx;" at the top of the script.
Follow the example terminal application in the spoiler below to see how you can interact with ATF in order to make a nice terminal application.

Table of Functions

.Initialise();Starts your terminal application. Place this below your configuration settings.
.SetName(string);Sets the name of your terminal application. This is displayed at the top at all times.
.SetAuthor(string);Sets the author name to be displayed when the terminal application is booting up.
.SetTitle(string);Sets the title of the application. This is displayed underneath the name at the top.
.SetColor(color);Sets the colour to be used by your terminal application. If this is not set, the default colour will be used (white).
.SetAdmin();Designates that the terminal application must be run with admin privileges in order to work. If the user denies admin privileges, they are given the option to either allow admin privileges or exit the application.
.SetKiosk();Makes the terminal application a kiosk, ready for use by the public. Users will be unable to quit or minimise the application. This setting only works on Information Display Boards and ATM terminals. Ideal for business applications.
.AddMenuOption(string, string);Adds an option to the main menu. The first string is used to set the text that is displayed on the button, the second string is used to assign a tag to the button for event handling.
.AddMenuInputOption(string, string);Adds an input option to the main menu. The first string is used to set the text that is displayed on the button, the second string is used to assign a tag to the button for event handling.
.Page();Creates a new page that matches the ATF design and features a back button. This function will return an MNGuiPanel, and can be used as a base for further UI building.
.Label();Creates a new label that matches the ATF design and is set to the primary colour of the application. This function will return an MNGuiLabel, and can be edited
.OptionButton();Creates a new button that is identical to the menu option that can be used on pages.
Note: This function returns an MNGuiPanel, not an MNGuiButton.
.OptionButtonInput();Creates a new input button that is identical to the menu option that can be used on pages.
Note: This function returns an MNGuiPanel, not an MNGuiButton.


C#:
// Arunmor Terminal Framework
// Example ATF application!

// Ensure that ATF.mscx is in the same directory as the program.
include "ATF.mscx";

// Here we create a new instance of a terminal program. This will be controlling most aspects of our application.
TerminalProgram program = new TerminalProgram();


// ===============================================================
// Configuration
// ===============================================================
program.SetName("Item Inventory System v1.1");
program.SetAuthor("Arunmor Technologies");
program.SetTitle("Please select an option");

// Here we can set the primary colour of our program.
Color Primary = new Color(0,255,0,255);
program.SetColor(Primary);

// We can force our application to only fully run when admin privileges are granted.
program.SetAdmin();

// We can choose to make our program a kiosk to run on ATMs and information boards. This is ideal for businesses.
program.SetKiosk();

// Here we can add a mix of option buttons and option inputs to our main menus
program.AddMenuOption("Option 1", "option_1");
program.AddMenuOption("Option 2", "option_2");
program.AddMenuOption("Option 3", "option_3");
program.AddMenuInputOption("Option 4", "option_4");

// Here we add event listeners so that our program knows what to do when a button is pressed.
Event.AddListener("Surface_ButtonPressed", "button_pressed", "OptionPressed");
Event.AddListener("Surface_InputButtonPressed", "input_pressed", "OptionInputPressed");

// This will start the program.
program.Initialise();


// ===============================================================
// Custom Functions
// ===============================================================
function OptionPressed(MNGuiButton button, Player ply)
{
    string tag = button.GetTag();
 
    // We can make our application do different things based on the hook we supplied in AddMenuOption().
 
    if(tag == "option_1")
    {
        // Creates a new page with a back button.
        // We can take this panel and add our own surface elements to it.
        MNGuiPanel page = program.Page();
        Surface.Update();
    }
    else if(tag == "option_2")
    {
        MNGuiPanel page = program.Page();
        Surface.Update();
    }
    else if(tag == "option_3")
    {
        // We can also run our logic inside a different function, outside of the if statement.
        Option3();
    }
}

function OptionInputPressed(MNGuiButton button, Player ply, string input)
{
    string tag = button.GetTag();
 
    if(tag == "option_4")
    {
        // Here we will take the provided input and display it on a page.
        MNGuiPanel page = program.Page();
        // Here we are using the standard ATF text included in the library.
        MNGuiLabel text = program.Label(page, input);
        text.SetText(input);
 
        // We use Surface.Update() to display our new page.
        Surface.Update();
    }
}

function Option3()
{
    MNGuiPanel page = program.Page();
    Surface.Update();
}

// We use this to keep our application running, waiting for an input.
while(true)
{
    Event.Process();
}

ATF should be easy to learn and incorporate, but if you have any questions or bug reports then feel free to join our Discord server below.
Happy creating!

 
Last edited:

Hydro

Civil Gamers Expert
Dec 19, 2020
217
126
71
This is some cool stuff, just built a UI in it dead quick. Love nice simple UI systems that are easy to work with!
 

"Wick"

Active member
Sep 5, 2022
181
29
21
Hey, is there any chance that you will be able to re-release this? The script doesn't work as of now.
 

Metro

Lead Developer
Lead Developer
Employee
Group Moderator
Dec 26, 2020
74
90
71
Hey, is there any chance that you will be able to re-release this? The script doesn't work as of now.

The new MaxNet compiler uses AES now so this won't work anymore. I'll look around for the source code but if I can't find it I'll remake it at some point.
 
  • Like
Reactions: Shrimp