Welcome to Spy

Welcome to J.D. Spy!

Introduction

J.D. Spy (short for "John Doe Spy") is a puzzle-adventure game that pulls you, an innocent civilian, into the midst of an international terrorist plot. To save your own life, you will be required to hack into secured computer systems, decode encrypted messages, decipher computer algorithms, examine photographs for clues, and much, much more.

While J.D. Spy uses real world web sites and locations to find clues and answers, you will never be required to make any phone calls, or send any e-mails to these places. J.D. Spy is self-contained, and all e-mails should be sent using the game console.

I hope you enjoy playing J.D. Spy as much as I enjoyed making it!

Sincerely,

Michael I. Jacobs


Minimum Requirements

Spy requires Microsoft Windows 98 or later, or an equivalent version of the Microsoft Java VM. The proper VM is typically installed with IE 4.x or later.

Spy requires a minimum of 800x600 resolution to play. It is recommended that you play using 800x600 resolution.


Contact

Contact Me

If you have any general questions or comments, feel free to e-mail me at mjacobsca@yahoo.com. I'd love to hear from you!

Michael I. Jacobs


The Console

The Spy Console is the first screen you see when playing J.D. Spy. You will spend most of your time at this page navigating between the various menus.

The main focus of the console is to manage your e-mail. During the game, you will receive e-mails from other players and characters. To view an e-mail, simply double-click on it. You cannot delete normal game e-mails. The only e-mails that may be deleted are e-mails sent to you telling you that you have the "wrong information".

Other important details on the console are the current game date, the time, your current score, the new message indicator, and the status window. The status window will update periodically letting you know when you have entered a new game chapter.

There are 5 types of buttons on the console window. They are:

New Message

Database

Telnet

Maps

Notes


email

E-Mail Messages

The e-mail dialog is where you will send and receive e-mails to and from other characters in the game. The e-mail dialog will show you who the e-mail came from, the subject, and date it was received.

If the e-mail has an attachment, the "Attachment" button will be activated. Clicking on the Attachment button will save the files included with the e-mail to a folder in the "Downloaded Files" directory. The folder name will be "email_" followed by the subject of the e-mail.

Hit the Reply button to reply to the message. You may cancel a reply at any time.

NOTE ABOUT E-MAILS: Many times you must respond to an e-mail, or send an e-mail containing specific information. If the computer does not respond positively to your e-mail text, try sending the text in a different format. J.D. Spy does not use a language parser; it is looking for exact text matches. I've tried to included many variations of each response, so keep trying if you get stuck.


Database

The Spy Database will contain useful information to aid you in your mission. Use it to look up various names and places. Database entries will become available to you as you progress throughout the game. In some cases, the data will be available automatically. In other cases, you must find the information yourself.

The Database has only the information necessary to play Spy. It does not contain general information about subjects and places that you can find in an encyclopedia.


Telnet

Using the SpyTerminal v1.0, you will be able to telnet into various fictional computer systems around the world. Some are password protected, others are not.

To access an external server, type: "telnet zzz.zzz.zzz.zzz", where zzz... is the IP Address of the computer you wish to connect to. The SpyTerminal will attempt to connect. If it is successful, it will proceed to the login screen for password protected sites.

The SpyTerminal is loosely DOS based for simplicity. In the real world, most of the servers you would be telnetting to would probably be UNIX or LINUX servers.

The full list of commands you may use at the SpyTerminal is:

? - Help
attrib -h [filename] - Removes hidden file attribute
dir - Get a directory listing of a server
exit - Disconnects from a server
save [filename] - Download a single file from the server
save [*.*] - Downloads all files from the server
telnet [IP address] - Telnet to an internet server
upload [filename] - Upload a file to the server

When you save a file from the server, the file will be placed in a folder named "server_" + server name in the "Downloaded Files" directory.


Maps

Browse through maps of various locations using this dialog. Currently, only one map is included with Spy. You can also find that map in the "Graphics" directory if you need it.


Notes

This dialog is used to store game notes. Make any game notations necessary on this dialog.


Saved Files

As you play J.D. Spy, you will save attachments from e-mails, or download files from a server. These files will be placed in a "Downloaded Files" directory in your game directory. Saved Files from an e-mail will begin with the text "email_", followed by the subject of the e-mail. Files downloaded from a server will begin with the text "server_", followed by the server name. If you receive files from other sources other than an e-mail or server, they will be placed in your main game directory.

You can use the files you download in any way necessary. Make copies of them, edit them, etc... You can always obtain a fresh copy by resaving the attachment or redownloading the file from the server.

IMPORTANT RULE: In some cases, you will download a .zip file that has been password protected. J.D. Spy password protects these zip files to force you to learn the password on your own. AT NO TIME should you be trying to extract files from a password protected zip file unless you've already learned the password. Not only will you be depriving yourself of puzzle solving challenges (why play J.D. Spy if you don't want the challenges), but you may be missing vital clues along the way that you would learn as you are uncovering the password.


Web Sites

To succeed in J.D. Spy, it will be helpful to have access to web sites that have maps and can calculate distances. A few of my favorites are:

http://geography.about.com/science/geography/library/maps/blindex.htm

http://www.sitesatlas.com/Maps/index.htm

http://www.indo.com/cgi-bin/dist


Java Basics

One of the puzzles in J.D. Spy forces you to understand how a particular Java program works. While some familiarity with Java programming is helpful, it is not necessary. Below I will list some basic Java concepts to help you solve this puzzle. It is recommended that you read an online tutorial in Java to find information on the concepts you still do not understand. This list is NOT a spoiler. Players already familiar with general programming concepts may skip this section.

