The Orient Express places you aboard that famous train bound from London, England to Constantinople in February 1923. As a secret agent your assignment is to make contact with an arms dealer who has tired of his life of crime, and arrest the killer of one of his former associates.

Some of the passengers on the train (all of whom are historical characters who actually rode the Express in their day) have information that can help you complete your assignment. As you work your way through the mystery, you participate in many of the things—delicious meals, stops at stations along the way, and occasional delays due to snow, derailment, and bandits—that made the Orient Express an unforgettable experience for those who rode it.

Solving the puzzle is not easy. You will probably want to make notes about meaningful clues and take some time to think—hours perhaps—before talking to the Turkish police (who will help you) at Uzunkopru. Bear the following in mind as you play the game:

So grab your notebook and your ticket, and start asking questions. Remember, a man's life is at stake!

sample output


What image comes to mind at the mention of the Orient Express? Adventure? Luxury? Intrigue? Reliability? Awe? The famous train was all of these things and much more. Very few people ever traveled on the Orient Express, even at its peak, because the cost was prohibitive for all but the super rich. However, no form of public transportation has fascinated more authors, journalists, and filmmakers than the Orient Express. Thus, it has assumed a dimension almost larger than life. D.H. Lawrence had Lady Chatterley and her lover travel on the Orient Express. Agatha Christie, who was, in fact, a regular traveler on the Orient Express, used it as the setting for one of her most compelling Hercule Poirot stories, Murder on the Orient Express. Graham Greene's Stambol Train is about the Orient Express. Eric Ambler also used it as the setting for The Mask of Dimitrios, and one of the most accurate descriptions of the postwar train is found in the final chapters of Ian Fleming's From Russia with Love. And there are scores of others. How did this magnificent train come into existence and how did it achieve such fame and notoriety? In the 30 or so years following 1825, when the first steam railroad was put into operation in England, every country in Europe began building its own railroad system. Political conditions were unsettled, and the threat of war hung heavy in the air. Hence railway builders would deliberately use track widths and rolling stock incompatible with those of their neighbors to thwart the movement of invaders by rail. Transcontinental travelers thus had to change trains at every border, and frequently used a ship or stagecoach to make connections.

Moreover, railroad coaches had evolved from horse-drawn carriages and were quite uncomfortable. Trains had no lavatories, no restaurant cars, no connections between coaches, no corridors, no lighting, hard seats, and little heat. Although progress was being made in Europe, it was in America that the real advances in rail travel were taking place. There, consistent with the democratic principles on which the country had been founded, railroad cars had open seating in contrast with the tiny boxed-in compartments found on European trains. Distances in the U.S. were longer, so provision had to be made for eating and other necessities. The three most important advances in American railroading sprang from necessity. First, much track in America had been poorly laid, so derailments were common. To overcome this problem, the fixed wheel-and-axle design was discarded, and railroad cars were equipped with bogies, swiveling four-wheel trucks with independent springs. Second, American trains were much longer and heavier than European trains, and the locomotive brakes required a very long distance to stop a train. So, for greater efficiency, George Westinghouse developed a system of compressed air brakes. The third advance was George Pullman's development of a combined parlor/sleeping car. Georges Nagelmackers, son of a wealthy Belgian banker, journeyed to the U.S. in 1869 and was very impressed by American railroads and particularly by Pullman's luxurious cars. By the time he returned to Europe in 1870, Nagelmackers was obsessed with the idea of establishing luxury, long-distance, through rail service throughout Europe.

His indulgent father was impressed with his son's enthusiasm and proposed to King Leopold II of Belgium that he would forgive the King's substantial overdue bank loans if the King would agree to head the list of subscribers to the venture. The King, seeing a way out of a difficult financial situation, agreed, and the new company of Nagelmackers et Cie. gained an endorsement. Soon their stock sales promotion had every social climber in Belgium clamoring to get aboard.

The new company's first train was to run from Paris to Berlin by way of Belgium. Five cars, ordered from a coach-building company in Vienna, arrived in early July to begin service later in the month. Then, on July 19, 1870, France declared war on Prussia. Discouraged, but still determined, Nagelmackers negotiated a route from Ostend, Belgium, through France, and down to Brindisi. The route was very successful—for one year. Then, on September 17, 1871, the French opened a tunnel through the Alps under Mount Cenis. Rights were reserved for French-owned rail-roads, so Nagelmackers was forced to continue using the much longer (18 hours) route through the Brenner Pass. As losses mounted, the service was reduced. With only ten cars as assets and debts far exceeding his capital, Nagelmackers disbanded the company and formed a new one under a name that was to become world famous: La Compagnie Internationale des Wagons-Lits. The company was struggling along, only slightly better off than the old one, when Nagelmackers received a letter inviting him to come to London to "discuss matters of mutual commercial interest." The invitation was from Colonel William Mann of Perkins, Ohio. Although charming and urbane, Mann was fundamentally dishonest. He once ran a tavern—profitable only because he didn't pay his bills. Later he sold stock in a non-existent oil field, collected taxes for the federal government (he turned in $4.7 million and pocketed $5 million), and ran several railroad-related swindles. His last misadventure in America was an attempt to compete with George Pullman using Mann-designed boudoir cars. Rather than having seats that converted into beds, each Mann car was divided into two separate sections, one for sitting and one—with real beds—for sleeping. The cars accommodated only 16 passengers, half the number who could share a Pullman, and cost more to build; thus they were quite unprofitable. Mann soon admitted defeat and took two of his cars to England where he held lavish receptions to drum up interest in them. The European railroad executives were unenthusiastic, except for young Nagelmackers who swallowed hook, line, and sinker everything Mann told him about his grandiose plans. Moreover, he even agreed to make his company a subsidiary of the Mann Boudoir Sleeping Car Company.

