Foxpaw
Current Project
I don't have a page up for my new project yet. It's not a mod, but an Unrealscript programming tool. It's actually a compiler for a language very similar to Unrealscript. The long and the short of it is, it compiles this langugage, and decompiles the result back to Unrealscript. The decompiled Unrealscript can then be compiled by UCC. (This will ensure that the final product has the most recent bytecode, and it also frees me from using Epic's bytecode.)
The benefit of using this over using UCC directly is of course, features. Unrealscript will be directly compilable, but you will also have capabilities that are not available with UCC. Planned features are:
- Flexible Directory Layout
- The compiler traverses all subdirectories of a given root directory. This allows you to have subdirectories to organize the source code for large packages. UCC does not permit this behaviour.
- #INCLUDE and #DEFINE support
- Fairly self explanatory, these allow for tweakable constants to be kept in one file, among other things. Macro definition will also be possible.
- Inline Functions
- For those who don't know, an "inline function" is written as a function but the compiler inserts the function body into the code where the function is called - saving a function call. This allows you to write code that is very well organized, without the overhead associated with numerous function calls. Inline functions must also be final, for obvious reasons. In short, it can make your code run faster.
- Auto-Finalization
- An optional feature (command line argument) that will cause all functions to be declared as "final," except those that are overridden in a subclass. Some keyword will likely be provided to override this behaviour on certain functions that you want left open for overriding. Functions declared as final execute slightly faster because the engine does not have to check for polymorphism.
- Variables Anywhere
- In Unrealscript, all variables must be declared at the head of a function or class. This compiler allows variable declarations anywhere in the class or function body, allowing you to make some code a little cleaner.
- Obfuscation
- An optional feature (command line argument) that will render any decompiled code very difficult for humans to read. I have a number of ideas of how this could be done very well in Unrealscript, but to prevent defeating the purpose of code obfuscation I won't explain how I plan to do this.
- Static Variables
- Variables can be declared as "static." In this case all references to that variable will be automatically changed to references that class' default properties. This variable can also be accessed from anywhere with the syntax ClassName.VariableName. Note that declared variables will take precedence over the static notation, so the static variable can be obscured if a variable named ClassName is declared in a given scope.
- Singleton Classes
- Classes can be declared as "singleton" classes. This allows an instance of that class to be accessed from anywhere by using the classes name. For instance, ClassName.VariableName would access the variable "VariableName" as an instance member of a singleton instance of "ClassName." The singleton instance will be maintained statically. For actors the setup and cleanup of this singleton instance will be handled automatically by inserting appropriate code into the beginning of PreBeginPlay() and the end of Destroyed(). For objects it may be up to the coder to create and cleanup the singleton reference. This behaviour can be obscured by declared variables as described above for static variables.
- Flexible Class Placement
- When the compiler decompiles back to UnrealScript, a separate appropriately named file will be created for each class. The source input to the compiler can have multiple classes per file, or none at all. The name of the input files need not bear any relation to the classes contained within. This could be useful if making something where several small classes need some logical association. (IE a simple weapon mutator where default properties must be changed in 4 different classes, but little else.)
- Forced Access
- This feature may not actually get implemented, but we'll see. Access to private functions and variables is restricted only by UCC. You can get access to these functions and variables by toggling the private bit for that member in the package the class is contained in, then compiling. You can toggle the bit back after compilation and your code will still have access to those private members. However, I don't see much application for this as mostly Epic has only declared things as private when the interact natively in some way, so this would probrably only allow people to get themselves into trouble.
- Minor Typographical Error Correction
- Some minor typos can be tolerated by the compiler, in any case where you couldn't have possibly intended otherwise. Examples would be missing the semicolon from the last line of code within brackets (the closing bracket must be on a new "line" of code, and so can't possibly be part of the previous line) or missing closing brackets from the last thing in the file. (Since classes cannot span multiple files, the end of the file must also indicate that all open brackets need to be closed.) This is of questionable value as a feature but is actually an artifact of how the compiler dissects source code heirarchially.
- Verbose Error Reporting
- Unfortunately because the compiler parses the code heirarchially any information about line numbers is, of course, lost. However, the heirarchial parsing means that a lot of context information is available when an error is encountered.
- Compilation to Machine Code or Flexible Export
- The intermediate data can be exported to pretty much any language that I can think of. Right now I have a working exporter for Unrealscript, but you could just as easily make an exporter for another language. The ability to compile directly to native machine code will also be available. (Native classes for dealing with streams, processes, etcetera will be provided as an interface for this kind of coding.)
Past Project
This mod was unfortunately ill-fated, and all work on it was lost due to a hard drive failure coinciding with a recent loss of all backups. I'll probrably clean up the developer journal and stuff sometime. I will likely pick this project up again at some point, in one form or another.
War On Terror: Americans In Iraq
Just for fun I made a little minimod called "War On Terror: Americans in Iraq." Due to the amount of copyrighted art I used I don't feel that a release is appropriate, so it's a bit of a tease, but I didn't want everyone to think I was idle. Just as a further tease:
"War On Terror" is an over-the-top parody based the stereotype of the hyper-patriotic American. Your mission: keep control in Baghdad among a constantly increasing Insurgent presence. Insurgents spawn in any area not directly monitored by American forces - as American forces are eliminated, the number of unmonitored areas increases, causing Insurgent spawns to increase for every American lost.
- Battle Insurgents armed with AK47s, RPGs, and Molotov Cocktails in the streets of Baghdad.
- Race against time to stay alive amidst heavy handed airstrikes that increase in frequency and intensity as the concentration of American soldiers dwindles.
- Persistent blood and gore tells the grisly story long after the battle is over.
One level was specially prepared for the mod, but it can be played on any map. Any map type can be used, but assault maps may not work well. Online play should probrably work but has not been tested.
Note that certain persons may find the quasi-political nature of this mod offensive. This mod was designed solely on what I thought might be a fun scenario with a backstory that allowed for ample references to pop culture considered comical by some. (EG, the tanks sound system plays "Let the bodies hit the floor," a reference to Farenheit 9/11.)
I kind of lost interest in doing the polishing, so there's no HUD or much of an interface. The gameplay is still a blast, however.
I don't have any decent image editing software on my PC right now, I might put up some screenshots at some point.