I Am Going to Start Using Weland/Vasara. Terminal help?

Discuss map ideas, techniques, and give help.
Post Reply
ForeverBlackened
Born on Board
Posts: 43
Joined: Jul 22nd '18, 02:14

I am already familiar with Weland and know how to design level geometry, but I need help on terminals. If I make a terminal texture in-game, what is the way I can make a terminal with it? I assume I need Atque to make that work, but the code still bewilders me.

I am seeking to make a terminal-less level for now. A production demo of sorts, showing off my bare-bones idea for a very dark and bleak level with scattered lighting. I will probably design a fully-accessible, simple spaceship with minimal texturing except where it will accent the atmosphere. Maybe it will be a dream sequence, who knows? I am going to invest ~4 hours into it probably.
User avatar
The Man
Vidmaster
Posts: 1203
Joined: Aug 6th '08, 05:23
Location: Sarasota, FL
Contact:

To be honest, the easiest way to learn how to write terminals is to split someone else’s map, look at theirs, and just copy the syntax. Most of the commands are pretty self-explanatory. The ones you’re most likely to use:
  • #INFORMATION displays text without an image
  • #PICT displays text next to the image ID you specify (Atque won’t accept IDs below 128, unfortunately); you can also add RIGHT after the image ID in Aleph One if you want the image to show up on the right.
  • #LOGON and #LOGOFF should be self-explanatory; image ID works the same way as for #PICT
  • #TAG activates a specified tag in a level
  • #INTERLEVEL TELEPORT takes you to a specified level (with numbering starting at 0, and I think 256 ending the game)
  • #INTRALEVEL TELEPORT takes you to a specified polygon
  • #CHECKPOINT shows a map around a specified goal object, though it looks bad for non-M1 maps in versions of Aleph One below 1.1
  • #UNFINISHED specifies a message for when the mission isn’t complete (if you don’t define any other sections in a given terminal, this message will continue to display even when the mission is complete)
  • #FINISHED for when it is
  • #SUCCESS and #FAILURE are basically just used in rescue missions and I don’t think they even work unless you’re making M1 maps
  • #END to end each of these sections (I’m not 100% sure this is required, but it may screw things up in unpredictable ways if you don’t include it)
  • $I/$i for italics
  • $B/$b for bold
  • $U/$u for underline
  • $Cx for changing font colour (there’s a list of colours in the document I link below)
  • #TERMINAL x to start a terminal
  • #ENDTERMINAL x to end it
  • You’ll use ; as a delimiter between terminals and at the start of each file.