Nagelmackers, with boundless energy, traveled around Europe trying to sell cars to kings, nobles, and anyone else he thought could afford one. He quickly sold more than 50 cars and, in the process, became more convinced that there was a need for luxury train service across Europe. By now completely disenchanted with Mann, who was in London enjoying himself on the money that was rolling in, Nagelmackers and his financial backers bought him out for $5 million and reinstituted the company under its old name in 1876.

From London to Constantinople was a four-day trip on the Orient Express

Railroad executives were not convinced that the luxury service Nagelmackers described would be profitable, so they granted him only a few short-term contracts to attach some of his cars to various trains between Paris and Vienna, Paris and Cologne, Ostend and Berlin, and some other routes of less consequence. To the amazement of everyone but Nagelmackers, the cars were well patronized and frequently sold out. With some assistance from the influential King Leopold II, Nagelmackers started negotiating with many European countries, states, and kingdoms for a route from Paris to Constantinople. It took him almost a year to reach agreements with the eight national railway companies involved: the Eastern Railroad Company of France, the Imperial Railways of Alsace-Lorraine, the Kingdom of Württemburg State Railways, the Grand Duchy of Baden State Railways, the Royal Bavarian Lines of Communication, the Imperial and Royal Austrian State Railways, the Royal Rumanian Railways, and the Austrian Lloyd Shipping Company (for the last section by sea to Constantinople).

The route selected by Nagelmackers ran from Paris through Strasbourg, Munich, Salzburg, Vienna, Budapest, and Bucharest to Giurgiu on the Danube in Rumania. From there, the passengers were obliged to take a ferry across the river to Rustchuk, Bulgaria, where Nagelmackers had made a somewhat shaky arrangement for a special train to take them on to Varna (a port on the Black Sea coast). From there, a steamer took the passengers on an 18-hour sea voyage to Constantinople. Scheduled time was 81 hours and 40 minutes eastbound and 77 hours and 49 minutes westbound.

The service had no formal name, but newspapers quickly dubbed it the Orient Express, and Nagelmackers decided to make the inaugural run on October 4, 1883 under this name. The train was made up of two sleeping cars, a restaurant car, a luggage van, and a mail van. Each sleeping car had five compartments, each of which accommodated four people in comfortable bench seats by day and four berths at night. Washbasins and toilet compartments were at one end of each car. The large number of journalists invited on the inaugural run furnished many memorable accounts of the occasion. Nagelmackers spared no effort to ensure the success of the trip; elaborate food, excellent wine, beautiful crystal and linen, and impeccable service combined to create an ambience of unmistakable elegance and grandeur. In addition, many official receptions and welcomes were held along the way. Hungarian minstrels boarded the train at Szegedin and played vigorously for more than two hours without a stop. Passengers were even invited to the castle of the rather morose King of Bulgaria. Thus the most famous train of all time was put into service. After the euphoria of the inaugural trip wore off, the Orient Express settled into a regular routine. By 1884, it had become a daily service as far as Budapest and, a year later, to Bucharest with several alternative routings onward. By 1889, a link of track near Nish, Bulgaria, was finished, which meant that finally the same coaches could travel all the way from Paris to Constantinople. The route then became important for mail as well as passengers. Nagelmackers died of a heart attack on July 10, 1905, two weeks after his sixtieth birthday. He did not live to see the opening of the Simplon Tunnel, an incredibly important link through the Alps between Switzerland and Italy. Almost immediately, Wagons-Lits began to offer service between Paris and Venice. This became known as the Venice Simplon Orient Express (V-S-O-E) and is the only service still in operation today, thanks to its meticulous restoration by James Sherwood in 1982.

People often think of the Orient Express as one train running one route. In fact, the company operated more than 1000 coaches on routes throughout Europe and the Near East with such destinations as Lisbon, Madrid, Naples, Ankara, Beirut, Baghdad, Saint Petersburg, Berlin, Amsterdam, and London. From 1908 until the new communist regime appropriated the company's cars and property in 1919, Wagons-Lits operated all the Trains de Luxe on the Trans-Siberian Railway.

During the Great War (now called World War I), many Wagons-Lits services were halted, and because of the German occupation of Belgium, the company was forced to move to Paris. Prior to the war, the Simplon service terminated in Trieste, then a part of the Austrian Empire, because Austrian authorities would not permit international trains to traverse the Empire without stopping in Vienna. However, the Treaty of Versailles, which ended the War, specified that new international through routes be opened in Italy, Trieste, and the newly created country of Yugoslavia, formerly the southern part of the Austrian Empire.

Thus, a new and much faster southern route via the Simplon Tunnel and across Italy and Yugoslavia to Constantinople was inaugurated on April 11, 1919. A few years later, the route was extended on the western end to London, creating probably the single most popular route of the Orient Express. This route was in service until the Germans occupied France during World War II, and then reinstated from the end of the war until the last run on May 19, 1977. The train ran from London to Paris, through the Mont d'Or tunnel to Lausanne and Brig, through the Simplon Tunnel to Milan, Venice, and Trieste, and into Yugoslavia. A second train, originating in Munich, met the first train in Ljubljana, and continuing cars were joined for the run to Belgrade. At Crveni Krst the train was divided, some cars being routed to Athens and the main train going to Constantinople via Sofia, Bulgaria. The trip from London to Constantinople took exactly 96 hours and the train was rarely late. While the train was occasionally slowed by snow, it generally made up the lost time on the straight runs in France and Italy. One exception was in February 1929, when the train was marooned for six days in huge snowdrifts near Cherkes Keui, just 70 miles from Constantinople. Indeed, in its long history, the Orient Express suffered very few mishaps. Minor accidents occurred in January 1901, when a locomotive jumped the rails and ran into the restaurant hall of the Frankfurt-am-Main Central Station, and in November 1911, when the Orient Express ran into a stationary freight train near Vitry-le-Francois because of incorrectly set signals. No one was seriously injured in either of these accidents. On the other hand, holdups in the Balkan areas near the end of the run occurred with disturbing frequency in the early days of the Express. As political stability increased in the '30s, however, the number of railway robberies declined. On any given run of the Orient Express one could be certain that deals were being made, plots were being hatched, and fortunes were changing hands. The booking lists in the archives of the train company read like pages from the International Who's Who. Royalty from Europe and the East were frequent passengers on the Orient Express as were military officers, entertainers, musicians, bankers, industrialists, bishops, and, of course, spies. The train was known to be a hotbed of intrigue and mystery.

