Difference between revisions of "Max:Getting Started"

Line 1: Line 1:
{{Tutorial|Basics}}
+
{{Tutorial|Getting Started}}
[[File:MBasics13.jpg|thumb|right|What you are going to make. (I used the fog from Relto)]]
+
If you have never used the 3ds Max Plugin for Plasma, this tutorial will get you started by taking you through all the steps needed to build an Age.
What you will need:
+
*Knowledge on how to use 3ds max
+
*The Plasma Plugin, installed and ready to use
+
What you will learn:
+
*Creating an .age file
+
*Creating an .fni file
+
*How to use the Component Manager
+
*Using the following Components:
+
**Page Info
+
**Starting Point
+
**Terrain
+
**No Show
+
**Ignore
+
*Export and finalizing an age
+
  
==Adjusting your Plugin==
+
== Prerequisites ==
The following steps are not necessary, but I recommend it because it might speed up your workflow.
+
This tutorial (like all subsequent tutorials) assumes that you have successfully installed the Max Plugin and that you are familiar with 3ds Max modelling, animation and so on.
#Go to [[Media:MBasics00.jpg| Customize->Customize User Interface...]]
+
#In the [[Media:MBasics01.jpg| "Keyboard" tab]] under Group select "Plasma" from the dropdown-box
+
#Select "Component Manager" from the list below and assign "C" as Hotkey
+
#Do the same with "Plasma Export..." but this time assign "X" as Hotkey
+
  
==Creating your .age file==
+
=== Tutorials ===
Go to your output folder and create a new .txt file. Open it with an editor and write the following text into it:
+
You will need to have read and understood the following tutorials:
 +
* [[Max:Installing]]
 +
 
 +
== Preparing ==
 +
Before you begin the actual creation process, you'll need to configure a few things and prepare various details.
 +
 
 +
''Note:'' the first section is entirely optional, but recommended for ease of use and practicality.
 +
 
 +
=== Setting Up Your Workspace ===
 +
Assigning a few hotkeys to your workspace can help improve your efficiency when creating and publishing Ages. This will help you set up two keyboard shortcuts for commonly used commands.
 +
# Go to [[Media:MBasics00.jpg|Customize->Customize User Interface...]] and select "Plasma" from the drop-down box in the [[Media:MBasics01.jpg|"Keyboard" tab]].
 +
# '''Component Manager''': select "Component Manager" and assign "C" as a hotkey.
 +
# '''Plasma Export...''': select "Plasma Export..." and assign "X" as a hotkey.
 +
Get used to these hotkeys, or be prepared to click on a lot of menus.
 +
 
 +
=== Creating Your Age's Files ===
 +
There are two types of files you will need for your Age to function: <code>.age</code> files and <code>.fni</code> files (''note:'' the latter are optional if you are not publishing for MO:UL).
 +
 
 +
==== <code>.age</code> Files ====
 +
Navigate to your output folder and create a new <code>.txt</code> file. Open it with an editor and write the following text into it:
 
  StartDateTime=0000000000
 
  StartDateTime=0000000000
 
  DayLength=24.000000
 
  DayLength=24.000000
Line 32: Line 33:
 
  ReleaseVersion=0
 
  ReleaseVersion=0
 
  Page=mainroom,1
 
  Page=mainroom,1
'''StartDateTime''' is the unix time of the date the Age starts counting its days. For now you can leave it at 0000000000, but you'll have to change it if you want to make Global Animations.
+
 
 +
'''StartDateTime''' is the UNIX time of the date the Age starts counting its days. For now you can leave it at 0000000000, but you'll have to change it if you want to make Global Animations.
  
 
'''DayLength''' is the length of a day in hours. For now you can leave it at 24 hours, but maybe you have to change it if you want to make Global Animations.
 
'''DayLength''' is the length of a day in hours. For now you can leave it at 24 hours, but maybe you have to change it if you want to make Global Animations.
  
'''MaxCapacity''' is the maximum amount of players who may enter this age at the same time.
+
'''MaxCapacity''' is the maximum amount of players who may enter this Age at the same time.
  
'''LingerTime''' is optional. It defines the time in seconds until the game server (only MOULa) will shut down if the age is empty.
+
'''LingerTime''' is optional. It defines the time in seconds until the game server (only in MO:UL) will shut down if the Age is empty.
  
'''SequencePrefix''' is a very important option. It is a unique number for your age. Every age in Uru needs it's own ID. If you want to create an age for TPOTS you can register a prefix in the [[TPOTS Sequence Prefixes]]-list.
+
'''SequencePrefix''' is a very important option. It is a unique number for your Age. Every Age in Uru needs its own ID. If you want to create an Age for TPOTS you can register a prefix in the [[TPOTS Sequence Prefixes]] list, which will reserve that ID for you. Numbers 1 through 100 are reserved for use by Cyan.
  
 
'''ReleaseVersion''' is not really important. You can leave it at 0 and don't need to change it.
 