1. The function you are asked to decipher is passed a String object. It manipulates the String, and then returns a new String. Your goal is to learn how this method works, and what it is used for.

2. String.getBytes() returns an array of bytes created from the characters in the String. An array is a simple collection of items stored in a numbered "list". Consider the String str = "This is a String.". A call such as: byte[] aStr = str.getBytes() will return an array that looks as follows:

aStr[0] = 'T'

aStr[1] = 'h'

aStr[2] = 'i'

aStr[3] = 's'

aStr[4] = ' '

aStr[5] = 'i'

aStr[6] = 's'

aStr[7] = ' '

aStr[8] = 'a'

aStr[9] = ' '

aStr[10] = 'S'

aStr[11] = 't'

aStr[12] = 'r'

aStr[13] = 'i'

aStr[14] = 'n'

aStr[15] = 'g'

aStr[16] = '.'

An important thing to note is that the computer does not see aStr[0] as the letter 'T'. It actually sees its ASCII value of 84. The array aStr[] can be accessed by number, or by a variable containing an integer such as aStr[1] or aStr[i] (where i = 1). Both of those will return the ASCII value for the character 'h'. ASCII values are simple integers (int).

3. The "==" is a comparison operator, whereas "=" is an assignment operator. This is an important distinction. The "==" operator test for equality, returning true or false, whereas the "=" assigns the right hand value to the left hand variable. Therefore, "if (i == 5)" will return true or false depending on whether i is equal to 5, while "i = 5" will assign the number 5 to the variable i.

4. The % operator is called the 'modulus' operator. This operator is used to provide the remainder in a division operation. 6 % 4 means "give me the remainder of 6 divided by 4". 6 % 4 would return 2.

5. The increment and decrement operators (++ and --) are used to increase or decrease the value of an integer. If i = 5, then i++ would change the value of i to 6. i-- would change the value to 4. There are two forms of the increment and decrement operators, the post-increment/decrement and the pre-increment/decrement. The post version is denoted by i++, whereas the pre version is denoted by ++i. The difference between the two is that pre increments and decrements occur BEFORE the statement involving the integer is evaluated, whereas the post increments and decrements occur AFTER the statement involving the integer has completed. Therefore, if i = 5, then the statement "if (i++ == 6)" would return false, while the statement "if (++i == 6)" would return true. In both cases, after the statement had completed, i has a value of 6.

6. A 'for' loop causes execution of a program to repeat itself over and over until a certain condition is met. The 'for' loop can have 3 sections, as demonstrated below:

for (int i = 0; i < 10; i++)

The first section, "int i = 0", sets the initial value of i. It is NOT necessary to set the variable i inside the loop. 'i' could have been defined prior to the loop statement. The second statement sets the parameter for how long the loop will execute. In this case, the loop will execute as long as 'i' is less than 10. If 'i' equals 10, the loop will terminate. The third section contains the statement that will be executed after each loop has completed. Remember, however, that variables can be modified anywhere, so the i++ inside the loop definition is not required.

Therefore, the following statement will execute 5 times:

for (int i = 0; i < 5; i++) {
print(i);
}

6. Brackets. "{ }" are used to group lines together. In the above case, everythign inside the brackets will be executed in the for loop. Without the brackets, only one line is executed. Note that a single line may contain many statements, as demonstrated below:

for (int i = 0; i < 5; i++)
if (i == 3)
print ("i equals 3");

In this case, the "if" statement and condition is considered one line, so a brackets is not technically needed, although having one will not cause a problem.

7. Semicolons, ";", denote the end of a statement. While it is generally good practice to have only one statement per line, this is not a requirement.

8. In Java, it is possible to create a new string from an array of bytes (the puzzle does this). Therefore, an array of bytes such as the one described in number 2 could be assigned to a string as follows: String strNewString = new String (aStr), where aStr is an array. After this statement, strNewString contains the familiar "This is a string.".

The above tutorial should get you started on the Java puzzle (if you get that far...). However, I recommend that you read a basic Java tutorial to gain a better understanding of the concepts that you have trouble with. It will be well worth your time. What good is a puzzle if it isn't hard? Besides, if you were a REAL spy, and you were faced with the life and death situation you are facing in J.D.Spy, you would spend as long as it took to learn how to read basic Java code - so consider this a mission civilian.


I'm Stuck!

J.D. Spy contains many different types of challenges. Some, or all, may be difficult to some users and easy for others. Most likely, at some point during the game, you will be stuck. If you find yourself stuck while playing J.D. Spy, remember the following tips:

1. All clues have a logical answer somewhere. NO solutions are random. If you find yourself guessing random number sequences, or trying random solutions, then you haven't found the clue that explains what you need to do. Keep looking.

2. Try searching the internet. Many answers can be found on the internet.

3. Read your e-mails and database journal entries CAREFULLY. Many clues are contained in these items. Take notes if you need to, but become EXTREMELY familiar with the items you have read.

4. Research. Many tasks in J.D. Spy will force you to learn new skills, to become proficient at computer tasks that you have never tried before. You WILL need to learn new skills to complete J.D. Spy. That's part of the challenge. If your life was really in danger, as is the life of the character you are playing, then you would do whatever it took to get the job done, be it go to the library to do research, or spend some time reading a book on programming.

5. The most rewarding solutions are the solutions you come up with yourself.


Crash Starting New Game

Q: When I try to start a new game, I get an Invalid Page Fault in Kernel32 at memory address 0167:70bd17f2, registers CS, SS, and DS all at 016f. The Debug button doesn't seem to work either. And right after I hit Close, everything seems to be normal. Have you heard of this crash before?

A: Never heard of it... but perhaps you might want to try looking at the error message more closely. You might find the cause of the crash... (that's a hint - the ONLY hint you get all game).