Basil Zaharoff, the notorious arms dealer, always reserved all the seats in compartment seven for himself when he rode the train. The dancer Margaretha Gertrud Zelle, otherwise known as Mata Hari, was a frequent passenger, and Lord Kitchener traveled on the train as a young military intelligence officer gathering information about Austrian and Turkish fortifications. But we'll never know the identities of most of the spies, secret agents, saboteurs, and couriers who repeatedly crossed the continent on mysterious missions. All of which leads us to speculate and wonder: What was it really like to travel the Orient Express?


Barsley, Michael. The Orient Express. London: Macdonald & Co., 1966.

Cookridge, E. H. Orient Express. New York: Random House, 1978.

Sherwood, Shirley. Venice Simplon Orient-Express. London: Weidenfeld & Nicolson, 1983.


The Orient Express program consists of a main program, initialization section, end-game section, nine major subroutines, and nine short subroutines.

In the initialization section (Lines 180–260), variables are dimensioned, and text and numeric data are read into variables in four separate subroutines. Before the data are loaded, the program enters a loop which increments the value of the seed for the random-number generator, RN. This loop is terminated when any key is pressed (Line 140). If the value of RN is above the acceptable maximum (32767), 65535 is subtracted until the value of RN is within the range acceptable to the Randomize statement.

The last function performed in the initialization section is the shuffling of 24 integers. These are used later to determine the order in which the conversations with various passengers occur. Shuffling is an important function in many games, particularly those involving cards. In mathematical terms, shuffling is defined as a random permutation, that is, generating the numbers from 1 to N in a random order without repetition. Consider this routine, commonly found in beginning programming texts, for shuffling 10 integers into M(1) to M(10):

10 FOR I = 1 TO 10
20    K = INT(1 + 10 * RND(1))
30    FOR J = 1 TO I
40       IF M(J) = K THEN 20
50    NEXT J
60    M(I) = K

A random number between 1 and 10 is generated in Line 20. This is then checked against all of the elements of M to see if it has already been used; if not, the current element of M, that is, M(I), is set equal to K. If it has been used, a new value of K is generated in Line 20. The routine is short, easy to understand, and horribly inefficient (the execution speed is proportional to the square of the numbers to be shuffled).

Consider this approach:

10 FOR I = 1 TO 10
20    M(I) = I
40 FOR I = 1 TO 9
50    K = I + INT((11 - I) * RND(1))
60    T = M(I)
70    M(K) = M(I)
80    M(I) = T

The program is two lines longer because of the necessity to load the array M(1) to M(10) with the integers 1 to 10 in Lines 10 to 30. However, the execution speed is much faster than the previous algorithm, as it is proportional to two times the numbers to be shuffled. The heart of the algorithm is found at Line 50. The first time through the loop, this function selects a random integer between 1 and 10; the second time through, between 2 and 10; the third time, between 3 and 10; and so on. The elements chosen are then exchanged with the values currently in those elements. If we think of the elements as cards, we could think of picking up one random card at a time from the deck, placing it on a pile, and then picking the next card. The final pile will thus be thoroughly shuffled. In the program, this subroutine is found at Lines 2760–2790.

The main program prints the scenario and then iterates through the 24 segments of the train journey. For each segment, the date is printed followed by the location and the arrival time. The scheduled arrival time is found in the data variable TA(n). The actual arrival time is determined by a random function at Line 310 and can be from 8 minutes early to 18 minutes late.

In some cases this function will produce a time like 271 or 1460. This problem is cured in the subroutine that prints out the time (Lines 3060–3090). The last two digits of the time are examined in Line 3070, and if they are found to exceed 59, one hour is added and 60 minutes are subtracted; this is accomplished by simply adding the integer 40 to the numeric value of the time. This subroutine then divides the time into strings representing hours and minutes and prints it in the correct format such as 3:11 or 15:00. The integer 10000 is added to the numeric value of the time so that the leading zeroes will be printed.

If an intermediate station is reached at night during sleeping hours, arrival and departure times are simply noted, and the program proceeds. If the stop is during waking hours, you are given a chance to get off the train and stretch your legs.

On the first segment of the trip out of London, you ask passengers to keep alert for information of value (Lines 520–560). Each segment of the trip has a series of data values which indicate the number of conversations with passengers that can take place (CN(n)), the meal to be served (ME(n)), and the potential hazards (HZ(n)). After the subroutines for each of these items are called in Lines 580–610, the program goes on to the next trip segment.

The breakfast and dinner subroutines (Lines 640–700 and 770–840) are similar. Each one asks if you are ready to go to the restaurant car for the meal and enters an endless loop until you press a key. The menu is then presented. Menu items are selected at random and printed on the screen. Items are centered by the LOCATE statement in Lines 690 and 820, which takes the length of the item, 80 (the width of the screen), divides by two, and moves the cursor to that location to start printing. At the conclusion of the meal, a loop, which waits until any key is pressed to clear the menu from the screen, is entered in the subroutine at Lines 2950–2970.

The subroutine to present the conversations you have with the passengers iterates through the conversations, if any, on the current trip segment. If a conversation is to be held, the number of that conversation, CS(CM), is selected from the previously shuffled list. In Line 910 the length of the string containing the conversation is checked. If it is fewer than 80 characters long, it is displayed on one screen line. If it is longer than 80 characters, the routine in Lines 920 and 930 starts iterating from the 79th character backward looking for a space. When one is found, the left side of the string up to that point (the first part of the conversation) is printed and, on the next line, the right side of the string from the space on is printed (the last part of the conversation).

