Terminal Scripting Cheatsheet

Questions about the content creation procedure go here, including using Forge, Anvil, or other editors, or operating emulators like Basilisk II.
Post Reply
Posts: 2
Joined: Mar 23rd '16, 13:28

A cheat-sheet / document describing everything you can do with terminal scripts. Revision 2.

I recommend a cursory knowledge of terminal scripts before reading.
If you don't have such knowledge, read this example and you'll probably get how they work:

Code: Select all

#LOGON 1600

#PICT 10007
~text interface terminal malfunction error ~2992dud

i am durandal the most pretty ai in ever i made the pfhor ded and won all the everything you should go shoot some things I put here because reasons

#LOGOFF 1600

#LOGON 1600

#PICT 10007
you shot the wrong things now i will have a tantrum for a few thousand years go rest in deep space for a bit until i stop and remember to get you

#LOGOFF 1600


I could not find any documentation anywhere besides the Forge manual and various threads about this, so I decided to document it myself in one, consolidated place.

index. for ctrl-f users
  • [=S1=] how to read this
  • [=S2=] features
  • [=S3=] block delimiters
  • [=S4=] text-based commands
  • [=S5=] interaction-based commands
  • [=S6=] block types
  • [=S7=] text effects
[=S1=] how to read this
anything surrounded in <brockets> are things you must fill in
anything surrounded in [brackets] are things you can fill in if you want
for example, #TERMINAL <number> for terminal 0 would be #TERMINAL 0
(?) means that the previous statement requires verification

[=S2=] features
In Forge, commands do not need to be uppercase. However, Atque does need them that way.
comments start with semicolons, don't let the Forge manual fool you into thinking they actually do something

[=S3=] block delimiters
#TERMINAL <number> begins a terminal definition
#ENDTERMINAL <number> ends a terminal definition
#END ends a block -- this basically does nothing internally, but is needed to separate block types

[=S4=] text-based commands [wait for input, alignment/position, wrap width]
these will only display a single line without glitching:
[automatic/skippable, center/middle, 72] #LOGON <PICT number> displays a PICT in the middle of the screen with the logon sound
[automatic/skippable, center/middle, 72] #LOGOFF <PICT number> ditto, basically the same thing but changes some text around on the border and exits the terminal

these can display 22 lines at a time, if you go over that they will be scrollable:
[must scroll, left/left, 72] #INFORMATION displays just text (this is how M1 usually does things)
[must scroll, left/right, 45] #PICT <PICT number> [alignment] displays a PICT to the left of the screen (this is how M2/MI usually do things)
alignment may be RIGHT or CENTER (if you use center, you can NOT put text in)

used only in M1 (works in M2/MI if you're using A1 1.1+):
[must scroll, left/right, 45] #CHECKPOINT <goal id>
shows a map centered on the specified goal, with the goal circled, on the left of the screen
the map will show any polygons connected to the polygon the goal is in, so if you have completely separate areas (ie that you teleport between) it will only show
the area that the goal is in. it will also not display secret areas and any polygons proceding them

used ONLY only in M1:
[must scroll, left/left, 72] #BRIEFING <level number> displays text like #INFORMATION but will teleport you to another level after scrolling

[=S5=] interaction-based commands
#INTERLEVEL TELEPORT <level number> will exit the terminal and teleport you to the specified level, unless the level number is 256 (in which case it ends the game)
#INTRALEVEL TELEPORT <polygon number> will exit the terminal and teleport you to the centroid of the specified polygon instead of another level
#STATIC <duration in 1/30ths of seconds> will fill the terminal with a cool static effect for a duration of time (A1 only)
#TAG <light and/or platform tag number> will activate all lights and platforms tagged with the specified number
#SOUND <sound number> will play the specified sound, can't personally test this since I don't know how the Sounds file works \:D/

these were not implemented in M2/MI, and are still present in A1, unfinished
#CAMERA <object number> displays the view from a certain object?
#MOVIE <movie number> plays a movie from Movie
#TRACK <music number> plays a music track from Music

[=S6=] block types (must precede other commands but be after #TERMINAL)
if another block is specified, determines text that will be shown while:
#UNFINISHED your objective has not been met
#FINISHED your objective has been met
#FAILURE your objective has been met but not been successfully completed
#SUCCESS your objective has been met and successfully completed

[=S7=] text effects ($begin - $end)
$I - $i italicized text
$B - $b bold text
$U - $u underlined text
$C<n> change text color

default $C codes
0 = light green
1 = white
2 = red
3 = dark green
4 = light blue
5 = yellow
6 = dark red
7 = dark blue


Post Scriptum: I would appreciate if someone could verify the things stated here, while I did look through A1's source to get some information I am not entirely sure all of this is accurate.
Last edited by marrub on Mar 24th '16, 01:27, edited 1 time in total.
User avatar
Mjolnir Mark IV
Posts: 585
Joined: May 10th '09, 17:02

Nice work! Here's some additional info:

#BRIEFING was used by Marathon 1, whose terminals had a similar but incompatible syntax. #BRIEFING was basically a combination of #INFORMATION and #INTERLEVEL TELEPORT. (In A1's source, the class MarathonTerminalCompiler is only used to handle M1 terminals, which is why you found the tag there and nowhere else.)

#CAMERA, #MOVIE, and #TRACK were present but not implemented in the Marathon 2 source code; A1 inherited Bungie's half-finished mess. Dunno if Forge accepts them.

For #PICT groups, it looks like Atque supports "#PICT <id> RIGHT" or "#PICT <id> CENTER" to change the position. Centered pictures should not have any accompanying text.

#CHECKPOINT never worked properly in M2 or Infinity. Bungie was aware of the bug but it went unfixed until Aleph One 1.1. Checkpoint maps not only hide disconnected areas, but also areas beyond secrets (specifically, they don't show secret doors or areas beyond secret platforms).
Posts: 2
Joined: Mar 23rd '16, 13:28

Thank you, revised accordingly.
User avatar
Lion O Cyborg
Posts: 168
Joined: Jun 22nd '18, 19:00
Location: UK (which is IN EUROPE!)

Is there a way to add PICT resources to an existing game? I don't know where they are stored. I made a thread about this in detail here: http://pfhorums.com/viewtopic.php?f=24& ... 14#p188214
Post Reply