'''ReleaseVersion''' is not really important. You can leave it at 0 and don't need to change it.
  
'''Page''' is the most important thing. Every age file also has prp files. These prp files are defined by this option. In Max you can choose to which page the objects should be exported. You can also make more than one page, you only have to change the IDs behind the pagename, like this:
+
'''Page''' is the most important option. Every Age file also has PRP files. These PRP files are defined by this option. In Max you can choose to which page the objects should be exported. You can also make more than one page: in this case, you only have to change the IDs behind the pagename, as follows:
 
  Page=mainroom,1
 
  Page=mainroom,1
 
  Page=caves,2
 
  Page=caves,2
Line 50: Line 52:
 
  ...
 
  ...
  
If you are done save and close the file. Then rename it to YourAge.age, with "YourAge" as the name of your age. Be careful that it is not called YourAge.age.txt!!!
+
If you are done, save the file as <code>YourAge.age</code> and close the file, where "YourAge" is the name of your Age. It '''has''' to have the <code>.age</code> suffix, and not a <code>.txt</code> suffix.
  
==Creating your .fni file==
+
==== <code>.ini</code> Files ====
If you are creating an age for TPOTS it is not necessary to create an fni file. It is created automatically when you convert your age using Drizzle, but if you want to have fog in your age, you'll have to edit the file after converting your age. If you are writing an age for MOULa you '''MUST''' create the file. If your age does not have it, it will use the settings from your last visited age.
+
This section is useful only if you will be publishing your Age to MO:UL, since Drizzle automatically creates the appropriate file for TPOTS. If you do not intend to publish your Age to MO:UL, you can skip this section. If you do intend to do so and have not created a file, your Age will use the settings from the previously visited Age, which is probably not what you want.
  
Now create a new .txt file and write the following into it:
+
''Note:'' if you want to add fog to your TPOTS Age, you will have to manually edit the automatically generated file.
 +
 
 +
Navigate once more to your Age output folder and create a new <code>.txt</code> file. Write the following into it:
 
  Graphics.Renderer.SetYon 100000
 
  Graphics.Renderer.SetYon 100000
 
  Graphics.Renderer.Fog.SetDefLinear 0 0 0
 
  Graphics.Renderer.Fog.SetDefLinear 0 0 0
 
  Graphics.Renderer.Fog.SetDefColor 0 0 0
 
  Graphics.Renderer.Fog.SetDefColor 0 0 0
 
  Graphics.Renderer.SetClearColor 0 0 0
 
  Graphics.Renderer.SetClearColor 0 0 0
'''SetYon''' is the maximum distance in feet how far you can see in your age. Everything behind this distance looks like a wall with a predefined color.
+
'''SetYon''' is the maximum distance (in feet) you can see in your Age. Everything beyond this distance looks like a wall with a predefined color.
  
'''SetDef...''' defines how dense your fog will look. There are the following possibilities:
+
'''''SetDef...''''' defines how dense your fog will look. There are the following possibilities:
*''SetDefLinear 0 0 0'' means that the density of your fog is raising linear. The fist value is the start distance in feet (-10000 to 1000000), the second value is the end distance in feet (-10000 to 1000000) and the third value is the maximum density of the fog (0 to 1).
+
:'''SetDefLinear 0 0 0''' means that the density of your fog will be rising in a linear fashion. The first value is the start distance in feet (-10000 to 1000000), the second value is the end distance in feet (-10000 to 1000000) and the third value is the maximum density of the fog (0 to 1).
*''SetDefEXP 0 0'' means that the density is raising exponential. The first value is the end distance in feet (-10000 to 1000000) and the second value the maximum density (0 to 1).
+
:'''SetDefEXP 0 0''' means that the density will be rising exponentially. The first value is the end distance in feet (-10000 to 1000000) and the second value is the maximum density (0 to 1).
*''SetDefEXP2 0 0'' is another exponential function similar to SetDefEXP.
+
:'''SetDefEXP2 0 0''' is another exponential function similar to SetDefEXP.
 
The fog behind the end distance will have the maximum density you defined.
 
The fog behind the end distance will have the maximum density you defined.
  
'''SetDefColor''' is the color of your fog. It needs an RGB value from 0 to 1.
+
'''SetDefColor''' is the color of your fog. It needs three RGB values ranging from 0 to 1.
 
+
'''SetClearColor''' is the color you see if there is nothing to see (for example if you don't have a sky you will see this color instead). This is also the color you see behind the distance you defined by SetYon. It needs and RGB value from 0 to 1. It is best to set it the same color as the fog.
+
 
+
Now you have to save and close your file and name it YourAge.fni, with "YourAge" as the name of your age. Be careful that it is not called YourAge.fni.txt!!!
+
If you created this file for MOULa, you will have to encrypt it, for example by using the libHSPlasma Tools.
+
 
+
Finally, you are ready to start working in Max.
+
==Working in Max==
+
First [[Media:MBasics02.jpg| create]] a plane and two boxes.
+
 
+
Set the size of the plane to 500x500, one box to 1x1x1 and the second box to 1x1x6. The plane will be your ground where you can walk. The small box will be your spawnpoint and the greater box is a reference on how big your Avatar is. It's also very important to use appropriate objects names, so you can easily find your objects again. I called the plane oGround, where "o" stands for object. The boxes I called dSpawn and dAvatar, where "d" stands for dummy.
+
 
+
Now move your Spawnpoint to the location where you want your avatar to spawn. Please note, that your spawnpoint sould be a little bit (0,01 to 0,1 feet) above the ground, so your avatar cannot fall through it.
+
 
+
We also want to have light in our age. There are basically two kinds of light:
+
*'''Standard and Photometric''' lights are not exported by the plugin but the effect on your static objects will be exported.
+
*'''Plasma Run Time''' lights are plasma lights. They are exported and used to light moving objects like your avatar or animated objects. Run Time Lights need a lot of resources and only the nearest 8 lights are rendered. So, do not use too many of them.
+
Goto the light tab and select a Standard or Photometric light. Place it in the scene, so that all is lit up (I recommend "Omni"-lights or an "IES Sun"). Now select a Plasma Run Time Light, I used the RT Directional, and place it above your scene, so that the arrows can reach the whole world (maybe you have to scale it or play with the values in the modifier tab).
+
===The "Page Info" Component===
+
Now open up your Component Manager (I bound it to "C"). If you go to new, you will see, that there are many components, but for now we are only using a few of them. First of all, you need a "Page Info"-component. So go to [[Media:MBasics03.jpg| New->Misc->Page Info]]. Now rename it (right click on the component) to something useful. I recommend to also give it a prefix because if you have many objects and components it may happen that an object and a component share the same name, but Plasma does not like that and gives you an error when you want to export. So all my objects have an "o", all my dummys have a "d" and my Page Info is called "pgInfo_mainroom". But for what do we need this component? '''Every''' object in an age must have this component (except Max Standard Lights).
+
 
+
Select all your objects and [[Media:MBasics04.jpg| attach]] the Page Info to them.
+
 
+
Now go to your utilities tab. If you don't have the "Component Util" tab yet, select "Configure Button Sets" and search it in the list. Then drag it onto a button.
+
 
+
When you now select your Component Util you should have the Page Info in there. If you select an object, all the components attached to it are listed in the component util. So, select your Page Info and take a look into it:
+
 
+
[[File:MBasics05.jpg]]
+
 
+
'''Age''' is where you have to select your age.
+
 
+
'''Page''' is where you have to select into which prp the objects shall be exported.
+
 
+
'''Itinerant''' is not interesting and should not be used. I don't know what it does.
+
 
+
Select your age and your page.
+
===Creating a collision===
+
Next, we want to have a collision for our ground, so in your Component Manager go to [[Media:MBasics06.jpg| New->Physics->Terrain]] and attach it to your ground plane. Rename it to something useful. I use "p" as the prefix.
+
 
+
Goto your Component Util and select the Terrain component. This component is used for every object which should have a static collision. Let's have a look:
+
 
+
[[File:MBasics07.jpg]]
+
 
+
'''Physical Properties''' is very self-explanatory. The values are from 0 to 1.
+
 
+
'''Bounding Shape''' is how your collision looks like.
+
*''Sphere'' is a spherical collision around your object. It cannot be used with any object.
+
*''Box'' is a collision with the shape of the bounding box of your object.
+
*''Hull'' uses the hull of your object as collision but does not include holes or similar things, so you cannot go through a door in a wall if you use hull. Hull also doesn't work with planes.
+
*''Exact'' uses the object itself as collision. It is the most precise type but can also cause a lag if you use it to often or on dynamic objects.
+
*''Use Alternate Shape?:'' If you check this, you can pick another object as the collision for your object, e.g. if you have a very complicated tree the collision would kill your computer. But you can make a cylinder around the tree and use it as the collision.
+
**''Align Alternate Shape?:'' If you check this, the engine aligns your new collision like your mainobject.
+
We will use box for our object because we are using a simple plane.
+
===Creating the Spawnpoint and hiding objects===
+
Now, we have an age with a collision but we want to enter this age. To do this, we need a Spawnpoint.
+
 
+
Select your small box, open your Component Manager and go to [[Media:MBasics08.jpg| New->Type->Starting Point]]. Rename it to something useful (I use "start_" as prefix) and assign it to your box.
+
 
+
In your Component Util, you can see that there is nothing to do but if you export your age and enter it, you will see that you can see your spawnpoint and your Avatar reference. So, we are going to hide them.
+
  
First, go to [[Media:MBasics09.jpg| New->Ignore->NoShow]] and assign it to your Spawnpoint, then goto New->Ignore->Ignore and assign it to your Avatar reference. Let's take a look at them:
+
'''SetClearColor''' is the color you will see if there is nothing to see (for example if you don't have a sky you will see this color instead). This is also the color you will see behind the distance you defined by SetYon. It needs three RGB values ranging from 0 to 1. It is best to set it to the same color as the fog.
  
[[File:MBasics10.jpg]]
+
If you are done, save the file as <code>YourAge.fni</code> and close the file, where "YourAge" is the name of your Age. It has to have the <code>.fni</code> suffix, and not a <code>.txt</code> suffix. If you are publishing this file for MO:UL, it will have to be encrypted with your preferred tool (such as the libHSPlasma tool, PlasmaCrypt).
  
'''Disable Only ...:''' If you check this, you can make the object visible through python or a responder.
+
== Navigating the Interface ==
 +
[[File:Max2.jpg|right|160px|thumb|The new "Plasma" menu item.]]Installing the 3ds Max Plasma Plugin will add a new top menu item in Max called "Plasma". Of all the items in the menu, the following can safely be ignored:
 +
* '''SceneViewer...''': this option is defunct and does not work, being the result of "A bad dream" as Chogon put it on the MOUL forums.
 +
* '''Age Description Manager''': this manager was useful only inside Cyan's offices; it does not work now, since it attempts to communicate with an internal server that can't be reached to determine whether the new Age conflicts with another, existing Age.
 +
The most important tool available in this menu is the [[Media:Max3.jpg|Component Manager]] (available under "Component Manager..."). It makes it significantly easier to add objects to an Age, relying on a graphical way instead of a scripted way (using [[AlcScript]]). All the objects you can add to your Age are available under the [[Media:Max4.jpg|New]] option in the menu.
  
'''Affect'''
+
For every object you add to your Age, you'll need to follow these steps:
*''Drawable'' makes that you can't see the object.
+
# [[Media:Getstart1.jpg|Select your object]].
*''Physicals'' makes that also the collision of the object is disabled.
+
# Open the Component Manager.
You can leave the settings as they are by default.
+
# Navigate to [[Media:Getstart4.jpg|New->Misc->PageInfo]] and click on it. This will create what looks like a [[Media:Getstart5.jpg|directory tree structure]].
 +
# Click on "PageInfo01" (or whatever you called it, or a different page, if the object goes in a different PRP file) to highlight it and then click on "[[Media:Getstart6.jpg|Attach to Select Object(s)]]". You can of course do this by batch, selecting multiple objects at once to attach the PageInfo to.
 +
# Go to the [[Media:Getstart7.jpg|Utilities tab]].
 +
# Click on the "More" button. You will get a [[Media:Getstart8.jpg|pop-up box]].
 +
# In that pop-up box, double-click where it says "Component Util". You will see [[Media:Getstart10.jpg|this area]] in the right hand tool box show up. As you can see, you now have a dropdown menu box that shows your Age's name and the Main Room. You can use these to select whether or not the select object goes on a different Page for the Age and what Age it will go in.
 +
Your objects will now get exported into your PRP file for that Age. Remember to do this each time you add an object to your Age.
  
[[File:MBasics11.jpg]]
+
== Creating An Age ==
 +
[[File:MBasics13.jpg|left|thumb|200px|The Age you will be creating.]]This tutorial will help you learn all the basics for creating an Age under 3ds Max, including:
 +
* Using the Component Manager,
 +
* Using Page Info,
 +
* Creating a Starting Point,
 +
* Adding a Terrain,
 +
* Setting the "No Show" property,
 +
* Using "Ignore",
 +
* Exporting an Age.
 +
Your Age will be rather basic, consisting only of a plain ol' plane to which your avatar shall spawn, as can be seen on the screenshot to the left.
  
'''Ignore''' if you check this, your object will not be exported.
+
You are advised to follow some common naming conventions for your components; the following prefixes shall be employed:
 +
* '''o'''''YourComponent'' for an object,
 +
* '''d'''''YourComponent'' for dummys,
 +
* '''pgInfo'''''YourComponent'' for your Page Info.
 +
These naming conventions will be used throughout this tutorial.
  
We don't need the Avatar reference in the game, so, we can ignore it.
+
=== Objects and Lights ===
 +
You are now ready to create your first Age with Max.
 +
# Create a plane called '''oGround''' with a size set to 500x500. This will be the ground on which the avatars will walk.
 +
# Create two boxes, one with a size of 1x1x1 called '''dSpawn''' and the other 1x1x6 called '''dAvatar'''. The latter will be a reference as to the size of the avatar and the former will be your avatar's spawn point.
 +
# Move your spawn point box to the place where you'll want the avatar to spawn. You should position it slightly above your ground so your avatar cannot fall through it (0,01 feet to 0,1 feet).
 +
# You would be well advised to add lighting to your Age. You basically have two kinds of lights:
 +
#* '''Standard and Photometric''': these lights are not exported by the plugin; however, the effect they have on your objects will be,
 +
#* '''Plasma Run Time''': these lights are made for Plasma. They will be exported and are used for moving objects (like your avatar) or animated objects. Run Time lights require a lot of resources, and only the nearest eight are rendered at a given time; use them wisely.
 +
# Select the "Standard or Photometric Light" under the Light tab. Place it in your scene in such a way that all is lit up (recommended options include "Omni" lights or an "IES Sun").
 +
# Select a "Plasma Run Time Light" (such as the RT Directional) and place it above your scene, so that the arrows can reach the whole word (you might either have to scale it or change the modifier values).
  
Now, your first age is finished and you can export it with Plasma Export (I bound it to "X").
+
=== The "Page Info" Component ===
==Finalizing your age==
+
# Open your Component Manager.
If you made this age for TPOTS you can now convert it with Drizzle and you are done.
+
# Although there are many available options, for now you need a "[[Media:MBasics03.jpg|Page Info]]" component. Rename it to a more appropriate name. This component is essential: '''every''' object in an Age must have this component, except for Max Standard Lights.
 +
# Select all your objects, then [[Media:MBasics04.jpg|attach]] the Page Info to them.
 +
# Go to your utilities tab. If the "Component Util" tab isn't available yet, select "Configure Button Sets" and search for it in the list, before dragging it onto a button.
 +
# Selecting your "Component Util" should now display the Page Info in the list. If you select an object, all the components attached to it are listed in the Component Util.
 +
# Select your [[Media:MBasics05.jpg|Page Info]] component. You can see the following options listed underneath:
 +
#* '''Age''': the selected attached Age. Select your Age.
 +
#* '''Page''': the PRP into which the objects shall be exported. Select your Page.
 +
#* '''Itinerant''': should not be used, uninteresting; purpose unknown. Disregard.
  
If you made this age for MOULa you first have to copy your .age and .fni file. Then you need the libHSPlasma tools. Now, you have to start "PlasmaCrypt" with your Console and type the following:
+
=== Adding collisions ===
PlasmaCrypt.exe xtea YourFile
+
It might be to your avatar's advantage to have a ground to walk on, instead of an endless black abyss to fall into. Collisions are therefore useful.
 +
# In the Component Manager, go to [[Media:MBasics06.jpg|New->Physics->Terrain]] and attach this terrain to your ground plane. Rename it something more useful. This tutorial will prefix it with '''p'''.
 +
# In your "Component Util", select the Terrain component. This component is used for every object which should have a static collision. The [[Media:MBasics07.jpg|following options]] can be set:
 +
#* '''Physical Properties''': the two values, Friction and Bounce, are rather self-explanatory. The values range from 0 to 1.
 +
#* '''Bounding Shape''': how your collision will look like.
 +
#** ''Sphere'' creates a spherical collision around your object. It cannot be used with any object.
 +
#** '''''Box''''' creates a collision with the shape of the bounding box of your object. This tutorial will use Box.
 +
#** ''Hull'' uses the hull of your object as a collision but does not include holes or similar things, so you cannot go through a door in a wall if you use Hull. Hull also doesn't work with planes.
 +
#** ''Exact'' uses the object itself as a collision. It is the most precise type but can also cause a lag if you it too often or on dynamic objects.
 +
#** ''Use Alternate Shape?'' allows you to pick another object as the collision for your object, since a very complicated tree, for example, would create immense lag, whereas a cylinder around the tree can be used in its place.
 +
#*** ''Align Alternate Shape?'' aligns your new collision like your main object.
  
For me it looks like this:
+
=== Adding a Spawn Point ===
 +
The Age is now ready to receive avatars, but they still need a way to enter this Age. We thus need a Spawn Point (or Starting Point).
 +
# Select the small box created earlier.
 +
# Open your Component Manager and navigate to [[Media:MBasics08.jpg|New->Type->Starting Point]]. Rename it to something more appropriate.
 +
# In your Component Util, you can now see that there is nothing to do. However, should you Link in now, you will be able to see your spawn point and your avatar reference. They therefore need to be hidden.
 +
# Navigate to [[Media:MBasics09.jpg|New->Ignore->NoShow]] and assign this to your spawn point. The [[Media:MBasics10.jpg|following options]] are available (for this example, you can leave them as they are):
 +
#* '''Disable Only''': this will make the object ignored by default, but it can be made visible through Python or a responder.
 +
#* '''Affect''': which aspects of Plasma will be set to ignore it.
 +
#** ''Drawable'' makes the object invisible.
 +
#** ''Physical'' removes that object's collisions.
 +
# Navigate to New->Ignore->Ignore and assign it to your Avatar reference. The [[Media:MBasics11.jpg|following options]] are available:
 +
#* '''Ignore''': will disable export of this object. For this example, you can enable it.
 +
# Your Age is now ready. You can export it with Plasma Export.
  
[[File:MBasics12.jpg]]
+
=== Publishing ===
 +
''Main Article: [[Max:Exporting]]''
  
Eventually, you can copy the encrypted files and your prp files to your Uru installation and try your age out.
+
There are two scenarios for exporting your Age:
 +
* '''If you are exporting for TPOTS''' you can now convert it [[Using Drizzle|using Drizzle]] and it will be ready.
 +
* '''If you are exporting for MO:UL''' follow the instructions for MO:UL as detailed in the [[Max:Exporting|exporting tutorial]]. You will essentially need to encrypt your files before they can be used.
  
 
[[Category:3ds Max Tutorials]]
 
[[Category:3ds Max Tutorials]]

Revision as of 13:29, 5 April 2012

Disambig gray.png

This is a tutorial page.Versions available: PyPRP; 3ds Max; Korman.
 

If you have never used the 3ds Max Plugin for Plasma, this tutorial will get you started by taking you through all the steps needed to build an Age.

Prerequisites

This tutorial (like all subsequent tutorials) assumes that you have successfully installed the Max Plugin and that you are familiar with 3ds Max modelling, animation and so on.

Tutorials

You will need to have read and understood the following tutorials:

Preparing

Before you begin the actual creation process, you'll need to configure a few things and prepare various details.

Note: the first section is entirely optional, but recommended for ease of use and practicality.

Setting Up Your Workspace

Assigning a few hotkeys to your workspace can help improve your efficiency when creating and publishing Ages. This will help you set up two keyboard shortcuts for commonly used commands.

  1. Go to Customize->Customize User Interface... and select "Plasma" from the drop-down box in the "Keyboard" tab.
  2. Component Manager: select "Component Manager" and assign "C" as a hotkey.
  3. Plasma Export...: select "Plasma Export..." and assign "X" as a hotkey.

Get used to these hotkeys, or be prepared to click on a lot of menus.

Creating Your Age's Files

There are two types of files you will need for your Age to function: .age files and .fni files (note: the latter are optional if you are not publishing for MO:UL).

.age Files

Navigate to your output folder and create a new .txt file. Open it with an editor and write the following text into it:

StartDateTime=0000000000
DayLength=24.000000
MaxCapacity=10
LingerTime=180
SequencePrefix=8536
ReleaseVersion=0
Page=mainroom,1

StartDateTime is the UNIX time of the date the Age starts counting its days. For now you can leave it at 0000000000, but you'll have to change it if you want to make Global Animations.

DayLength is the length of a day in hours. For now you can leave it at 24 hours, but maybe you have to change it if you want to make Global Animations.

MaxCapacity is the maximum amount of players who may enter this Age at the same time.

LingerTime is optional. It defines the time in seconds until the game server (only in MO:UL) will shut down if the Age is empty.

SequencePrefix is a very important option. It is a unique number for your Age. Every Age in Uru needs its own ID. If you want to create an Age for TPOTS you can register a prefix in the TPOTS Sequence Prefixes list, which will reserve that ID for you. Numbers 1 through 100 are reserved for use by Cyan.

ReleaseVersion is not really important. You can leave it at 0 and don't need to change it.

Page is the most important option. Every Age file also has PRP files. These PRP files are defined by this option. In Max you can choose to which page the objects should be exported. You can also make more than one page: in this case, you only have to change the IDs behind the pagename, as follows:

Page=mainroom,1
Page=caves,2
Page=interior,3
...

If you are done, save the file as YourAge.age and close the file, where "YourAge" is the name of your Age. It has to have the .age suffix, and not a .txt suffix.

.ini Files

This section is useful only if you will be publishing your Age to MO:UL, since Drizzle automatically creates the appropriate file for TPOTS. If you do not intend to publish your Age to MO:UL, you can skip this section. If you do intend to do so and have not created a file, your Age will use the settings from the previously visited Age, which is probably not what you want.

Note: if you want to add fog to your TPOTS Age, you will have to manually edit the automatically generated file.

Navigate once more to your Age output folder and create a new .txt file. Write the following into it:

Graphics.Renderer.SetYon 100000
Graphics.Renderer.Fog.SetDefLinear 0 0 0
Graphics.Renderer.Fog.SetDefColor 0 0 0
Graphics.Renderer.SetClearColor 0 0 0

SetYon is the maximum distance (in feet) you can see in your Age. Everything beyond this distance looks like a wall with a predefined color.

SetDef... defines how dense your fog will look. There are the following possibilities:

SetDefLinear 0 0 0 means that the density of your fog will be rising in a linear fashion. The first value is the start distance in feet (-10000 to 1000000), the second value is the end distance in feet (-10000 to 1000000) and the third value is the maximum density of the fog (0 to 1).
SetDefEXP 0 0 means that the density will be rising exponentially. The first value is the end distance in feet (-10000 to 1000000) and the second value is the maximum density (0 to 1).
SetDefEXP2 0 0 is another exponential function similar to SetDefEXP.

The fog behind the end distance will have the maximum density you defined.

SetDefColor is the color of your fog. It needs three RGB values ranging from 0 to 1.

SetClearColor is the color you will see if there is nothing to see (for example if you don't have a sky you will see this color instead). This is also the color you will see behind the distance you defined by SetYon. It needs three RGB values ranging from 0 to 1. It is best to set it to the same color as the fog.

If you are done, save the file as YourAge.fni and close the file, where "YourAge" is the name of your Age. It has to have the .fni suffix, and not a .txt suffix. If you are publishing this file for MO:UL, it will have to be encrypted with your preferred tool (such as the libHSPlasma tool, PlasmaCrypt).

Navigating the Interface

The new "Plasma" menu item.
Installing the 3ds Max Plasma Plugin will add a new top menu item in Max called "Plasma". Of all the items in the menu, the following can safely be ignored:
  • SceneViewer...: this option is defunct and does not work, being the result of "A bad dream" as Chogon put it on the MOUL forums.
  • Age Description Manager: this manager was useful only inside Cyan's offices; it does not work now, since it attempts to communicate with an internal server that can't be reached to determine whether the new Age conflicts with another, existing Age.

The most important tool available in this menu is the Component Manager (available under "Component Manager..."). It makes it significantly easier to add objects to an Age, relying on a graphical way instead of a scripted way (using AlcScript). All the objects you can add to your Age are available under the New option in the menu.

For every object you add to your Age, you'll need to follow these steps:

  1. Select your object.
  2. Open the Component Manager.
  3. Navigate to New->Misc->PageInfo and click on it. This will create what looks like a directory tree structure.
  4. Click on "PageInfo01" (or whatever you called it, or a different page, if the object goes in a different PRP file) to highlight it and then click on "Attach to Select Object(s)". You can of course do this by batch, selecting multiple objects at once to attach the PageInfo to.
  5. Go to the Utilities tab.
  6. Click on the "More" button. You will get a pop-up box.
  7. In that pop-up box, double-click where it says "Component Util". You will see this area in the right hand tool box show up. As you can see, you now have a dropdown menu box that shows your Age's name and the Main Room. You can use these to select whether or not the select object goes on a different Page for the Age and what Age it will go in.

Your objects will now get exported into your PRP file for that Age. Remember to do this each time you add an object to your Age.

Creating An Age

The Age you will be creating.
This tutorial will help you learn all the basics for creating an Age under 3ds Max, including:
  • Using the Component Manager,
  • Using Page Info,
  • Creating a Starting Point,
  • Adding a Terrain,
  • Setting the "No Show" property,
  • Using "Ignore",
  • Exporting an Age.

Your Age will be rather basic, consisting only of a plain ol' plane to which your avatar shall spawn, as can be seen on the screenshot to the left.

You are advised to follow some common naming conventions for your components; the following prefixes shall be employed:

  • oYourComponent for an object,
  • dYourComponent for dummys,
  • pgInfoYourComponent for your Page Info.

These naming conventions will be used throughout this tutorial.

Objects and Lights

You are now ready to create your first Age with Max.

  1. Create a plane called oGround with a size set to 500x500. This will be the ground on which the avatars will walk.
  2. Create two boxes, one with a size of 1x1x1 called dSpawn and the other 1x1x6 called dAvatar. The latter will be a reference as to the size of the avatar and the former will be your avatar's spawn point.
  3. Move your spawn point box to the place where you'll want the avatar to spawn. You should position it slightly above your ground so your avatar cannot fall through it (0,01 feet to 0,1 feet).
  4. You would be well advised to add lighting to your Age. You basically have two kinds of lights:
    • Standard and Photometric: these lights are not exported by the plugin; however, the effect they have on your objects will be,
    • Plasma Run Time: these lights are made for Plasma. They will be exported and are used for moving objects (like your avatar) or animated objects. Run Time lights require a lot of resources, and only the nearest eight are rendered at a given time; use them wisely.
  5. Select the "Standard or Photometric Light" under the Light tab. Place it in your scene in such a way that all is lit up (recommended options include "Omni" lights or an "IES Sun").
  6. Select a "Plasma Run Time Light" (such as the RT Directional) and place it above your scene, so that the arrows can reach the whole word (you might either have to scale it or change the modifier values).

The "Page Info" Component

  1. Open your Component Manager.
  2. Although there are many available options, for now you need a "Page Info" component. Rename it to a more appropriate name. This component is essential: every object in an Age must have this component, except for Max Standard Lights.
  3. Select all your objects, then attach the Page Info to them.
  4. Go to your utilities tab. If the "Component Util" tab isn't available yet, select "Configure Button Sets" and search for it in the list, before dragging it onto a button.
  5. Selecting your "Component Util" should now display the Page Info in the list. If you select an object, all the components attached to it are listed in the Component Util.
  6. Select your Page Info component. You can see the following options listed underneath:
    • Age: the selected attached Age. Select your Age.
    • Page: the PRP into which the objects shall be exported. Select your Page.
    • Itinerant: should not be used, uninteresting; purpose unknown. Disregard.

Adding collisions

It might be to your avatar's advantage to have a ground to walk on, instead of an endless black abyss to fall into. Collisions are therefore useful.

  1. In the Component Manager, go to New->Physics->Terrain and attach this terrain to your ground plane. Rename it something more useful. This tutorial will prefix it with p.
  2. In your "Component Util", select the Terrain component. This component is used for every object which should have a static collision. The following options can be set:
    • Physical Properties: the two values, Friction and Bounce, are rather self-explanatory. The values range from 0 to 1.
    • Bounding Shape: how your collision will look like.
      • Sphere creates a spherical collision around your object. It cannot be used with any object.
      • Box creates a collision with the shape of the bounding box of your object. This tutorial will use Box.
      • Hull uses the hull of your object as a collision but does not include holes or similar things, so you cannot go through a door in a wall if you use Hull. Hull also doesn't work with planes.
      • Exact uses the object itself as a collision. It is the most precise type but can also cause a lag if you it too often or on dynamic objects.
      • Use Alternate Shape? allows you to pick another object as the collision for your object, since a very complicated tree, for example, would create immense lag, whereas a cylinder around the tree can be used in its place.
        • Align Alternate Shape? aligns your new collision like your main object.

Adding a Spawn Point

The Age is now ready to receive avatars, but they still need a way to enter this Age. We thus need a Spawn Point (or Starting Point).

  1. Select the small box created earlier.
  2. Open your Component Manager and navigate to New->Type->Starting Point. Rename it to something more appropriate.
  3. In your Component Util, you can now see that there is nothing to do. However, should you Link in now, you will be able to see your spawn point and your avatar reference. They therefore need to be hidden.
  4. Navigate to New->Ignore->NoShow and assign this to your spawn point. The following options are available (for this example, you can leave them as they are):
    • Disable Only: this will make the object ignored by default, but it can be made visible through Python or a responder.
    • Affect: which aspects of Plasma will be set to ignore it.
      • Drawable makes the object invisible.
      • Physical removes that object's collisions.
  5. Navigate to New->Ignore->Ignore and assign it to your Avatar reference. The following options are available:
    • Ignore: will disable export of this object. For this example, you can enable it.
  6. Your Age is now ready. You can export it with Plasma Export.

Publishing

Main Article: Max:Exporting

There are two scenarios for exporting your Age:

  • If you are exporting for TPOTS you can now convert it using Drizzle and it will be ready.
  • If you are exporting for MO:UL follow the instructions for MO:UL as detailed in the exporting tutorial. You will essentially need to encrypt your files before they can be used.