Two subroutines for hazards—snowdrifts, bandits, and derailments—are nearly identical except for the dialog. There is a 65% chance of snow on three of the trip segments (Line 980). If it is snowing heavily, there is a 1% chance of getting stuck in a snowdrift.

If this happens, the trip is delayed for two days until the snow is cleared from the tracks. This routine could be made much more elaborate to simulate the time the train was stuck in a snowdrift for six days in 1929. However, that was an isolated incident, and every other time the train was stuck it resulted only in a delay and very little discomfort to the passengers.

On two trip segments in Bulgaria and Turkey, there is a 4% chance that bandits will board the train and rob the passengers. On the actual Orient Express robberies were an infrequent occurrence and, except for two instances in May and October 1891 when people on the train were kidnapped and held for ransom, bandits rarely hurt anyone, being content to steal money and jewelry.

On all trip segments there is a 2% chance of a derailment. In the event that this occurs, the locomotive, tender, and first mail coach will leave the track, and you will be stranded somewhere for a day until the track is repaired and a replacement locomotive obtained.

The probability of any of the above three hazards occurring in the program is much higher than it was in actuality. However, if the probabilities were reduced to the few thousandths of one percent that existed in reality, you might have to play the game tens of thousands of times to experience even a single misadventure.

The final major subroutine (Lines 1490–1690) checks the identities of the killer and defector that you input in the previous subroutine (Lines 1340–1470) with the actual identity. There are seven possible situations which can lead to any of five different eventual outcomes (see chart).

Killer identified as Defector identified as Defector killed by bandits You killed by killer Defector wrongly arrested
Killer Defector No No No
Killer Nobody Yes No No
Nobody Defector No Yes No
Nobody Nobody Yes Yes No
Nobody Killer No Yes Yes
Defector Nobody Yes Yes No
Defector Killer No Yes Yes

The correct dialog for the three possible nasty events (defector killed, you killed, and defector wrongly arrested) can be selected with just three IF…THEN statements (Lines 1500, 1600, and 1630). If you get both identities correct, the indicator A5 is set equal to 1 so that you receive a congratulatory message when you arrive in Constantinople.

The short subroutines (Lines 2760–3140) are all self-explanatory; they simply produce pauses in program execution, make train noises, check for yes/no answers, and the like. The end-game segment (Lines 3189–3330) presents an end-game message, displays a message of congratulations if you got both indentities correct, and asks if you want to ride again.


A Answer of user (0 = yes, 1 = no)
A$ Answer to string-input query, user input
A1, A2 Answer to identity of defector and killer, user input
A3, A4 Actual identity of defector and killer
A5 Indicates if user identifications were correct
C$(n) Conversations of passengers, n = 1 - 24
CM Conversation number, index of CS
CN(n) Number of conversations per trip segment, n = 1 - 24
CP(n) Conversation indicator (0 = passenger, 1 = waiter, 2 = cook), n = 1 - 24
CS(n) Conversation number, n = 1 - 24
DA(n) Day of trip by trip segment, n = 1 - 24
HW Hazard, derailment indicator
HX Hazard, bandit-attack indicator
HY Hazard delay in days
HZ(n) Hazards on each trip segment, n = 1 - 24
I Index indicator
J Trip-segment indicator
K, KA Index indicators
LA$(n) City, n = 1 - 24
LB$(n) Country, n = 1 - 24
MB$(n) Meal, breakfast, name of menu item, n = 1 - 13
MD$(n) Meal, dinner, name of menu item, n = 1 - 25
ME(n) Meal indicator by trip segment, n = 1 - 24
N$(n) Names of passengers, n = 1 - 25
RN Random seed for random-number generator
T Time, temporary for printing
T$ Time, string variable, temporary for printing
TA(n) Time of arrival, scheduled, by trip segment, n = 1 - 24
TB Time of arrival, actual
TD(n) Time of departure by trip segment, n = 1 - 24
TN Time, minutes early or late
X Temporary variable
X$ Temporary string variable


Download ORIENT.BAS (tokenized BASIC format)