I’ll be shocked if you actually use any other commands (Eternal does use the #STATIC one occasionally, and there’s also a #SOUND one that I’ve never, ever seen anyone use). There should be a complete guide here, but the best way to learn correct syntax is usually to read other people’s. You can actually read the Chronicles and Eternal terminals by just going to the Github projects (Chronicles map, Eternal map).

If all that’s too much of a pain you can also just set up an emulator for Mac OS 7/8/9 and use Hex to write your terminals, but setting up an emulator is its own kind of inconvenience. It’s also possible someone’s written a Hex clone for other operating systems by now that I simply don’t know about.
“People should not be afraid of their governments. Governments should be afraid of their people.” —V, V for Vendetta (Alan Moore)

“The trouble is that we have a bad habit, encouraged by pedants and sophisticates, of considering happiness as something rather stupid. Only pain is intellectual, only evil interesting. This is the treason of the artist: a refusal to admit the banality of evil and the terrible boredom of pain. If you can’t lick ’em, join ’em. If it hurts, repeat it. But to praise despair is to condemn delight, to embrace violence is to lose hold of everything else. We have almost lost hold; we can no longer describe happy man, nor make any celebration of joy.” —Ursula K. Le Guin, “The Ones Who Walk Away from Omelas”

“If others had not been foolish, we should be so.” —William Blake, The Marriage of Heaven and Hell

“The law cannot protect anyone unless it binds everyone; and it cannot bind anyone unless it protects everyone.” —Frank Wilhoit

Last.fm · Marathon Chronicles · Marathon Eternal 1.2 · Where Monsters Are in Dreams · YouTube Vidmaster’s Challenge
User avatar
ravenshining
Vidmaster
Posts: 892
Joined: Jun 17th '17, 22:50
Location: Hawai'i

What exactly are you having trouble with?

If you place the terminal texture on a wall in Vasara, it should pop up a screen asking you whether it's a save or text terminal, and what script to use. If you want to use a different texture for a terminal, I think that can be set up with MML but I'm not sure how.

Best way to learn how to code them is to open up existing terminal files and see how they're structured. I recommend looking at Eternal's, where there are some fun things like multiple logons and static, and Rubicon, which makes use of the #TAG to control things in the level by reading terminals.

But, to boil things down to the essentials, every terminal entry is structured as follows. Green text is mandatory, yellow text describes a variable number, blue text is for optional sections, red text is mandatory for multiple state terminals, white text is for comments

#TERMINAL terminal id
#UNFINISHED

various content tags such as #LOGON pict id followed by up to one line of text, #LOGOFF pict id followed by up to one line of text, #PICT pict id followed by many lines of text, #INFORMATION followed by many lines of text, #STATIC duration in ticks?, #TAG tag, #SOUND id, #BRIEFING level to teleport to followed by many lines of text, #CHECKPOINT id followed by many lines of text

#INTRALEVEL TELEPORT polygon or #INTERLEVEL TELEPORT level
#END
#FINISHED or #FAILED failed is for m1 rescue missions only
various content tags as above
#INTRALEVEL TELEPORT polygon or #INTERLEVEL TELEPORT level
#END
#ENDTERMINAL terminal id

Use ; to comment out a line. Use $B and $b to enclose bold text, $I and $i to enclose italics, $U and $u to enclose underlines, $C[number] to switch colours (default is green, should reset to green at the beginning of each new # section)
User avatar
ravenshining
Vidmaster
Posts: 892
Joined: Jun 17th '17, 22:50
Location: Hawai'i

Looks like The Man and I posted at the same time. Forgot about #CHECKPOINT, good catch- I believe what it shows is the polygon and all polygons bordering it that aren't secret doors, which looks bad if a map is not designed with that in mind?

The Man made a common mistake regarding rescue missions: If you're building rescue maps for A1 using Atque, the correct terminology is #FINISHED and #FAILED, Atque doesn't process #SUCCESS and #FAILURE. #FAILED will display if half the BoBs are dead on a map set via the latest (1.4.4) version of Weland or a hex editor to use the M1 Rescue mission type.

The Man also made a common mistake about semicolons: they are not required, but you can use them to comment out a line, A1 will ignore any lines beginning with the semicolon. It looks like they function as he describes since in M1 the convention was to put in a comment describing the term before the term, and the convention carried over into M2 / M∞ as a placeholder for a comment line. I gave an example over on the redux thread:
ravenshining wrote:For now, I'll set The Rose and Bob-B-Q as Extermination/Exploration, leave the M1 #failure messages under #failed since it won't be called, and comment out the "You have done well" lines from the #finished (m1 #success) messages. If you're curious, this:

Code: Select all

#INFORMATION
***INCOMING MESSAGE FROM LEELA***
;
;You have done well.  
;
;The surviving 
#4Fc#O32C <
;B.O.B.> reported seeing the Pf
hor transferring some kind of large device towards Reactor Are
;a 3. From the description it must be a bomb.
;
;If a large bomb is allowed to detonate in the Engineering Section, the Marathon would be 
^&2``~<Colloquialism Search Error #F9C>

We must head off the Pfhor threat to the Engineering section.  I am going to send you into the primary re~Tick Count=>$Bfirst_thought$b $U#49$u.  
You must clear the area of all aliens before they destroy the Primary Reactors.

~[p[]]*kc3sla/.U

***MESSAGE INTERRUPTED***

$B***JUMP PAD ACTIVATION INITIATION START***
***TRANSPORT WHEN READY***
gets rendered as this:
Image
User avatar
The Man
Vidmaster
Posts: 1203
Joined: Aug 6th '08, 05:23
Location: Sarasota, FL
Contact:

I just copied the #SUCCESS and #FAILURE thing from the documentation I linked in my first post; I don’t think I’ve ever actually used them myself. I’ll take your word for it, since you’ve obviously made a lot more M1 maps than I have. If that’s wrong, then whoever hosts that documentation should update it, though.

I also didn’t realise the delimiting semicolons weren’t required. I don’t think I’ve ever seen a terminal script that didn’t use them, but then, most of the terminal scripts I’ve looked at were split by either the Marathon Map Splitter or Atque, and I suspect it’s just standard behaviour for them to include the semicolons. It definitely makes it easier to read the terminal files with the semicolons included, though. It’s also possible that Forge required them back in the day, but that was so long ago that I couldn’t say for sure now.

And yes, you’re correct about #CHECKPOINT, or at least I’m pretty sure that’s how it works in A1 1.1. It never actually functioned properly in M2/∞ maps in earlier versions of A1, or for that matter in M2/∞ themselves.
“People should not be afraid of their governments. Governments should be afraid of their people.” —V, V for Vendetta (Alan Moore)

“The trouble is that we have a bad habit, encouraged by pedants and sophisticates, of considering happiness as something rather stupid. Only pain is intellectual, only evil interesting. This is the treason of the artist: a refusal to admit the banality of evil and the terrible boredom of pain. If you can’t lick ’em, join ’em. If it hurts, repeat it. But to praise despair is to condemn delight, to embrace violence is to lose hold of everything else. We have almost lost hold; we can no longer describe happy man, nor make any celebration of joy.” —Ursula K. Le Guin, “The Ones Who Walk Away from Omelas”

“If others had not been foolish, we should be so.” —William Blake, The Marriage of Heaven and Hell

“The law cannot protect anyone unless it binds everyone; and it cannot bind anyone unless it protects everyone.” —Frank Wilhoit

Last.fm · Marathon Chronicles · Marathon Eternal 1.2 · Where Monsters Are in Dreams · YouTube Vidmaster’s Challenge
User avatar
ravenshining
Vidmaster
Posts: 892
Joined: Jun 17th '17, 22:50
Location: Hawai'i

I don't think the documentation is wrong about rescue, I believe that may be Atque[ and Forge]'s fault. #SUCCESS and #FAILURE may be the proper way to do things, A1's code certainly reads that way, but unless you're using still mapping in Pfhorte and using ResEdit to write your terminals into the M1 application's resource fork, [or] building map files by hand with a hex editor (WHY?), or maaaaybe if you plan to make your map in the latest Weland and then merge it with Forge instead of Atque, they aren't going to work. Atque [and Forge] demands #FINISHED and #FAILED.

And yes, I've verified that you can write a terminal with no semicolons and it will work (with Atque and A1 anyway), but they do make organising things easier :-)
Last edited by ravenshining on Jul 31st '18, 21:44, edited 2 times in total.
User avatar
treellama
Vidmaster
Posts: 6110
Joined: Jun 2nd '06, 02:05
Location: Pittsburgh
Contact:

Atque uses the keywords Forge used, #UNFINISHED and #FINISHED. So if you're going to use either Forge or Atque, you want #FINISHED. #SUCCESS was original Marathon, I think?

#CHECKPOINT didn't work right in Marathon 2 / Infinity so you never see it used there. There were just screenshots of the level as terminal pictures.
ForeverBlackened
Born on Board
Posts: 43
Joined: Jul 22nd '18, 02:14

Interesting. Advice taken. I will get Atque and do some terminal sleuthing of my own. (Probably after I play all the games again. Still going through TGI as we speak and have Phoenix, Eternal, and Rubicon Pfhor Plank to go.)
User avatar
ravenshining
Vidmaster
Posts: 892
Joined: Jun 17th '17, 22:50
Location: Hawai'i

Ah, so it started with Forge. I take it the code I'm seeing must be code to compile M1 terms that got moved to Forge for M2. Interesting.

Three last tidbits for completeness sake:
• $$ will not display, $. will not display, but apparently $ followed by a number will display?
• %r will be replaced with "The colony has been wiped out. Phhht! Just like that."
• (0x1B, escape) was rendered as a space under OS 7, ▯ (invalid character rectangle) under OS 8 and 9, and is stripped out by Aleph One.
Post Reply