Zeus

Halo modding and gaming related applications.
Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Zeus

Post by Sparky » Sun May 26, 2013 12:05 am

Download

http://www.blamdevcom.net/zeus/Zeus_source.zip

You may:

- build an application
- mess with the code
- make suggestions for improvement

You may not:

- take credit for my work
- take any code from this for developing some sort of competitive application (why not just suggest improvements instead and offer to help or do a separate version of it when I'm done with it?)

You must:

- wait until I'm done with it before adding anything to it; however, you can show me what improvements you would do either in this topic or in the BDCN project (http://www.blamdevcom.net/projects/inde ... &project=3)


Requirements:
  • Mac OS 10.6+
Supported File Types

Supported
Not Yet Supported

Halo 1 Tags (Halo Editing Kit)
  • actor (actr)
    actor variant (actv)
    antenna (ant!)
    model animations (antr)
    biped (bipd)
    bitmap (bitm)
    spheroid (boom)
    continuous damage effect (cdmg)
    model collision geometry (coll)
    color table (colo)
    contrail (cont)
    device control (ctrl)
    decal (deca)
    ui widget definition (DeLa)
    input device defaults (devc)
    device (devi)
    detail object collection (dobc)
    effect (effe)
    electricity (elec)
    equipment (eqip)
    flag (flag)
    fog (fog)
    font (font)
    material effects (foot)
    garbage (garb)
    glow (glw!)
    grenade hud interface (grhi)
    hud message text (hmt)
    hud number (hud#)
    hud globals (hudg)
    item (item)
    item collection (itmc)
    damage effect (jpt!)
    lens flare (lens)
    device light fixture (lifi)
    light (ligh)
    sound looping (lsnd)
    device machinery (mach)
    game globals (matg)
    meter (metr)
    light volume (mgs2)
    gearbox model (mod2)
    model (mode)
    multiplayer scenario description (mply)
    network game preferences (ngpr)
    object (obje)
    particle (part)
    particle system (pctl)
    physics (phys)
    placeholder (plac)
    point physics (pphy)
    projectile (proj)
    weather (rain)
    scenario structure binary space partition (sbsp)
    scenery (scen)
    shader transparent chicago extended (scex)
    shader transparent chicago (schi)
    scenario (scnr)
    shader environment (senv)
    shader transparent glass (sgla)
    shader (shdr)
    sky (sky)
    shader transparent meter (smet)
    sound (snd!)
    sound environment (snde)
    shader model (soso)
    shader transparent generic (sotr)
    ui widget collection (soul)
    shader transparent plasma (spla)
    sound scenery (ssce)
    string list (str#)
    shader transparent water (swat)
    tag collection (tagc)
    camera track (trak)
    unit dialogue (udlg)
    unit hud interface (unhi)
    unit (unit)
    unicode string list (ustr)
    virtual keyboard (vcky)
    vehicle (vehi)
    weapon (weap)
    wind (wind)
    weapon hud interface (wphi)
Halo 1 Tags (Eschaton)
  • actor (actr)
    actor variant (actv)
    antenna (ant!)
    model animations (antr)
    biped (bipd)
    bitmap (bitm)
    spheroid (boom)
    continuous damage effect (cdmg)
    model collision geometry (coll)
    color table (colo)
    contrail (cont)
    device control (ctrl)
    decal (deca)
    ui widget definition (DeLa)
    input device defaults (devc)
    device (devi)
    detail object collection (dobc)
    effect (effe)
    electricity (elec)
    equipment (eqip)
    flag (flag)
    fog (fog)
    font (font)
    material effects (foot)
    garbage (garb)
    glow (glw!)
    grenade hud interface (grhi)
    hud message text (hmt)
    hud number (hud#)
    hud globals (hudg)
    item (item)
    item collection (itmc)
    damage effect (jpt!)
    lens flare (lens)
    device light fixture (lifi)
    light (ligh)
    sound looping (lsnd)
    device machinery (mach)
    game globals (matg)
    meter (metr)
    light volume (mgs2)
    gearbox model (mod2)
    model (mode)
    multiplayer scenario description (mply)
    network game preferences (ngpr)
    object (obje)
    particle (part)
    particle system (pctl)
    physics (phys)
    placeholder (plac)
    point physics (pphy)
    projectile (proj)
    weather (rain)
    scenario structure binary space partition (sbsp)
    scenery (scen)
    shader transparent chicago extended (scex)
    shader transparent chicago (schi)
    scenario (scnr)
    shader environment (senv)
    shader transparent glass (sgla)
    shader (shdr)
    sky (sky)
    shader transparent meter (smet)
    sound (snd!)
    sound environment (snde)
    shader model (soso)
    shader transparent generic (sotr)
    ui widget collection (soul)
    shader transparent plasma (spla)
    sound scenery (ssce)
    string list (str#)
    shader transparent water (swat)
    tag collection (tagc)
    camera track (trak)
    unit dialogue (udlg)
    unit hud interface (unhi)
    unit (unit)
    unicode string list (ustr)
    virtual keyboard (vcky)
    vehicle (vehi)
    weapon (weap)
    wind (wind)
    weapon hud interface (wphi)
Halo 1 Tags (Import/Export to Text XML and OBJ/PNG/WAV)
  • actor (actr)
    actor variant (actv)
    antenna (ant!)
    model animations (antr)
    biped (bipd)
    bitmap (bitm)
    spheroid (boom)
    continuous damage effect (cdmg)
    model collision geometry (coll)
    color table (colo)
    contrail (cont)
    device control (ctrl)
    decal (deca)
    ui widget definition (DeLa)
    input device defaults (devc)
    device (devi)
    detail object collection (dobc)
    effect (effe)
    electricity (elec)
    equipment (eqip)
    flag (flag)
    fog (fog)
    font (font)
    material effects (foot)
    garbage (garb)
    glow (glw!)
    grenade hud interface (grhi)
    hud message text (hmt)
    hud number (hud#)
    hud globals (hudg)
    item (item)
    item collection (itmc)
    damage effect (jpt!)
    lens flare (lens)
    device light fixture (lifi)
    light (ligh)
    sound looping (lsnd)
    device machinery (mach)
    game globals (matg)
    meter (metr)
    light volume (mgs2)
    gearbox model (mod2)
    model (mode)
    multiplayer scenario description (mply)
    network game preferences (ngpr)
    object (obje)
    particle (part)
    particle system (pctl)
    physics (phys)
    placeholder (plac)
    point physics (pphy)
    projectile (proj)
    weather (rain)
    scenario structure binary space partition (sbsp)
    scenery (scen)
    shader transparent chicago extended (scex)
    shader transparent chicago (schi)
    scenario (scnr)
    shader environment (senv)
    shader transparent glass (sgla)
    shader (shdr)
    sky (sky)
    shader transparent meter (smet)
    sound (snd!)
    sound environment (snde)
    shader model (soso)
    shader transparent generic (sotr)
    ui widget collection (soul)
    shader transparent plasma (spla)
    sound scenery (ssce)
    string list (str#)
    shader transparent water (swat)
    tag collection (tagc)
    camera track (trak)
    unit dialogue (udlg)
    unit hud interface (unhi)
    unit (unit)
    unicode string list (ustr)
    virtual keyboard (vcky)
    vehicle (vehi)
    weapon (weap)
    wind (wind)
    weapon hud interface (wphi)
Halo 1 Maps
  • Scenario (Full, Demo/Trial, Custom Edition)
    Bitmaps
    Sounds
    LOC
Zeus Project Archives
  • Lightning Bolt
General Features:
  • Meta Data reading, writing and fixing

    Walkthrough Map Unprotecting for antiquated map protection methods (displays 3d models, bitmaps and sounds and you name the associated tags)

    Map Encryption and Decryption (new map protection method)

    Lightning Bolt Authoring

    Lightning Bolt Encryption

    Batch Processing of Tag Metadata (of a certain type) within a folder of tags, within a folder of maps, and within a single map

    Map Converting

    3-D shaded model viewing

    Animation viewing

    Scenario viewing and editing
Halo Editing Kit Features:

Built-in Tool Command Functionalities
  • model (.obj file importing)
    animations ()
    strings (.txt file importing)
    unicode-strings (.txt file importing)
    bitmaps (from a folder of QuickTime-supported image files)
    bitmap (from a QuickTime-supported image file)
    structure (.obj file importing)
    structure-lens-flares (option during .obj file importing)
    structure-breakable-surfaces (option during .obj file importing)
    collision-geometry (.obj file importing)
    physics ()
    sounds (from a folder of QuickTime-supported sound files)
    sounds_by_type (from a folder of QuickTime-supported sound files)
    build-cache-file (integrated within Lightning Bolts)
    windows-font (integrated within font tag)
    hud-messages ()
    lightmaps (integrated within sbsp tag)
    process-sounds (integrated within tag batch processor)
    merge-scenery (integrated within scnr tag batch processor)
    zoners_model_upgrade ()
    import-device-defaults ()
Last edited by Sparky on Sat Jul 06, 2013 10:40 am, edited 7 times in total.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Wed May 29, 2013 12:03 am

pre-alpha 1.2 adds reading HEK ustr tags.
when it supports writing them, that will make this the first legit ustr tag editor available for either pc or mac.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Wed May 29, 2013 11:05 am

As posted at the HaloMaps forum: http://forum.halomaps.org/index.cfm?pag ... icID=43138

Zeus is now an OS X 10.6+ application.

Version "pre-alpha 1.2" is available as of last night: viewtopic.php?f=101&t=18595

I realize most, if not all, of the members of this forum use Microsoft Windows. For these folks, you might like to know that I am working first on functionalities of Zeus that equal and surpass Guerilla (kornmann's version). As far as I am aware, there is no editor for Microsoft Windows that allows you to edit .unicode_string_list and related tags -- properly. The latest version of Zeus adds this functionality in reading .unicode_string_list tags and soon will have the writing capability also. If you are interested in seeing the code so that you can write your own executable or script for converting text files into .unicode_string_list tags and vice versa, the Zeus code will be open source when I'm done with it. And for now, here is the file parsing information for reading .unicode_string_list tags:

.unicode_string_list file format
There are a few structs to include:

Code: Select all

//HEK: ustr
struct hek_ustr_index_info		// the strings index array header (1 of these)
{
	NSNumber *stringcount;	//long
	NSNumber *random_id;			//uint32 ("random" number)
	NSNumber *base_id;				//uint32 (used to calculate calculated_id's)
};

struct hek_ustr_index_item		// the strings index array entries (hek_ustr_index_info.stringcount of these)
{
	NSNumber *unicodestringlength;	//uint32
	NSNumber *zeropadding1;		//uint32 zeros
	NSNumber *zeropadding2;		//uint32 zeros
	NSNumber *random_id;		//uint32 ("random" number)
	NSNumber *calculated_id;	//uint32
};
In the interface:

Code: Select all

NSMutableArray *tagMetaArray;
	
	struct hek_ustr_index_info index_info;
And here is the relevant tag parsing method, which returns an NSMutableArray instance:

Code: Select all

	//NSLog(@"You have reached the parseTagDataToArrayFrom: method.");
	NSMutableArray *tagMetaArrayWIP = [[NSMutableArray alloc] init]; // this array contains two arrays:
	NSMutableArray *ustr_index = [[NSMutableArray alloc] init];
	NSMutableArray *ustr_strings = [[NSMutableArray alloc] init];
	// the array entry numbers correspond with these two arrays
	
		// buffers
	unsigned char tagtypebuffer[5];
	long longbuffer;
	uint32_t int32buffer;
		//uint16_t int16buffer;
		//float floatbuffer;
	//int32_t signedint32buffer;
	unsigned char unicodestringbuffer[1026];	//ustr strings will be 512 characters max
	
		// meta data values passed to objects for storage in the array
	
		// pre-meta file data
	/* offset 0 = 36 bytes of 0 */
		// tag type
	[TagData getBytes:&tagtypebuffer range:(NSRange){36,4}];
	NSString *tagtype = [[NSString alloc] initWithBytes:tagtypebuffer length:5 encoding:(NSUTF8StringEncoding)];
		//NSLog(@"Tag type is %@", tagtype);
	/* offset 40 = uint32 random number */
	/* offset 44 = uint32 value of 64 */
	/* offset 48 = 8 bytes of 0 */
	/* offset 56 = uint16 value of 1 */
	/* offset 58 = uint16 value of 255 */
	/* offset 60 = char[5] value of "blam" */

		// the index of the list of unicode strings
		// one array for the info (index_info), then a loop for each string entry
	[TagData getBytes:&longbuffer range:(NSRange){64,4}];
	longbuffer = Endian32_Swap( longbuffer );
	index_info.stringcount = [[NSNumber alloc] initWithLong:longbuffer];
		//NSLog(@"Total Strings: %@",index_info.stringcount);
	
	[TagData getBytes:&int32buffer range:(NSRange){68,4}];
	int32buffer = Endian32_Swap( int32buffer );
	index_info.random_id = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
	
		// this next number is random, and all subsequent numbers of this struct entry have a value of this number minus 671088640 (minus 40 in the first byte)
	[TagData getBytes:&int32buffer range:(NSRange){72,4}];
	int32buffer = Endian32_Swap( int32buffer );
	index_info.base_id = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
	
		// now for each string, add an index entry
	struct hek_ustr_index_item index_item;
	uint32 index_entry_offset = 76;
	for (long x = 0; x < [index_info.stringcount longValue]; x++)
	{
		
		
		[TagData getBytes:&int32buffer range:(NSRange){index_entry_offset,4}];
		int32buffer = Endian32_Swap( int32buffer );
		index_item.unicodestringlength = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
			//NSLog(@"String #%lu is %@ bytes long",x, index_item.unicodestringlength);
		
		[TagData getBytes:&int32buffer range:(NSRange){(index_entry_offset + 4),4}];
		int32buffer = Endian32_Swap( int32buffer );
		index_item.zeropadding1 = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
			//NSLog(@"zero padding: %@",index_item.zeropadding1);
		
		[TagData getBytes:&int32buffer range:(NSRange){(index_entry_offset + 8),4}];
		int32buffer = Endian32_Swap( int32buffer );
		index_item.zeropadding2 = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
			//NSLog(@"zero padding: %@",index_item.zeropadding2);
		
		[TagData getBytes:&int32buffer range:(NSRange){(index_entry_offset + 12),4}];
		int32buffer = Endian32_Swap( int32buffer );
		index_item.random_id = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
			//NSLog(@"random id: %@",index_item.random_id);
		
		[TagData getBytes:&int32buffer range:(NSRange){(index_entry_offset + 16),4}];
		int32buffer = Endian32_Swap( int32buffer );
		index_item.calculated_id = [[NSNumber alloc] initWithUnsignedInt:int32buffer];
			//NSLog(@"calculated id: %@",index_item.calculated_id);
		
		index_entry_offset += 20;
		
			// add it to the index array
		NSValue *val_index_entries = [NSValue valueWithBytes:&index_item objCType:@encode(struct hek_ustr_index_item)];
			//NSLog(@"val_index_entries: %@",val_index_entries);
		[ustr_index addObject:val_index_entries];
			//NSLog(@"ustr_index has %lu entries.",[ustr_index count]);
	}
	
		//there should now be a struct for every index entry
		//now are the strings
		//index_entry_offset should be at the list of strings now
		//NSLog(@"ustr_index is: %@ and has %lu entries.", ustr_index, [ustr_index count]);
		//NSLog(@"index_entry_offset is at %u", index_entry_offset);
	
	struct hek_ustr_index_item this_entry;
	this_entry.unicodestringlength = [[NSNumber alloc] init];
	this_entry.zeropadding1 = [[NSNumber alloc] init];
	this_entry.zeropadding2 = [[NSNumber alloc] init];
	this_entry.random_id = [[NSNumber alloc] init];
	this_entry.calculated_id = [[NSNumber alloc] init];
	
	for (long y = 0; y < [index_info.stringcount longValue]; y++)
	{
		[[ustr_index objectAtIndex:y]getValue:&this_entry];
		
		long this_string_length = [this_entry.unicodestringlength longValue];
		[TagData getBytes:&unicodestringbuffer range:(NSRange){index_entry_offset,this_string_length}];
		//const char * nulstring = "\x00";
		NSString *this_string = [[[NSString alloc] initWithBytes:unicodestringbuffer length:this_string_length encoding:NSUTF8StringEncoding] stringByReplacingOccurrencesOfString:@"\x00" withString:@""];
			// I could not care much less about this compiler warning.
			//stringByReplacingOccurrencesOfString:@"\x09" withString:@"\t"]
		
		[ustr_strings addObject:this_string];
			//NSLog(@"String #%lu of length %lu is %@",y,this_string_length,this_string);
		[this_string release];
			// and we're using index_entry_offset as our general "file pointer"
		index_entry_offset += this_string_length;
	}
	
	[this_entry.unicodestringlength release];
	[this_entry.zeropadding1 release];
	[this_entry.zeropadding2 release];
	[this_entry.random_id release];
	[this_entry.calculated_id release];
	
		// add to the main array
	[tagMetaArrayWIP addObject:tagtype];
	[tagtype release];
	
	NSValue *val_index_info = [NSValue valueWithBytes:&index_info objCType:@encode(struct hek_ustr_index_info)];
	[tagMetaArrayWIP addObject:val_index_info];
	
	[tagMetaArrayWIP addObject:ustr_index];
	[tagMetaArrayWIP addObject:ustr_strings];
	
	[ustr_index release];
	[ustr_strings release];
	
	return tagMetaArrayWIP;
The data layout for the tag, therefore, is as follows:

First, the usual HEK tag header information:
- offset 0 = 36 bytes of 0
- offset 36 = 4 byte char for the tag type
- offset 40 = uint32 random number
- offset 44 = uint32 value of 64
- offset 48 = 8 bytes of 0
- offset 56 = uint16 value of 1
- offset 58 = uint16 value of 255
- offset 60 = char[5] value of "blam"

Now, an array of string indices, starting with the array header information:
- offset 64 = uint32 string index count
- offset 68 = uint32 random id
- offset 72 = uint32 base id (this number is random, and all calculated id's of this index array have a value of this number minus 671088640 (minus 40 in the first byte))

Then the array of string indices, the number of which comes from offset 64. We start at 76, and each array entry contains five 4-byte values, so 20 bytes for each index entry:
- uint32 string length
- uint32 00's
- uint32 00's
- uint32 random id
- uint32 calculated id

Finally, you have the strings. Each string is the length of it's respective index's "string length" value and starts right after the index array and runs to the end of the file. The number of strings is from offset 64 again. Each string is a char byte in an array, so each character is null-terminated. You will need to strip the null characters if you want to read them correctly in your program.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Wed May 29, 2013 7:10 pm

ustr is done

I would like to thank this video tutorial series regaring NSTableView, it was helpful:
http://www.youtube.com/watch?v=8Pm1CfmQxfE

So officially, Zeus is now the first public application that can properly read and write Halo Editing Kit unicode string tags!

EDIT: Tiny update, thanks to http://www.cocoabuilder.com/archive/coc ... eview.html.
Either you are groping for answers, or you are asking God and listening to Jesus.

TaxiService
Night Stalker
Posts: 6887
Joined: Thu May 24, 2007 5:52 am
Location: 41.896198, 12.4165945
Contact:

Re: Zeus

Post by TaxiService » Thu May 30, 2013 12:18 am

How much time do you think it'll take you to cover all tags?

Also, is there an order of tags you're gonna cover first? Like, I guess that if you work on more-used tags like weap, matg, bipd etc instead of, say, DeLa, shdr or vcky you could release early versions of the app that'll be able to be used for those tags!
  • TaxiService! Shitposting since 2007!
MGM Sig

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Thu May 30, 2013 4:57 pm

These are in HEK tag format, which means they are meant to be compiled into map cache files with Tool, which is a program in the Halo Editing Kit. You would not typically otherwise be able to use these tag files, like with programs like Eschaton. Eschaton tags format is supported afterwards.

What you could do with this so far is to release tags and tag packs to the HaloMaps community to be built into Halo Custom Edition map files. This HEK tag format collection that I'm doing first is part of the "Guerilla, Sapien and Tool for Mac" (Halo Editing Kit for Mac) task that I've undertaken, which is the initial functionality of Zeus. Analyzing map cache files is not part of the HEK, but is possible with community applications like Eschaton, HMT and HHK. Most of these are older and no longer being updated. Map cache file analysis, which is what Eschaton users are familiar calling "modding" an existing map file, comes after HEK and Eschaton (and xml) tag file support. With individual tag files of these various formats, you will then be able to drag and drop and customize map files based upon map file templates such as for User Interface map files, playable scenario map files, and bitmaps.map and sounds.map files. These "new map" templates give you the normal game functionalities that the game uses its Blam! engine for, and so map development will be much more straightforward than it is both for Eschaton (which limits modding capabilities due to a lack of metadata editing in the expanded map interface, so you can't add chunks or anything like that) and the HEK (which is difficult to grasp because its projects consist of thousands of tags in hundreds of folders).

But right now, HEK tags are otherwise not so exciting for this MGM community. These are not Eschaton tag meta files, although the format may be identical between Eschaton tags and HEK tags... but they are separate file types which I would need to check when that time comes.

Time frame? I'm working on about one tag per day or every two days. At that rate, as I've said in the past, maybe a couple months until I'm done with all the HEK tag formats. There is revision along the way. For example, today and yesterday all day, I tried putting out a Windows build of Zeus using Cocotron, but decided after all that effort and time that it wasn't happening and was not worth the effort spent on putting out a Windows release at this time.

Also, I am learning along the way, and this is my first application for Mac OS. I'm also planning to change the actr tag's window so that you scroll down straight vertically. Disappointingly, certain people here who tried it out at that time did not respond positively to having a window layout that complements the dimensions of the screen: horizontally-wide rather than vertically-long. I don't really care about their insults. I have neglected discussing this program with them any further, however, except that every so often I was consulting nil for some help in coding. Credits are in the source code where applicable and/or in this topic when applicable. I am not recycling code from other Halo modding programs.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Thu May 30, 2013 7:59 pm

small update to change the actr window layout

all released versions of the Zeus application will use the same link, as long as it is intended to be hosted there:

http://www.halodemomods.com/sparkys_sec ... s/Zeus.zip
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Thu May 30, 2013 11:54 pm

I added a help book, so the Help menu works. I'll add to it as I go.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Fri May 31, 2013 2:33 am

Added tooltips to the actr tag entry labels. To see more information about any particular meta data value in a tag, hover your mouse over its text label, not over the text field where you enter the value.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Sat Jun 01, 2013 4:08 am

Another small update to add calculation capabilities for number-based metadata fields in tags. So you can enter a valid math expression like log(11) or cos(4) and even, without quotation marks, "5 billion + (3/11)" and it will display the calculated value. Recognized text values are math functions and the following strings: "thousand", "million", "billion" and "trillion". This saves you counting zeros when you are looking for high numbers; these strings multiply by their respective numbers, e.g. "thousand" means " *1000", so you can type "1.234 million" and it will show 1234000. If you type in invalid math expressions or something bonkers, the worst that will happen is you get a message in the log file (viewable in the Console application) saying that you gave an invalid expression, and the next entry for that number will give you a value of 0, so you'll have to put it in again after that to keep it.

The math parsing is done with GCMathParser.
Either you are groping for answers, or you are asking God and listening to Jesus.

2310
Ranger
Posts: 686
Joined: Sat Dec 26, 2009 5:16 am
Location: Forerunner Cartography Installation 330, making new maps!

Re: Zeus

Post by 2310 » Sat Jun 01, 2013 4:17 am

That's great! Can it work the other way round (convert numbers to math expressions)?

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Sat Jun 01, 2013 5:18 am

2310 wrote:That's great! Can it work the other way round (convert numbers to math expressions)?
lol

Ok so I figured out Eschaton tag format! Fortunately, Eschaton rearranges things when you import tags into an expanded map and doesn't depend upon the integrity of the IDs in the tag metadata files, so I can use random numbers there just like I did with the HEK tag IDs. THEREFORE, I should have functioning ustr tag exporting to Eschaton format! But instead of actually "exporting" each tag type, I'm going to do a completely new document type for each of them and .... well, yeah. Details. You'll have to start a new document, in other words, you won't be able to just save an HEK tag file as Eschaton format -- for now, you'll have to start a new Eschaton ustr tag or open an existing Eschaton ustr tag that you exported from Eschaton. Then you can change it up and save it and re-import it into an expanded map in Eschaton. But actually converting a tag from one format to another will require an extra step on my part, so that will be a forthcoming functionality.

I'm only going to do ustr with Eschaton format for now because of the relative usefulness it will present immediately. After this, it's back to the grind of the HEK tag types... and figuring out user preferences, which I have a nice resource about now.

See you soon.... it's been another all-nighter.

Also.
Since Eschaton does not set up specific UTIs for its file types, I'll do that and set them as export... so Eschaton will be a secondary program to handling Eschaton tag meta format. I don't think you can actually directly open the tag files in Eschaton anyway by double-clicking them from the Finder as separate documents, so that doesn't really sound like a bad idea. So Zeus will be the primary editor for Eschaton tag files like it is for HEK tag files now. And for maps later on, since there's no other mac program that lets you open the maps as documents to modify... besides Eschaton and whatever other map file editor there is lol. OK so that will be a little bit of a liberty taken, but probably worthwhile.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Thu Jun 06, 2013 8:01 am

Instead of doing Eschaton format, I'm on tag_collection HEK format now.

tagc uses only dependencies. The only other format that remains after dependencies is reflexives, but even those I've done with "for loops".

Would anyone here like to continue working on this with me after I churn out all the data type basics and include a tutorial on how to extend support for each new tag type? The workload includes reading the hex data of each tag file I provide and using the included tutorial to add support for that tag type. The tutorial tells you each step to take, and you get to choose the layout for the window, name the interface items as IBOutlets in the window controller, and hook everything up and do the coding yourself simply by applying the recycled code according to the tutorial and the template for each document subclass and its window controller. Basically, I set everything up for you, and all you do is follow the tutorial. Is anyone interested in helping? If not, this will take me maybe a couple more months before the HEK tag types are done. While I'm reluctant to have someone else work on this project with me, even one or two other people doing this with me would bring the completion date down to a month at most.

I'm leaving for last the tags with associated binary data: snd!, bitm, mod2 and sbsp. That's because I'd like to include previewing, importing and exporting the binary data types, e.g. sound playback in the snd! tag type, image viewing in the bitm tag type and 3d model viewing in the mod2 and sbsp tag types. These will have shaders and radiosity applied.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Fri Jun 07, 2013 2:12 pm

Updates use Sparkle now. Update numbers have changed. I'll no longer be posting update messages here; if you're interested in using Zeus, you can update from within the application. Check the TFP (topic's first post) for when each new file type is usable, but generally this will be mentioned more exclusively in the application's release notes when you see that update.

Update Notes: http://www.blamdevcom.net/zeus/release_notes.html

TFP has new download link location.
Either you are groping for answers, or you are asking God and listening to Jesus.

Sparky
Delta Force
Posts: 4194
Joined: Wed Mar 31, 2004 8:59 pm
Location: New Jersey, USA
Contact:

Re: Zeus

Post by Sparky » Mon Jun 10, 2013 7:18 pm

I'm putting together a new set of HEK tags to reverse-engineer like I did with Sparky's Plugins for Eschaton. This is in lieu of transferring the information from my plugins into Zeus. I would rather just supplement the information with certain discoveries I added to the plugins when I did them.

I had a nice experiment with mod2 tags that you can read about in this forum topic: How Tool compiles model files. Guerilla actually does not impose any limitations on the number of triangles in the triangles block -- I was able to click "duplicate" over 32767 times. However, when saving and closing the tag then, the application crashed, and I was given an error that the tag did not exist when I tried opening it again in Guerilla. LOL. (EDIT: Guerilla doesn't open .model tags and this is why. But apparently it saves them? Hm. Halo doesn't use .model tags anyway.) So Zeus will impose the limit of 32766 triangles per model tag and will give a warning when you try to open a tag containing more triangles and vertices than that, or when you try to import an .obj model with more triangles or vertices than that maximum. I'm trying to provide in Zeus limits that will ensure its complete compatibility with the HEK and Halo's Blam! engine.

Along those lines, I'll be imposing "finagle-able" limits for the dependencies rather than the limits that the HEK would allow. So you would still be able to get away with shooting bipeds out of a weapon, for example. I'll use my best guess for these things and do some testing also to make it as workable as I can without having to test every single possibility for every single tag dependency. You have the low-level tag types like models and collision models which reference the very lowest-level tag types like bitmaps and sounds, so basically anything that references a model or collision model could be a substitute for a similar tag. However, sounds are commonly accepted as alternatives to effects in tags like machines. So I'll have to do some testing to get the hang of what the game engine can handle for substitute tag types. It might be a direct limitation of what the parent tag type is: item or obje for example.
Either you are groping for answers, or you are asking God and listening to Jesus.

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests