Mission Creator Version 1.0 ____________________________________________________________ For help using Mission Creator see the file mCREATORinfo For help understanding the nuances of the Mission Creator command icons see the file CommandGuide.html To learn about the technical details on how SSML and mission scripts work, read on.... To enjoy Starship Creator, it is not required for you to write scripts for original missions by hand. Nor is the information in this file essential to your use of Mission Creator. But if you want to tweak the output of Mission Creator (which is a simple text file), and you're willing to do some programming, this document explains the details. Contents: 1. Starship Mission Language Glossary 2. Mission Script Structure in "SCRIPTINGpt2" 3. Map Tags 4. Overlays 5. Importing Handwritten Missions Created by Imergy(r) for Simon & Schuster Interactive. Copyright 1998,2000 All Rights Reserved. SSML Creator: Laurence Tietz Author & Director for Imergy: Peter Mackey Executive Producer for Simon & Schuster Interactive: Liz Braswell ___________________________________________________________ WRITING YOUR OWN MISSIONS? Knowing that the possibilities in the Star Trek universe are infinite, we wanted to give intrepid aficionados access to the programming language we created for the mission simulator portion of Starship Creator. Using these instructions, and the IMPORT MISSION feature on the FLEET screen, you can expand your library of missions to include many different scenarios. Of course, you will encounter a few limitations to what is possible, but with a bit of imagination and creative writing you should discover many interesting possibilities. As with all programming languages, exact precision is essential. One misplaced comma can cause anything from a temporal anomaly to a frozen interface. Don't worry, you can't "break" anything with a typo, but if your script isn't formatted exactly the way the program expects it to be, the outcome may vary from what you intended. Just follow the rule all software developers use and save any open files before you test-run a new script. We hope this information gives anyone interested in making the effort the power to create their own simulations. If you develop a mission you'd like to share with others (or with us!) please do so. ___________________________________________________________ A few commands introduced with Mission Creator are only documented in the "Command Guide" file. 1. GLOSSARY A StarShip Mission command consists of 2 parts. #symbol, message, The #symbol triggers an event in the simulator. The message for most symbols can be: A simple text "log entry" which will show up on the screen. OR A "message tag" ( example: MSG07 ) which refers to text in a separate "message table", which can contain log entries and-or map tags. OR A hyphen " - " (used like this: #symbol,-, ) which indicates you want no message to accompany the event. For symbols shown below with ,-, you may replace the hyphen with simple text or a MSG code. Although for clarity the hyphens are surrounded by commas, in practice no spaces are used. Certain #symbols require special messages, which contain information needed for the #symbol to be interpreted fully. You cannot attach text messages or tags to those symbols. Where you see pairs of 000 000, a point coordinate is expected, indicating a location in space. (The map is 2000 wide by 1000 high, with 0 0 in the upper left corner. Note this differs from Cartesian space.) The first number is the horizontal coordinate, the second the vertical, separated by a space, with a few exceptions noted below. Also, certain #symbols may be followed by a then/else sequence, explained below. (also see the examples) And, a few #symbols require particular supporting symbols to follow them immediately in the command sequence. All these special cases are indicated below. ___________________________________________________________ --¥¥ Power Generators #impulsePwrOff, - , #impulsePwrOn, - , #warpPwrOff, - , #warpPwrOn, - , --¥¥ Propulsion (you normally don't have to specify these, they are executed within the simulator as part of larger operations) #engageStrucInteField, - , #disengageStrucIntegField, - , #engageNavDeflector, - , #disengageNavDeflector, - , #disengageImpulseEng, - , (disengage engines and disengage StrucIntegField) #engageImpulseEng, - , (engage engines and EngageStrucIntegField and SetCourse) #engageWarpEng, - , [then/else] adjusts warp speed to the strength of the struc integ fld (else, occurs when no SI field is present, or the SI field is too weak for even warp 1) #disengageWarpEng, - , #useMainPwrSupply, - , [then/else] available for certain specialized scripting cases where you want to vary the dialog depending on the ship's power status #useAuxPwrSupply, - , [then/else] available for certain specialized scripting cases where you want to vary the dialog depending on the ship's power status --¥¥ general ship cmds #waitAbit, - , simple delay #ticksLessThan, nn , [then/else] Replace nn with an integer, specifying the number of mission "ticks" elapsed. Time is counted either from the beginning of the mission or from the issuance of the #zeroTicks command. #zeroTicks, - , Resets the internal clock used by the #ticksLessThan command. #hover, - , (disengageImpulseEng and disengageWarpEng) #dock, - , (disengageWarpEng, disengageNavDeflector, lowerShields, a delay, then disengageImpulseEng) #unDock, - , (impulsePwrOn, warpPwrOn, engageImpulseEng, sets velocity) #departArea, - , (engageImpulseEng) #gotoWarp, - , (disengageImpulseEng and engageWarpEng) #plotNewCoords, 0000:0000, #returnStarBase, 0000:0000, similar commands, require a pair of map coordinates in the message portion (notice that unlike all other coordinates, these are separated by a ":" and not a space) #testManeuverability, - , [then/else] ship classes defined as more maneuverable will return positive #testHitTarget , - , use this "-" for this command, don't attach text watches progress of the ship until it reaches the destination usually placed immedaitely after #goToWarp #testHome , - , like #testhittarget but only used after #returnStarBase #classIs, sss , [then/else] Replace sss with the ship i.d. code for a particular class type: OBR CTN SOV MIR DEF EXC INT GAL PRO AKI KLI Useful when scripting for special capabilities of a particular class. #jumpSpace, - , Useful for "hyperdimensional" jumps, getting slammed by a wavefront, and so on. Ignores the ship's engines or any other intrinsic system. EXAMPLE: #plotNewCoords,1800:900, #jumpSpace,Whammo!, #testHitTarget,-, #otherSpeaks,How did we get here?, --¥¥ Command and Control System #UseInternalCommSys, - , [then/else] #UseRFTransciver, - , [then/else] #UseSubSpaceRadio, - , [then/else] #UseUTranslator, - , [then/else] --¥¥ Tactical #raiseShields, - , #lowerShields, - , #cloak, - , [then/else] if installed, activating the Defiant's cloaking device guarantees that #evadeDetection will always be successful #unCloak, - , [then/else] --¥¥ Events #blackHole, - , #asteroid, - , #wearNTear, - , #fireDrill, - , nothing particular happens with these except #asteroid automatically triggers an "insert" animation these are placed in the time and location event overlays where you may attach appropriate messages #waitFor, nn , Replace nn with an integer for the number of time cycles you wish the program to pause. Useful for making the mission easier to track when playing at an accelerated speed. #damageIncident, 00000 aSystem, replace the 00000 with a number from 1 to 50000 indicating damage aSystem must be one of these terms: crew science transportation powerPlant propulsion weapons commandControl structureSystem navigation sickBay supportSystems --¥¥ Science CMDs #longRangeScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #1 to succeed #freqScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #1 to succeed #partSpectraScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #1 to succeed #gravimetrScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #2 to succeed #protspectScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #2 to succeed #lifeFormScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #3 to succeed #subSpaceScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #4 to succeed #opticalScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #5 to succeed #gravitonScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #5 to succeed #gammaScan, 0000 0000, [then/else] replace the 0000s with a point coordinate (see "scan overlays") requires sensor palette #6 to succeed #infraRedScan, 0000 0000, replace the 0000s with a point coordinate (see "scan overlays") [then/else] requires sensor palette #6 to succeed #partclMapScan, 0000 0000, replace the 0000s with a point coordinate (see "scan overlays") [then/else] requires sensor palette #6 to succeed #launchProbe, 0000 0000 aPurpose, [then/else] replace the 0000s with a point coordinate of the target of the probe aPurpose must be one of these: CulturalAnalysis, SampleRecovery, LongTermObservation, SpectralData, EnergyData, GeologicalData, GravimetricData, CommBeacon, MessageProbe, CommBeacon, special case: inside the "then" branch, you can call #getProbeData (The mission waits until the probe reaches its target.) #getProbeData, - , [then/else] only makes sense inside the "then" branch of #launchProbe gives a positive "then" result if the probe was able to read info from the probe data overlay (see explanation of "overlays") To accomplish each task, at least one of these classes of probes must be installed... CulturalAnalysis: Class 7, 8, or 9 SampleRecovery: Class 3, or 5 LongTermObservation: Class 5, or 7 SpectralData: Class 1, 2, or 4 EnergyData: Class 1, 2, or 4 GeologicalData: Class 3 GravimetricData: Class 1, 2, 8, or 9 CommBeacon: Class 6, 8, or 9 MessageProbe: Class 8, or 9 #useLab, aLab, aLab is one of these: Cartography Cybernetics CulturalAnthropology PlanetaryScience Exobiology [then/else] --¥¥Transport #beamAwayTeam, - , #crewComp, 0 0 0 0 0 0, these two commands must go together the 0s are the number of crewmembers being transported, in this order: command engineers civillians scientists support tactical [then/else] #beamCargo, - , #loadData, 1, these two commands must go together loadData is presumed to be tons of cargo (we suggest using 1 for now) [then/else] #engageTractorbeams, - , [then/else] #disengageTractorbeams, - , #launchShuttleCraft, 0000 0000 aType , [then/else] 0000s are a point coordinate of the destination aType must be one of: Defense Impulse Cargo Passengers Warp Thrusters ("Thrusters" is how you use the Sphinx Workpod) (The mission waits until the shuttle reaches its target relative to the ship's current location.) Class of shuttle... Provide these types of service... Shuttlepod Type 15 Defense Impulse Passengers Shuttlepod Type 16 Defense Impulse Passengers Shuttlepod Type 15A Defense Impulse Passengers Cargo Shuttle Type 9A Warp Cargo Sphinx Workpod Type M1 Thrusters Personnel Shuttle Type 6 Warp Passengers Personnel Shuttle Type 7 Warp Passengers Runabout Warp Passengers #useCargoBay, - , [then/else] [then] branch plays when you have a functional cargo bay. --¥¥Crew #testCaptainSkill, - , [then/else] #testChiefEngSkill, - , [then/else] #testFirstOfcrSkill, - , [then/else] #testCommsOfcrSkill, - , [then/else] #testChMedOfcrSkill, - , [then/else] #testScienceOfcrSkill, - , [then/else] #testSecurityOfcrSkill, - , [then/else] #testCounsellorSkill, - , [then/else] #useOfficer, sss , [then/else] Replace sss with one of these codes, specifying a particular command role: cap eng com med sci sec frs cou Unlike the #test___Skill commands, which are ambiguous in the [else] case, this absolutely tells you if the officer is present on the vessel or not. #suddenDeath, sss , Replace sss with one of these codes, specifying a particular command role: cap eng com med sci sec frs cou Causes the immediate removal of whoever is occupying a given position, both from the ship and from the available crew roster. --¥¥ Facilities #useSalon, - , [then/else] #useHoloDeck, - , [then/else] #useLounge, - , [then/else] #useArboretum, - , [then/else] --¥¥ Weapons and Battle #evadeDetection, - , [then/else] returns TRUE on a random basis, but is skewed in favor of TRUE if your Captain (or First Officer if the Captain is dead) has high Charisma and Authority ratings. #engageAlien, - , triggers conflict (see "conflict overlay" explanation) the command sequence doesn't return to the command following this one until the conflict is over __discrete firing events (such as as targets or nonbattle events) #fireAnyTorpedo,-, attempts to automatically issue a #fireTricoTorpedo (Tricobalt) command if your vessel is not so equipped (and only Akira can be), then a #fireQuantumTorpedo command is given instead if your vessel is not so equipped (and only Defiant and Sovereign can be), then a #firePhotonTorpedo command is given instead #firePhotonTorpedo, - , [then/else] #firePhaser, - , [then/else] #fireQuantumTorpedo, - , [then/else] #fireTriCoTorpedo, - , [then/else] NOTE: Also the #fireAnyTorpedo command and the conflict resolution overlays have been adjusted to account for the possible presence of tricobalt torpedoes (only Akira may be so equipped). #hitShields, nn , [then/else] Replace nn with an integer from 1 to 10, 10 being the hardest hit. Allows you to specifically inflict potential damage to the shields, as from an energy field. [then] branch plays if your ship's shields successfully absorbed the hit without damage. [else] branch plays if your ship's shields were too weak, in which case a damage event occurs as well. NOTE: The simulator in this version is more accurately sensitive to the shield strength slider settings you can adjust when installing systems. --¥¥ Messages and Report CMDs __use any of these as a medium to pass log messages and map tags: #getGenMessage, - , #reportStatus, - , (these commands also force a brief delay into the simulation): #captainSpeaks, - , #otherSpeaks, - , #getAwayTeamReport, - , #getMedicalTeamReport, - , --¥¥ Command Flow #setGoals,MSG00, expects the MSG00 tag to look exactly like this: if you have one goal: if you have more than one goal: (This can be any MSG number, not only 00.) #goalXachieved, - , where X is actually the goal number listed in your #setGoals tag, example #goal2achieved, - , #executePhase, - , normally comes at the end of the Initial Phase sequence (the tag REQUIRED to move the command sequence to the next group of commands labelled , the Execute Phase. #closeMission, - , normally comes at the end of the Execute Phase sequence (the tag REQUIRED to move the command sequence to the Closing Phase group of commands labelled #linkMission, aScriptName, ! very Special Case : aScriptName is the field name of a new mission script (not implemented for imported scripts) #die, -, triggers #simOver #simOver, - , triggers halt to the mission simulation causes evaluation of the ship's performance and calculation of any cRedits earned (which are proportional to the total number of goals set vs. achieved) [then/else] where indicated, means the command may be followed by a conditional branching structure. This way, you can cause certain commands to be executed only when a command is successful, and others if it is not. (You may omit the then/else structure, otherwise use the then/else as a pair.) sample format (also see examples): ,-, #thenCmd,0, ,-, ...one or more commands you want executed if a positive result #elseCmd,0, ,-, ...one or more commands you want executed if a negative result replace each 0 with the number of commands in each group (this count must be exact or unexpected command sequences will result) -o- 2. MISSION SCRIPT STRUCTURE To create a script which the program interpreter can understand, you need to arrange the commands described in the Glossary into "tags". A script contains a series of "tags" which start with < and end with > . You tell the script interpreter what kind of tag it is by using an identifier code, which looks like WXYZ= . Here are some examples of the kinds of tags the script interpreter understands: As you can see, each type of tag has a different structure, suited to its purpose. There is also a comment mark // which you can use to insert notes to yourself or other readers of your script but which the interpreter will ignore. (Hint: Do not include the "#" mark inside your comments.) Here is a very basic mission script, with very simple commands, just to help you see the structure. It is full of comments -- those lines starting with // -- to help further explain the sections of the script. Note that the comments are ignored by the program when the file is being read. (For a sample mission script. For a complete version of an importable script and profile, see the "sector8.txt" file in the IMPORT folder inside the ShipMain folder. It has very few comments in it and is thus easier to see the structure.) The indenting and spacing are ignored by the interpreter. //========================================================= // Sample Mission // Launching a Probe //This is the script header tag. _(required)_______________ //After DES you insert your destination and its name. //The rest of this you can leave as it is. //Initial Phase tag_(required)_____________________________ //This is what happens first... //That "executeGoal" command triggers a link to this tag... //Execute Phase tag_(required)______________________________ //That "closeMission" command triggers a link to this tag... //Close Mission tag_(required)_____________________________ // The "message table"_____________________________________ //Notice that simple text messgages with no commas can be put right next to //the commands themselves. Otherwise use this table. > > > > > > > // HQ Alert Dialog list____________________________________ // Use these to trigger "Headquarters Alert" boxes // The following tag must be present in all scripts // Replace the "4" with whatever number of HQ alerts you have defined //Now insert the tags for the various alert boxes // (see the item in "OVERLAYS" for more detail) // Environment Overlays__________________________________________________ // Location event map // Time event map // System failure tag // Scan and Probe Result Overlay_________________________________________ // (most are empty since we are doing no scans in this mission) // Scan types (you must list all of these) // is a long range scan // is a freq (RF) scan // is a Partical Spectrometry scan // is a Gravimetric Scan // is a Proton Spec Scan // is a Life Form Scan // is a Sub-Space Scan // is a Optical Scan // is a Graviton Flux Scan // is a Gamma Radiation Scan // is a InfraRed Scan // is a Particle Map Scan // Probe data overlays for any type of probe look like this... //end //make sure there is a character after the last line of your script All of the tag identifiers you see above are required, the exception being the MSG table. Those MSG's are only required if you refer to such a MSG in the message part of your commands. Other tags, notably Conflict Resolution, are optional, depending on the mission. Read all about Conflict Resolution overlays below. -o- continued in "Scripting Part 2" 3/12/2000