Difference between revisions of "Mission Making Tutorial"

From NexusWiki
Jump to: navigation, search
(Created page with '='''''NEXUS TJI mission-making'''''= As you probably know by now, thanks to Arparso's great tuturial about Nexus's scripting structure, that ev...')
 
 
(7 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
='''''NEXUS TJI mission-making'''''=
 
='''''NEXUS TJI mission-making'''''=
  
As you probably know by now, thanks to Arparso's great tuturial about [[Nexus:TJI_Scripting_Structure|Nexus's scripting structure]], that every mission in this game is divided in MACHINES, STATES, and Rules. But that only deals with one part of the mission, the "body" of it, in a way.
+
As you probably know by now, thanks to Arparso's great tutorial about [[Nexus:TJI_Scripting_Structure|Nexus's scripting structure]], that every mission in this game is divided in MACHINES, STATES, and Rules. But that only deals with one part of the mission, the "body" of it, in a way.
In order to ilustrate this concepts I will be pasteing here a [[Demo_mission|Demo mission]] I've made with this article in mind.
+
In order to illustrate this concepts I will be pasting here a [[Demo_mission|Demo mission]] I've made with this article in mind.
  
 
==''The main parts of the mission''==
 
==''The main parts of the mission''==
Here area a collection of the main parts a mission is divided into
+
Here is a collection of the main parts a mission is divided into
  
  
Line 13: Line 13:
 
Each mission starts, of course, with the basics of the mission: it's identity number, it's name, and where it'll take place (note that you can't change locations in a single mission):
 
Each mission starts, of course, with the basics of the mission: it's identity number, it's name, and where it'll take place (note that you can't change locations in a single mission):
 
<pre>
 
<pre>
NUMBER <num>
+
MISSION <num>
 
name "<the name of the mission>"  
 
name "<the name of the mission>"  
 
DefLocation "<name of the location>"
 
DefLocation "<name of the location>"
 
</pre>
 
</pre>
 
The "name of the location" is a "navpoint" created with the Solar System editor, one you can find in the "universe\systems\" folder.
 
The "name of the location" is a "navpoint" created with the Solar System editor, one you can find in the "universe\systems\" folder.
Unlike the number, the name of the mission doesn't have to be unique, you can put anything in there, even the same title that some other mission, as long as the numbering is not the same (well... that's not enteryle true... if you place a letter istead of a number, the game will treat it as a mission number "0" and it will never give you a conflict, even if you label two or more missions as "NUMBER A").
+
Unlike the number, the name of the mission doesn't have to be unique, you can put anything in there, even the same title that some other mission, as long as the numbering is not the same (well... that's not entirely true... if you place a letter instead of a number, the game will treat it as a mission number "0" and it will never give you a conflict, even if you label two or more missions as "NUMBER A").
 
Following that is a list of the current objective numbers, in this fashion:
 
Following that is a list of the current objective numbers, in this fashion:
 
<pre>
 
<pre>
Line 27: Line 27:
 
END
 
END
 
</pre>
 
</pre>
Finally, as an example, here's the [[Demo_mission#Heading|Demo mission's heading]] (note that everything after "//" and between "/* - */" is interpretated by the game as a comment):
+
Finally, as an example, here's the [[Demo_mission#Heading|Demo mission's heading]] (note that everything after "//" and between "/* - */" is interpreted by the game as a comment):
 
<pre>
 
<pre>
 
MISSION 1  //mission number
 
MISSION 1  //mission number
Line 33: Line 33:
 
DefLocation "NAV_CHAKRIS_IV"  //the location where the mission will take place
 
DefLocation "NAV_CHAKRIS_IV"  //the location where the mission will take place
  
OBJECTIVES //in here we place the number of objectives that will be includid in the mission
+
OBJECTIVES //in here we place the number of objectives that will be included in the mission
 
1
 
1
 
2
 
2
Line 44: Line 44:
 
This is a very special rule, critical to any mission, and that is for the fact that this rule takes place '''before''' the mission starts. In this rule you can do pretty much anything you want, but there are a few things mandatory to do here.
 
This is a very special rule, critical to any mission, and that is for the fact that this rule takes place '''before''' the mission starts. In this rule you can do pretty much anything you want, but there are a few things mandatory to do here.
  