110 LOCATE 10, 27 : PRINT "The Orient Express, 1923"
120 LOCATE 13, 28 : PRINT "(c) David H. Ahl, 1986" : LOCATE 23, 27
130 PRINT "Press any key to continue." : RN = -32768!
140 WHILE LEN(INKEY$) = 0 : RN = RN + 1 : WEND
150 WHILE RN > 32767 : RN = RN - 65535! : WEND : RANDOMIZE RN : CLS
160 PRINT TAB(22) "The Mysterious Arms Deal" : PRINT : GOSUB 1710
170 '
180 'Initialization
190 DIM C$(25), CN(25), CP(25), DA(25), HZ(25), LA$(25), LB$(25), ME(25), N$(25)
200 DIM TA(25), TD(25), CS(25), MB$(15), MD$(26)
210 GOSUB 1880 : 'Read data about journey segments
220 GOSUB 2160 : 'Read statements of travelers
230 GOSUB 2430 : 'Read names of those on the train
240 GOSUB 2530 : 'Read menu selections
250 GOSUB 2760 : 'Shuffle 24 integers for later use
260 PRINT "Press any key to call a taxi…" : WHILE LEN(INKEY$) = 0 : WEND
270 '
280 'Main program
290 FOR J = 1 TO 24 : 'Iterate through locations
300 PRINT : PRINT "February" DA(J) + 13 + HY "1923" : 'Print date
310 TN = 18 - INT(27 * RND(1)) : TB = TA(J) + TN : T = TB : IF J = 1 THEN 450
320 GOSUB 3110 : PRINT "You have arrived at " LA$(J) ", " LB$(J) " at"; : GOSUB 3060
330 IF TN > 1 THEN PRINT "just" TN "minutes late." : GOTO 360
340 IF TN < -1 THEN PRINT "almost"; TN "minutes early." : GOTO 360
350 PRINT "— right on time!"
360 IF TB > TD(J) -2 THEN T = TB + 4 ELSE T = TD(J) : 'Make sure departure is after arrival
370 IF J = 24 THEN 3190 ELSE IF ME(J) < 4 THEN 400 : 'Is it daytime?
380 PRINT "Asleep in your compartment, you barely notice that the"
390 PRINT "departure was right on time at"; : GOSUB 3060 : GOSUB 2860 : GOTO 490
400 IF J = 23 THEN GOSUB 1340 : 'Time to identify the killer and defector?
410 PRINT "Departure is at"; : GOSUB 3060 : PRINT
420 INPUT "Would you like to get off and stretch your legs";A$ : GOSUB 2810
430 IF A = 1 THEN PRINT "Okay, you stay in your compartment." : GOTO 470
440 PRINT "Okay, but be sure not to miss the train." : GOTO 470
450 PRINT "The taxi has dropped you at Victoria Station in London."
460 PRINT "The Orient Express is standing majestically on Track 14."
470 PRINT : SOUND 500, 15 : GOSUB 2860 : SOUND 500, 30 : PRINT "All aboard…";
480 GOSUB 2860 : PRINT "train is leaving." : GOSUB 2860
490 GOSUB 2990 : 'Train noises
500 GOSUB 2860 : IF J > 1 THEN 570 : 'First leg of trip?
510 X = 3 + INT(20 * RND(1))
520 PRINT : PRINT "You speak to some of the passengers—" N$(X) ","
530 PRINT N$(X + 1) ", " N$(X + 2) " and others—and ask them to keep"
540 PRINT "their eyes and ears open and to pass any information—no
550 PRINT "matter how trivial—to you in compartment 13. The Channel"
560 PRINT "crossing is pleasant and the first part of the trip uneventful."
570 IF J = 23 THEN GOSUB 1490 : 'Time to identify the killer and defector?
580 IF ME(J) > 0 AND ME(J) < 4 THEN ON ME(J) GOSUB 770, 720, 640 : 'Meals
590 GOSUB 860 : 'Talk to passengers
600 IF HZ(J) > 0 THEN ON HZ(J) GOSUB 970, 1110 : 'Snow or bandits on this leg?
610 GOSUB 1220 : 'Other hazards
620 NEXT J
630 '
640 'Subroutine to serve breakfast
650 PRINT : PRINT "Breakfast is now being served in the restaurant car."
660 PRINT "Press any key when you're ready to have breakfast."
680 FOR I = 1 TO 4 : X = 3 * (I - 1) + 1 + INT(3 * RND(1))
690 LOCATE 4 + 3 * I, (80 - LEN(MB$(X))) / 2 : PRINT MB$(X) : NEXT
700 LOCATE 19, 20 : PRINT MB$(13) : GOSUB 2950 : RETURN
710 '
720 'Subroutine to serve lunch
730 PRINT : PRINT "An enormous buffet luncheon has been laid out in the ";
740 PRINT "restaurant car." : PRINT "Press any key when you have finished.";
760 '
770 'Subroutine to serve dinner
780 PRINT : PRINT "Dinner is now being served in the restaurant car."
790 PRINT "Press any key when you're ready to have dinner."
810 FOR I = 1 TO 7 : X = 3 * (I - 1) + 1 + INT(3 * RND(1))
820 LOCATE 2 + 2 * I, (80 - LEN(MD$(X))) / 2 : PRINT MD$(X) : NEXT
830 LOCATE 18, 24 : PRINT MD$(22) : LOCATE 20, 30 : PRINT MD$(23)
840 LOCATE 22, 32 : PRINT MD$(24) : GOSUB 2950 : RETURN
850 '
860 'Subroutine to have conversations
870 FOR K = 1 TO CN(J) : 'Iterate through conversations in this trip segment
880 GOSUB 2890 : CM = CM + 1 : 'Ring compartment buzzer and open door
890 IF CP(CS(CM)) > 0 THEN X = CP(CS(CM)) ELSE X = 3 + INT(23 * RND(1))
900 PRINT "Standing there is "N$(X) ", who tells you:" : X = CS(CM)
910 IF LEN(C$(X)) < 81 THEN PRINT C$(X) : GOTO 950 : 'If short message, print it
920 CS(RN) = CS(CM) : FOR KA = 79 TO 1 STEP -1
930 IF MID$(C$(X), KA, 1)< >" " THEN NEXT KA : 'Find a space near end of line
940 PRINT LEFT$(C$(X), KA) : PRINT RIGHT$(C$(X), LEN(C$(X)) - KA)
960 '
970 'Subroutine for snow
980 X = RND(1) : IF X > .65 THEN RETURN : '65% chance of snow
990 PRINT : PRINT "It is snowing heavily ";
1000 IF X < .01 THEN 1030 : '1% chance of getting stuck in the snow
1010 PRINT "but the tracks have been cleared and the train"
1020 PRINT "will not be delayed." : RETURN
1030 PRINT "and the train is forced to slow down." : PRINT
1040 PRINT "Oh no! The train is coming to a stop. Let's hope this is"
1050 PRINT "not a repeat of the trip of January 29, 1929 when the Orient"
1060 PRINT "Express was stuck in snowdrifts for five days." : PRINT : GOSUB 2860
1070 PRINT "But it looks like it is!" : GOSUB 2860
1080 PRINT "You are stranded for two days until a snowplow clears the track."
1090 PRINT "The train is now exactly two days behind schedule." : HY = HY + 2 : RETURN
1100 '
1110 'Subroutine for bandits
1120 IF RND(1) > .04 THEN RETURN : '4% chance of bandits
1130 IF HX = 1 THEN RETURN ELSE HX = 1 : 'Only one bandit attack
1140 PRINT : PRINT "You are rudely awakened from a deep sleep by a loud noise"
1150 PRINT "as the train jerks to a halt." : GOSUB 2890
1160 PRINT "You are shocked to see a bandit waving a gun in your face."
1170 PRINT "He demands that you give him your wallet, jewelry, and watch." : PRINT
1180 GOSUB 2860 : PRINT "The bandits are off the train in a few moments with"
1190 PRINT "their loot. They disappear into the forest. No one"
1200 PRINT "was injured, and the train resumes its journey." : RETURN
1210 '
1220 'Subroutine to deal with miscellaneous hazards
1230 IF RND(1) > .02 THEN RETURN : '2% chance of derailment
1240 IF HW = 1 THEN RETURN ELSE HW = 1 : 'Only one derailment
1250 PRINT : PRINT "You hear a loud screeching noise as the train comes to a"
1260 PRINT "crashing stop. The engine, tender, and first coach are"
1270 PRINT "leaning at a crazy angle. People are screaming." GOSUB 2860
1280 PRINT : PRINT "While not as bad as the derailment at Vitry-le-Francois in"
1290 PRINT "November 1911, there is no question that the front of the"
1300 PRINT "train has left the track." : GOSUB 2860 : PRINT
1310 PRINT "You are stranded for exactly one day while the track is"
1320 PRINT "repaired and a new locomotive obtained." : HY = HY + 1 : RETURN
1330 '
1340 'Subroutine to identify defector and killer
1350 PRINT : PRINT "The Turkish police have boarded the train. They have been"
1360 PRINT "asked to assist you, but for them to do so you will have to"
1370 PRINT "identify the killer (the dealer in machine guns) and the defector"
1380 PRINT "(the Scotch drinker) to them. The arms dealers are lined"
1390 PRINT "up as follows:" : PRINT : PRINT " (1) Austrian, (2) Turk, ";
1400 PRINT "(3) Pole, (4) Greek, (5) Rumanian." : PRINT
1410 INPUT "Who is the defector (a number please)";A1
1420 INPUT "and who is the killer";A2 : GOSUB 2860
1430 PRINT : PRINT "The police take into custody the man you identified as the"
1440 PRINT "killer and provide a guard to ride on the train with the"
1450 PRINT "defector. You return to your compartment, praying that"
1460 PRINT "you made the correct deductions and identified the right men."
1470 PRINT : GOSUB 2860 : RETURN
1480 '
1490 'Subroutine to check the identities
1500 IF A1 = A3 OR A1 = A4 THEN 1600 : 'Defector saved?
1510 PRINT : PRINT "You are suddenly awakened by what sounded like a gunshot."
1520 PRINT "You rush to the defector's compartment, but he is okay."
1530 PRINT "However, one of the other arms dealers has been shot." : GOSUB 2860
1540 PRINT : PRINT "You review the details of the case in your mind and realize"
1550 PRINT "that you came to the wrong conclusion and due to your mistake"
1560 PRINT "a man lies dead at the hands of bandits. You return to your"
1570 PRINT "compartment and are consoled by the thought that you correctly"
1580 PRINT "identified the killer and that he will hang for his crimes."
1590 '
1600 IF A2 = A4 THEN A5 = 1 : RETURN : 'Killer is still on the train
1610 GOSUB 2890 : PRINT "A man is standing outside. He says, 'You made a"
1620 PRINT "mistake. A bad one. You see, I am the machine-gun dealer."
1630 IF A1< >A4 THEN 1660 : 'Wrongly identified defector as killer?
1640 PRINT "Moreover, you incorrectly identified the man who was cooperating"
1650 PRINT "with you as the killer. So the state will take care of him. Ha."
1660 PRINT : GOSUB 2860 : PRINT "He draws a gun. BANG. You are dead."
1670 PRINT : PRINT "You never know that the train arrived at 12:30, right on"
1680 PRINT "time at Constantinople, Turkey." : GOSUB 2860 : GOSUB 2860
1690 PRINT : PRINT : GOTO 3190
1700 '
1710 'Subroutine to set the scenario
1720 PRINT " It is February 1923. The following note is received at"
1730 PRINT "Whitehall: 'If you will furnish me with a new identity and a"
1740 PRINT "lifetime supply of Scotch, I will give up my life of arms dealing"
1750 PRINT "and will provide you with much valuable information. I will be"
1760 PRINT "on the Orient Express tonight. But you must contact me before"
1770 PRINT "the train reaches Uzunkopru or that swine dealer of Maxim machine"
1780 PRINT "guns will have me killed by bandits like he did to Baron Wunster"
1790 PRINT "last month.' The note is not signed."
1800 PRINT " You, a British agent, are assigned to take the train, rescue"
1810 PRINT "the defector, and arrest the killer."
1820 PRINT " You know there are five notorious arms dealers of different"
1830 PRINT "nationalities operating in Europe under an uneasy truce as each"
1840 PRINT "deals in a different kind of weapon. But it is obvious that the"
1850 PRINT "truce has ended." : A4 = A5 : PRINT : PRINT : RETURN
1860 PRINT "Press any key to call a taxi…" : WHILE LEN(INKEY$) = 0 : WEND : RETURN
1870 '
1880 'Subroutine to read meals, conversations, hazards, day, times, location
1890 FOR I = 1 TO 24 : READ X, ME(I), CN(I), DA(I), TA(I), TD(I), LA$(I), LB$(I)
1910 DATA 1, 0, 0, 0, 1, 0, 1430, "London", "England"
1920 DATA 2, 1, 2, 0, 1, 1855, 1919, "Calais", "France"
1930 DATA 3, 0, 1, 0, 1, 2233, 2253, "Paris (Nord)", "France"
1940 DATA 4, 4, 0, 0, 1, 2316, 2350, "Paris (Lyon)", "France"
1950 DATA 5, 4, 0, 1, 2, 600, 620, "Vallorbe", "Switzerland"
1960 DATA 6, 0, 1, 0, 2, 700, 707, "Lausanne", "Switzerland"
1970 DATA 7, 3, 1, 1, 2, 732, 734, "Montreux", "Switzerland"
1980 DATA 8, 0, 1, 1, 2, 919, 927, "Brig", "Switzerland"
1990 DATA 9, 0, 3, 0, 2, 1005, 1025, "Domodossola", "Italy"
2000 DATA 10, 2, 2, 0, 2, 1223, 1320, "Milan", "Italy"
2010 DATA 11, 1, 2, 0, 2, 1705, 1730, "Venice (S. Lucia)", "Italy"
2020 DATA 12, 0, 1, 0, 2, 1954, 2014, "Trieste", "(Free State)"
2030 DATA 13, 0, 1, 0, 2, 2044, 2110, "Opicina", "Italy"
2040 DATA 14, 0, 2, 0, 2, 2119, 2225, "Sezana", "Slovenia"
2050 DATA 15, 4, 0, 0, 3, 21, 107, "Ljubljana", "Slovenia"
2060 DATA 16, 4, 0, 0, 3, 310, 330, "Zagreb", "Croatia"
2070 DATA 17, 3, 2, 0, 3, 900, 956, "Belgrade", "Serbia"
2080 DATA 18, 2, 1, 0, 3, 1334, 1356, "Crveni Krst", "Serbia"
2090 DATA 19, 0, 2, 0, 3, 1555, 1634, "Caribrod", "Serbia"
2100 DATA 20, 1, 2, 0, 3, 1856, 1935, "Sofia", "Bulgaria"
2110 DATA 21, 4, 0, 2, 4, 45, 120, "Svilengrad", "Bulgaria"
2120 DATA 22, 4, 0, 2, 4, 406, 445, "Pithion", "Greece"
2130 DATA 23, 3, 0, 3, 4, 505, 545, "Uzunkopru", "Turkey"
2140 DATA 24, 0, 0, 0, 4, 1230, 0, "Constantinople", "Turkey"
2150 '
2160 'Subroutine to read statements of travelers
2170 FOR I = 1 TO 24 : READ CS(I), CP(I), C$(I) : NEXT I : RETURN
2180 DATA 1, 0, "I've heard they all have different color chalets on a north-south ridge in the Tyrol region."
2190 DATA 2, 0, "The Austrian said he likes the look of natural wood and would never paint his chalet."
2200 DATA 3, 0, "They gave the waiter a difficult time. The Turk ordered beer and the other four all ordered different drinks."
2210 DATA 4, 0, "The Greek told me he hunts deer, but he never hunts with any of the others because they all hunt different animals."
2220 DATA 5, 1, "My brother delivered a case of Kirsch to the green chalet. He remembers it being just south of the gaudy red chalet."
2230 DATA 6, 0, "The Pole asked me—can you imagine that?—if I wanted to buy any howitzers."
2240 DATA 7, 2, "One of them asked me to cook some pheasant that he shot. He said that I should come to the yellow chalet."
2250 DATA 8, 1, "One time my brother said he delivered a case of Cognac to the middle chalet."
2260 DATA 9, 0, "The Rumanian said he had the shortest distance to drive from his chalet to the railroad station at Munich."
2270 DATA 10, 0, "One of them bragged that his military rifles were so accurate that he bagged a fox with one of them."
2280 DATA 11, 0, "The man who hunts wild boar said that the pistol dealer who lives in the chalet next to his often gives loud parties."
2290 DATA 12, 0, "The pheasant hunter complained that the arms dealer in the chalet next to his makes far too much noise testing his mortars."
2300 DATA 13, 0, "The gin drinker bragged that he shot sixty warthogs on a single day last August."
2310 DATA 14, 0, "The Rumanian said he looks out on a blue chalet."
2320 DATA 15, 0, "The Cognac drinker bragged that he is the best hunter and can drink more than all of the rest of them combined."
2330 DATA 16, 0, "The one carrying the pistol said he thinks the boar's head over his neighbor's doorway is revolting."
2340 DATA 17, 0, "One of them said that one day he'd like to lob a mortar shell at the string of pheasants drying in his neighbor's yard."
2350 DATA 18, 0, "The Kirsch drinker said he loved the roast chicken he had to eat last night."
2360 DATA 19, 0, "The one carrying the pistol had a second helping of pie."
2370 DATA 20, 0, "One commented that his beef dinner wasn't nearly as good as the boar that he shot last week."
2380 DATA 21, 0, "The Pole asked for more soup."
2390 DATA 22, 0, "The one eating all the cheese mumbled that it was the same color as his chalet."
2400 DATA 23, 0, "The Rumanian and Austrian got completely drunk last night."
2410 DATA 24, 0, "I'd like to visit the blue chalet. The owner is said to serve excellent lobster."
2420 '
2430 'Subroutine to read the names of those on the train
2440 FOR I = 1 TO 25 : READ N$(I) : NEXT I : RETURN
2450 DATA "R. Brundt (a waiter)", "C. D'Arcy (a chef)"
2460 DATA "Herbert Hoover", "Baron Rothschild", "Guido Famadotta", "Gustav Mahler"
2470 DATA "Robert Baden-Powell", "Fritz Kreisler", "Dame Melba", "Gerald Murphy"
2480 DATA "Calouste Gulbenkian", "Captain G.T. Ward", "Sir Ernest Cassel"
2490 DATA "Major Custance", "F. Scott Fitzgerald", "Elsa Maxwell", "Mata Hari"
2500 DATA "Clayton Pasha", "Arturo Toscanini", "Maharajah Behar", "Leon Wenger"
2510 DATA "Sarah Bernhardt", "Arthur Vetter", "Isadora Duncan", "David K.E. Bruce"
2520 '
2530 'Subroutine to read menus
2540 FOR I = 1 TO 13 : READ MB$(I) : NEXT I : 'Breakfast selections
2550 FOR I = 1 TO 26 : READ MD$(I) : NEXT I : 'Dinner selections
2570 DATA "Variete Jus de Fruits", "Prunes Macerees dans le Vin"
2580 DATA "Demi Pamplemouse", "Trois Oeufs sur le Plat", "Oeufs Poches"
2590 DATA "Omelette aux Champignons", "Tranches de Pain Beurees et Confiturees"
2600 DATA "Galettes", "Pommes-Frites", "Patisseries", "Croissants", "Yogurt"
2610 DATA "Cafe, The, Lait, Vin, Eau Minerale"
2620 DATA "Huitres de Beernham", "Cantaloup glace au Marsale"
2630 DATA "Compote des Tomates Fraiches", "Potage Reine"
2640 DATA "La Natte de Sole au Beurre", "Truite de riviere meuniere"
2650 DATA "Poulet de grain grille a Diable", "Roti de Veau a l'Osille"
2660 DATA "Truite Saumonee a la Chambord", "Chaud-froid de Caneton"
2670 DATA "Chaudfroix des Langouste a la Parisienne"
2680 DATA "Les Noisettes de Chevreuil Renaissance", "Becasses a la Monaco"
2690 DATA "Pointes d'asperge a la creme", "Parfait de foies gras"
2700 DATA "Salade Catalane", "Truffes au Champagne"
2710 DATA "Tagliatelle de carottes et courgettes", "Souffle d'Anisette"
2720 DATA "Creme de Caramel blond", "Sorbet aux Mures de Framboisier"
2730 DATA "La selection du Maitre Fromager", "Corbeille de Fruits"
2740 DATA "Les Mignardises", "Selection du vins et liquors"
2750 '
2760 'Subroutine to shuffle 24 integers
2770 FOR I = 1 TO 23
2780 K = I + INT((25 - I) * RND(1)) : X = CS(I) : CS(I) = CS(K) : CS(K) = X : NEXT I
2800 '
2810 'Subroutine to check for yes or no answer
2820 IF LEFT$(A$, 1) = "Y" OR LEFT$(A$, 1) = "y" THEN A = 0 : RETURN
2830 IF LEFT$(A$, 1) = "N" OR LEFT$(A$, 1) = "n" THEN A = 1 : RETURN
2840 INPUT "Please enter Y for 'yes' or N for 'no.' Which is it";A$ : GOTO 2810
2850 '
2860 'Subroutine creates a short pause
2870 FOR X = 1 TO 1000 : NEXT X : RETURN
2880 '
2890 'Subroutine to ring buzzer and open door
2900 PRINT : PRINT "Your compartment buzzer rings…"
2910 BEEP : FOR KA = 1 TO 300 : NEXT : BEEP : 'Ring the buzzer
2920 PRINT "Press any key to open the door."
2940 '
2950 'Subroutine to finish eating
2960 LOCATE 24, 18 : PRINT "Press any key when you have finished eating";
2970 A3 = A3 + 5 * (J + 1) - POS(X) : WHILE LEN(INKEY$) = 0 : WEND : CLS : RETURN
2980 '
2990 'Subroutine to produce train noises
3000 PRINT : PRINT "Clackety clack…clackety clack…clackety clack"
3010 IF RND(1) > .5 THEN RETURN ELSE FOR KA = 6 TO 1 STEP -1
3020 FOR I = 1 TO 4 : SOUND 130, .5 : FOR K = 1 TO 180 : NEXT : NEXT
3030 IF KA = 4 THEN GOSUB 3110
3040 FOR K = 1 TO 50 + KA * 120 : NEXT : NEXT : RETURN
3050 '
3060 'Subroutine to print time
3070 T = T + 10000 : T$ = STR$(T) : IF VAL(RIGHT$(T$, 2)) > 59 THEN T = T + 40
3080 T$ = STR$(T) : PRINT " " MID$(T$, 3, 2) ":" RIGHT$(T$, 2) " ";
3100 '
3110 'Subroutine to blow train whistle
3120 IF RND(1) > .5 THEN RETURN
3130 SOUND 500, 15 : FOR K = 1 TO 1400 : NEXT : SOUND 500, 3
3140 FOR K = 1 TO 200 : NEXT : SOUND 500, 20 : RETURN
3150 '
3160 'Error-handling subroutine
3180 '
3190 End of journey
3200 PRINT : PRINT "Your journey has ended. Georges Nagelmackers and the"
3210 PRINT "management of Cie. Internationale des Wagons-Lits "
3220 PRINT "hope you enjoyed your trip on the Orient Express, the"
3230 PRINT "most famous train in the world." : PRINT : PRINT
3240 IF A5< >1 THEN 3310 ELSE BEEP : BEEP : BEEP : X = 0
3250 PRINT "Whitehall telegraphs congratulations for identifying both"
3260 PRINT "the killer and defector correctly." : GOSUB 2860 : GOSUB 2860
3270 FOR I = 1 TO 25 : FOR K = 1 TO 100 : NEXT K : LOCATE 15, 30 : PRINT X$ : BEEP
3280 IF X = 0 THEN X$ = "CONGRATULATIONS !" : X = 1 : GOTO 3300
3290 X$ = " " : X = 0 : 'X$ = 17 spaces to erase congratulations
3310 INPUT "Would you like to ride again";A$ : GOSUB 2810
3320 IF A = 0 THEN PRINT "Okay. Good journey!" : GOSUB 2860 : RUN
3330 PRINT "Okay. So long for now." : GOSUB 2860 : KEY ON : CLS : END

Return to Table of Contents | Previous Section | Next Section