About This File
A script compiler/decompiler created by Soldier of Light some years ago.
Original readme is below:
ScriptTools - Made by Soldier of Light
Table of Contents
ii. Desc. of Files
iv. Constructor guide
Alrighty then, you're looking at the first real app I've ever made.
I'm actually pretty new to C#, but I picked it up pretty fast.
I made this program partly because I was bored, partly as a learning
experience, and partly 'cause none of the other tools were any good.
My intent was for this tool to help the community understand scripting,
and to make it a little easier to stomach.
Inluced in this pack is:
HaloMap.dll - Halo library made by pokecancer
ScriptTools.exe - The actual program
log.txt - Prints technical details of unknown values
db.txt - Stores the script database
If you ask me why ____ isn't supported, and can find an example of it,
then there should be some printout in log.txt. Send it to me and
I'll do my best to add support for it. At this point I know it prints
vehicle seats, and type 48 (damage state I believe).
All of the scripts used by the compiler and constructor are stored
in db.txt. I've made it in an easily editable format so that
if custom commands are created, they can be added. The format is:
Identity Return Type Name Arg1 Arg2 Arg3...
If you don't understand what this means, then don't worry about it.
This program has the following features:
-It can display all of the scripts in a map.
-It can decompile a script into readable text.
-It can decompile the scripts in a map into text.
-It can compile a script from text into the map.
-It can compile a map's scripts from text into the map.
-It has a constructor view, which can guide the user through
creating a script
-It can decompile into the constructor view.
-It can compile from the constructor view.
-It features a global editor, which can change names, types,
and initialization expressions easily.
-It does NOT feature a chunk adder - this means you must manually add
a script chunk using entity. If you don't know how to do this,
consult my technical scripting tutorial.
The wow factor of this program is without a doubt the constructor view.
I've tried to make it as intuitive as possible, but it still needs
some explanation. Here's how it works:
It's a basic click and drag mechanism. You can see a script tree on
the left, which can be sorted according to identity, alphabetically,
or by return type. Once you select a script from the left, you can
drag it into a dropdown box on the right, and it will make the box
into that command.
For example, if I'm just starting, I would locate the "begin" command
in the script tree, then I would click and drag it, then drop it in
the box on the right that says "<void>"
Once you've dragged a script into the box, it generates blank spaces
for the next values, according to the database. If it doesn't give
you the parameters that you were looking for, simply drag the command
again and it will use the next database entry for that command.
If you've run out of space for new commands, and you have a begin
statement somewhere, you can drag begin to that statement again to
add a blank dropdown to the script.
If you want to use a global or static script, then you can drag the
corresponding value to the dropdown box, and it will repopulate the
list with the correct type of value.
If you decide that you didn't want to make something a command, or
want to use a value somewhere instead of a command, simply drag
"(VALUE)" to the box, and it will erase all commands inside and change
it back into a simple value.
If at any time you need to change the value type of a specific box,
you can right-click the box, and select a new type from the form.
Most users won't need to do this, but it's necessary for static scripts
which return something, as the constructor does not auto-cast begin
A description of the common error messages:
"No scripts": Your map does not have any script chunks.
"Parameter mismatch" (plaintext): No variation of the specified command
takes the type of value you provided
"Return mismatch" (constructor): You tried to put a command which cannot
return the expected value; you may choose to override this.
My program relies on overwriting scripts. If you have just transferred
the script chunks into your map, there will be no actual scripts
to overwrite. Therefore, I suggest that you inject a blank script
for each chunk, using the entire map compiling feature. A sample blank
script looks like this:
(script stub blank
If you do not do this, you may get undesired results.
Programming - Soldier of Light
Programming Help - MFC, The Tycko Man, Anthony, Pokecancer
HaloMap.dll - Pokecancer
Research help - Agent ME
Beta-ing - Munsie, Agent ME