*The radious of the mission, in meters, as defined by the [[SetSceneRadius]](<num>); command.
+
*The radius of the mission, in meters, as defined by the [[SetSceneRadius]](<num>); command.
 
*The setting of the variables associated to each of the ships that will appear on the mission (though critical for most missions, it's not mandatory), defined by the command <name of the variable> := [[GetSceneObj]]("<name of the ship>");
 
*The setting of the variables associated to each of the ships that will appear on the mission (though critical for most missions, it's not mandatory), defined by the command <name of the variable> := [[GetSceneObj]]("<name of the ship>");
  
This rule is special also because it's the first link to any of the Machines you've written for this mission, in here you call the Machines (or Machines) you want your mission to start with.
+
This rule is special also because it's the first link to any of the Machines you've written for this mission, in here you call the Machine (or Machines) you want your mission to start with.
 
Unlike any other Rule, this one doesn't go inside a State, it only goes beneath the "RULES" block, as all the Machines in your mission do.
 
Unlike any other Rule, this one doesn't go inside a State, it only goes beneath the "RULES" block, as all the Machines in your mission do.
 
Here's the [[Demo_mission#SceneInit|SceneInit]] rule of the [[Demo_mission|Demo mission]], as well as the start of the "RULES" block:
 
Here's the [[Demo_mission#SceneInit|SceneInit]] rule of the [[Demo_mission|Demo mission]], as well as the start of the "RULES" block:
Line 97: Line 97:
 
===The body of the mission===
 
===The body of the mission===
 
---
 
---
The sintax of this part has already been brilliantly explainied by Arparso in his [[Nexus:TJI_Scripting_Structure|Tutorial]], so I will only offer some advices here. Always use different states when there's a remarkable change in the mission (arrival of ships, discovery of stuff, etc), and try to keep your mission as tidy as possible. Machines can run simultaneosly, so having a lot of them is never a good idea. Try to divide them into clear, diferencied tasks (one of the AI, one or two for the actual mission, etc).
+
The sintax of this part has already been brilliantly explained by Arparso in his [[Nexus:TJI_Scripting_Structure|Tutorial]], so I will only offer some advices here. Always use different states when there's a remarkable change in the mission (arrival of ships, discovery of stuff, etc), and try to keep your mission as tidy as possible. Machines can run simultaneously, so having a lot of them is never a good idea. Try to divide them into clear, differenced tasks (one of the AI, one or two for the actual mission, etc).
 
So, here's the body of the [[Demo_mission|Demo mission]]: [[Demo_mission#body|body]]  
 
So, here's the body of the [[Demo_mission|Demo mission]]: [[Demo_mission#body|body]]  
Also, don't forget that once you've finished with all your machines, included all the files that you wanted to include (to include a file you have to do this: "#include "<name of the file" ", and it would be like you wrote the content of that file in the mission file, so keep a close watch on the mission sintaxis of included files!) you have to '''END''' the mission. Just add a finall ''END'' on the bottom, after the last included file and just above the ''ENTITIES'' section.
+
Also, don't forget that once you've finished with all your machines, included all the files that you wanted to include (to include a file you have to do this: "#include "<name of the file" ", and it would be like you wrote the content of that file in the mission file, so keep a close watch on the mission syntax when including files!) you have to '''END''' the mission. Just add a final ''END'' on the bottom, after the last included file and just above the ''ENTITIES'' section.
  
 
===The ''ENTITIES'' section===
 
===The ''ENTITIES'' section===
Line 226: Line 226:
 
==''Auxiliary parts of a mission''==
 
==''Auxiliary parts of a mission''==
 
---
 
---
I'll now move to explain two other files linked to every mission. Although they're not critical to a mission, they're adviced to be included, as they're the files that contain the dialogs and objectives.
+
I'll now move to explain two other files linked to every mission. Although they're not critical to a mission, they're advised to be included, as they're the files that contain the dialogs and objectives.
  
 
===Dialogs===
 
===Dialogs===
 
---
 
---
 
The dialogs of each mission go into a file (any file, as long as it is a .ini file. Moreover, two or more mission's dialogs could go into one or more files, although that's not encouraged. Best to keep things nice and tidy) in the \universe\texts\dialogs\ folder.
 
The dialogs of each mission go into a file (any file, as long as it is a .ini file. Moreover, two or more mission's dialogs could go into one or more files, although that's not encouraged. Best to keep things nice and tidy) in the \universe\texts\dialogs\ folder.
The dialog syntaxis is as follows:
+
The dialog syntax is as follows:
 
<pre>
 
<pre>
 
Dialog
 
Dialog
Line 248: Line 248:
 
text
 
text
 
{
 
{
<language (0 for english, 2 for spanish, 1 for hungarian...)> "<content>"
+
<language (0 for English, 2 for Spanish, 1 for Hungarian...)> "<content>"
 
}
 
}
 
</pre>
 
</pre>
Line 254: Line 254:
  
  
in case of being this a dialog with a choice system built-in, a few thigs are added:
+
in case of being this a dialog with a choice system built-in, a few things are added:
  
*ChooseTime <num in seconds> the ammount of time the dialog stays on the air by itself
+
*ChooseTime <num in seconds> the amount of time the dialog stays on the air by itself
  
 
and the text build will look something like this:
 
and the text build will look something like this:
Line 285: Line 285:
  
 
{
 
{
<language1> "<choice in language 1>"
+
<language1> "<n� choice in language 1>"
 
<language2> "<in language 2>"
 
<language2> "<in language 2>"
  
Line 304: Line 304:
 
text
 
text
 
{
 
{
             0 "They aren't respondind sir, and they are charging weapons. What do we do sir? Fight or flee?"
+
             0 "They aren't responding sir, and they are charging weapons. What do we do sir? Fight or flee?"
 
}
 
}
 
         options
 
         options
Line 320: Line 320:
 
END
 
END
 
</pre>
 
</pre>
 
===Objectives===
 
---
 
The Objectives of a mission go into any file (in pretty much the same way that the dialogs) in the \universe\texts\mod_texts\ or in the \universe\texts\texts\ folders. Each dialog is linked to a mission with the mission's number, in this fashion:
 
<pre>
 
TEXT "objective_<num of mission>_<numv of objective>"
 
<language> "<text in that language>"
 
END
 
</pre>
 
And that's pretty much it. The [[Demo_mission|Demo Mission's]] objectives are located [[Demo_mission#Objectives|here]]
 

Latest revision as of 22:09, 15 August 2012

NEXUS TJI mission-making

As you probably know by now, thanks to Arparso's great tutorial about Nexus's scripting structure, that every mission in this game is divided in MACHINES, STATES, and Rules. But that only deals with one part of the mission, the "body" of it, in a way. In order to illustrate this concepts I will be pasting here a Demo mission I've made with this article in mind.

The main parts of the mission

Here is a collection of the main parts a mission is divided into


The heading


Each mission starts, of course, with the basics of the mission: it's identity number, it's name, and where it'll take place (note that you can't change locations in a single mission):

MISSION <num>
name "<the name of the mission>" 
DefLocation "<name of the location>"

The "name of the location" is a "navpoint" created with the Solar System editor, one you can find in the "universe\systems\" folder. Unlike the number, the name of the mission doesn't have to be unique, you can put anything in there, even the same title that some other mission, as long as the numbering is not the same (well... that's not entirely true... if you place a letter instead of a number, the game will treat it as a mission number "0" and it will never give you a conflict, even if you label two or more missions as "NUMBER A"). Following that is a list of the current objective numbers, in this fashion:

OBJECTIVE
	1
	2
	...
END

Finally, as an example, here's the Demo mission's heading (note that everything after "//" and between "/* - */" is interpreted by the game as a comment):

MISSION 1  //mission number
Name "Demo Mission" //name of the mission
DefLocation "NAV_CHAKRIS_IV"  //the location where the mission will take place

OBJECTIVES //in here we place the number of objectives that will be included in the mission
	1
	2
	3
END

The SceneInit Rule


This is a very special rule, critical to any mission, and that is for the fact that this rule takes place before the mission starts. In this rule you can do pretty much anything you want, but there are a few things mandatory to do here.

  • The radius of the mission, in meters, as defined by the SetSceneRadius(<num>); command.
  • The setting of the variables associated to each of the ships that will appear on the mission (though critical for most missions, it's not mandatory), defined by the command <name of the variable> := GetSceneObj("<name of the ship>");

This rule is special also because it's the first link to any of the Machines you've written for this mission, in here you call the Machine (or Machines) you want your mission to start with. Unlike any other Rule, this one doesn't go inside a State, it only goes beneath the "RULES" block, as all the Machines in your mission do. Here's the SceneInit rule of the Demo mission, as well as the start of the "RULES" block:

RULES

	RULE 	event sceneInit
			:action
				SetSceneRadius(100000);	//this is, as the name suggests it, the radious in meters of the scene.
		
				GuiSelect(0);   //this is required to start a cinematic scene
		
				SetRelation(#race_player, #race_spacetech, 2);
				SetRelation(#race_player, #race_gorg, 2);
				SetRelation(#race_gorg, #race_player, 2);
				SetRelation(#race_spacetech, #race_player, 2);
				SetRelation(#race_player, #race_Human_E, 1);  //the relations between the races that will appear in 
                                                                              //the game. the "race_player" is the playable race, 
				                                              //and the number mean what sort of relationship they 
                                                                              //share with other races, more info on that is 
									      //located on the modding manual
				
				sp := GetSceneObj("Mayflower");
				bs := GetSceneObj("Hawkeye");   //in here we define the "Scene Objects", the ships and other
                                                                //interactive obects

				drone := GetSceneObj("Nightingale");
				
				gorg1 := GetSceneObj("Feral");
				gorg2 := GetSceneObj("Darkclaw");
				
				Disappear(drone);
				Disappear(gorg1);
				Disappear(gorg2); //we disappear the ships that are bound to appear via ip drive
				
				Playmusic(1);          //in here we set the number of the music track (as defined in the
                                                       //mod_sound.ini file, in the universe\engine\ folder
				
				GetMachine("Director"):ChangeState(IntroMovie, 0);
				GetMachine("Objectives"):ChangeState(monitor,0);    // with these commands we "call" the machines 
                                                                                    //that would define the game, and their given
                                                                                    // state
				
				FadeScreen(1, 0, 0);                       //we "fade" the screen, make it black
			:end
	END

The body of the mission

--- The sintax of this part has already been brilliantly explained by Arparso in his Tutorial, so I will only offer some advices here. Always use different states when there's a remarkable change in the mission (arrival of ships, discovery of stuff, etc), and try to keep your mission as tidy as possible. Machines can run simultaneously, so having a lot of them is never a good idea. Try to divide them into clear, differenced tasks (one of the AI, one or two for the actual mission, etc). So, here's the body of the Demo mission: body Also, don't forget that once you've finished with all your machines, included all the files that you wanted to include (to include a file you have to do this: "#include "<name of the file" ", and it would be like you wrote the content of that file in the mission file, so keep a close watch on the mission syntax when including files!) you have to END the mission. Just add a final END on the bottom, after the last included file and just above the ENTITIES section.

The ENTITIES section

--- Here's defined the settings of each of the mission's ships, like name, class, race, location, heading, etc, in this fashion:

SHIP
	<content>
END

Whereas the content may be:

  • Name "<name of the ship>"
  • Race #<race of the ship>
  • ShipType #<ship type of the ship, as defined in the SHIPTYPE part of the tacticstypes.ini>

or

  • Class #<class of the ship, as defined in the SHIPCLASS part of the tacticstypes.ini>
  • Position <x y z coordinates of the ship>
  • Orientation <pitch heading and bank of the ship>
  • Devices #<dev 1> #<dev 2> ... #<dev n> ; Note that this is optional, every device you place here will be added to the ship, so BE CAREFUL with it.

You may also add NPC's here to the mission's ships:

NPC
	<content>
END

with the content being:

  • Name "<name>"
  • ID <num> The id is the way to link this NPC to each dialog
  • Face <num> If this line is not provided, then the game will use the ID number as face number
  • Rank <num 1-10>
  • Medals #<medal 1> ... #<medal n> ;
  • CrewLevel <num> The level of the crew
  • Skill 1 <num> The skill of this npc in the Military area
  • Skill 2 <num> idem but in the engineering area
  • Skill 3 <num> idem but in the scientific area
  • XP <num> The experience of this npc.

That pretty much covers it. Here's Demo mission's ENTITIES area:

ENTITIES

	SHIP
		Name "Hawkeye"
		Race #race_Player
		ShipType #styp_ep6_Siege_Battleship
		Position -1000 838 -8966
		Orientation 0 0 0

		NPC
			Name "Johan Mastropiero"

			ID 1
			Face 20
			Rank 3
			Medals ;
			CrewLevel 1
			Skill 1 0
			Skill 2 0
			Skill 3 0
			XP 0
		END
	END

	SHIP
		Name "Nightingale"
		Race #race_SpaceTech
		ShipType #styp_Frigate
		Position 2441.14 -8877.7 2618.99
		Orientation 180 0 0
	END

	SHIP
		Name "Mayflower"
		Race #race_Human_E
		ShipType #styp_Supportship
		Position -12843.8 -1399.87 -5833.99
		Orientation 0 0 0

		NPC
			Name "James Carson"

			ID 2
			Face 26
			Rank 2
			Medals ;
			CrewLevel 1
			Skill 1 0
			Skill 2 0
			Skill 3 0
			XP 0
		END
	END

	SHIP
		Name "Feral"
		TechCat 31 20
		TechPointsScanned 0
		Race #race_Gorg
		ShipType #styp_ep6_gorg_escortcruiser
		Position -5890.52 -22.7949 7108.39
		Orientation -92.7069 -36.0036 47.6695
	END

	SHIP
		Name "Darkclaw"
		TechCat 31 30
		TechPointsScanned 0
		Race #race_Gorg
		ShipType #styp_ep3_gorg_heavy_battleship
		Position -5892.08 769.904 6509.39
		Orientation -92.7069 -36.0036 47.6695
	END

END

Auxiliary parts of a mission

--- I'll now move to explain two other files linked to every mission. Although they're not critical to a mission, they're advised to be included, as they're the files that contain the dialogs and objectives.

Dialogs

--- The dialogs of each mission go into a file (any file, as long as it is a .ini file. Moreover, two or more mission's dialogs could go into one or more files, although that's not encouraged. Best to keep things nice and tidy) in the \universe\texts\dialogs\ folder. The dialog syntax is as follows:

Dialog
	<content>
END 

with the content being:

  • name <identifier number of the dialog, the one that links the dialog to the mission>
  • Layout <where it's located on the screen, see the manual>
  • NPC <id number of the npc saying this>
  • distort <num ranging from -1 to 3> it's the level of interference in a dialog (with -1 being none whatsoever)
  • ExpireEvent <event to occur when the dialog ends (in the same state where the dialog was called, of course)>

Here is the text build of each dialog:

	
	text
	{
				<language (0 for English, 2 for Spanish, 1 for Hungarian...)> "<content>"
	}

Here are the dialogs corresponding to the Demo mission: Dialogs


in case of being this a dialog with a choice system built-in, a few things are added:

  • ChooseTime <num in seconds> the amount of time the dialog stays on the air by itself

and the text build will look something like this:

	text
	{
		<language1> "<text in language 1>"
		<language2> "<in language 2>"
		.........
	}
	options
		{
			<language1> "<1° choice in language 1>"
			<language2> "<in language 2>"

			.........	
		}
		<event generated by choice 1>
		{
			<language1> "<2° choice in language 1>"
			<language2> "<in language 2>"

			.........
		}
		<event generated by choice 2>

		............

		{
			<language1> "<n� choice in language 1>"
			<language2> "<in language 2>"

			.........
		}
		<event generated by choice n>
	END

unfortunately, there aren't any dialogs with such choices in the Demo mission, but I can provid you with an example, taken from my mission "Consequences" available in the Stargate Mod: War Begins PB4, 5, 6 and 7 (at the time this article was written):

DIALOG
	name dialog_consequences_c2_4
	Layout 6
	ExpireEvent TimerFail
	NPC 9
	distort -1
	text
	{
            	0 "They aren't responding sir, and they are charging weapons. What do we do sir? Fight or flee?"
	}
        options
      {
         0 "We fight. All hands to battle stations!" 
      }
      Fight

      {
         0 "We came here to fight the replicators, no the Lucians. Major, get us out of here."
      }
      Flee

     END  //we end the choices
END