So, to get you started : The assetList.xml tells the tool which directories holds assets that need to be processed : The first attribute tells the tool which instruction file to look for in each asset directory. In this case, each asset directory should have the asset_handler.xml file. The second attribute tells the tool where to save asset files which are needed for the generation of the .ftl file. In this case, all relevant files will be saved in the tempRand directory. The third attribute tells the tool which file name should be used for the generated ouput - Randtrel.ftl in this case. The children hold a dir attribute which tell the tool where an asset directory is located, relative to the directory from which the tool is executed. Note that the order is important - assets will be processed from top to bottom. As for the actual asset_handler.xml files : let's look at the weapon data directory asset handler file. The asset handler defines actions which should take place on the asset directory. Actions are processed from top to bottom. The randomizeHook attribute has a file name attribute, for a file in the directory from which hook data should be selected randomly : The multiRand attribute should be used optionaly along with randomizeHook: if it appears, then each hook has a random value selected for it. If multiRand is not used, all hooks will select the same child. I'll explain this further when looking at the meta_weapon_pool.xml file. This action will map hook data to hook ids. Another example of an asset file in the Randtrel Skeleton directory: The skeleton attribute has a file name attribute, for a file which has hook IDs that should be replaced with hook values. The destination attribute is a directory path which tells the tool where to save the processed skeleton file, in this case at tempRand/data (don't forget the tempRand directory found in the assetList.xml file). So the skeleton action wlll take a file, replace hook IDs found in it with hook values, and save the resulting file in the path defined in destination. Let's look at the meta_weapon_pool.xml file : ...... ...... ...... ..... ..... The hook children define hook ids for which random hook values are selected. The id attribute is the hook id - this is the value which should be used in skeleton files, and which is replaced by the hook values. The metaDataId value is another hook id value which is mapped to the randomly selected child's metadata attribute value - this hook can be used anywhere, and was designed in order to describe the selected random value. The Asset tags hold the value of the hook. One of the Asset tags is randomly selected, it's metadata attribute is mapped to metaDataId, and it's value (whatever is between the tags) is mapped to the hook ID. Remember the multiRand attribute in the asset_handler.xml file ? If it is present, then each hook will select a random value. If it is not present, then the first hook randomly selects one of it's children, for example the second child. All hooks after the first will select the child at the same position - their second child. This means that if you are not using multiRand, you must make sure that all the Hooks will have the SAME number of children. So you have two options for randomizing values - either multiple random selections - one for each hook - or a single random selection for the first hook, based on which on all other hooks will select their child. The marker will be explained below (it marks a hook ID which will be replaced by a radomly selected hook value. This can be done inside assets, as seen above). Finally, let's explain the selection of a random directory, for the layouts. The asset_handler.xml of the Layouts dir looks like this : The selectDir attribute defines the path from which random directories should be selected - in this case, this is layouts directory. The destination attribute is the location to which the randomly selected directory should be copied, in this case tempRand/data. The metaData attribute is a file name which is found in the randomly selected directory, and which holds the value which should be mapped to the metaData hook id. The meta data file is not copied to the destination dir. So this action randomly selects a directory, and copies it to the target destination, while mapping the content of the meta_data.txt file to a meta data hook id which is the name of the base directory in which the randomly selected directory is found - in this case it is Layouts. There is also an action for copying directories without randomly selecting them : The dirCopy attribute is the name of the copied directory, destination is where the directory is copied to. You should have everything you need in order to build all the assets for randomizing a player ship. The asset directories in Rantrel.zip file already have pre build asset_handler.xml files which you can edit as needed. You can build your own pool.xml files from which hook id values are randomly selected, and you can see how the skeleton files work by opening them (pretty straight forward, place marker is replaced with a randomly selected auxillery weapon asset. Important note : keep in mind that you must process hook generating actions BEFORE skeleton actions - hook IDs can not be replaced with values if those values have not been selected. So make sure skeleton action are performed after hook generating action, and that skeleton assets are handled after hook generating assets. Also make sure you use unique hook IDs - if a hook ID is used in random value generation more then once, then only the last randomly selected value will be mapped to it. Another note - since assets are set in XML format, the rules of legal XML format must be maintained : no markers can be placed inside tags or attributes, tags which were opened must be closed, etc.. Good luck, and contact me if you have any questions. RannL.