A Community discussion forum for Halo Custom Edition, Halo 2 Vista, Portal and Halo Machinima

Home  Search Register  Login Member ListRecent Posts
Viewing User Profile for: sparky
About Contact
Joined: Jun 27, 2009 07:24 PM
Last Post: Apr 21, 2019 10:00 AM
Last Visit: Apr 21, 2019 10:30 PM
Location: https://discord.gg/mcEzrrv
Your Age:
What Games do you play:
Dismissal of Truth leaves one to believe lies

Send Private Message
Post Statistics
sparky has contributed to 1993 posts out of 468638 total posts (.43%) in 3,588 days (.56 posts per day).

20 Most recent posts:
Halo CE Technical / Map Design » No one in the Internet Lobby Apr 21, 2019 10:00 AM (Total replies: 4)

I didn't watch the link you posted yet, but here is another if you have the time: https://www.youtube.com/watch?v=Kqkvt4F7T0c&list=PLOLhzsHlG3Qr8R5AgI67kKB9HisblIkZS&index=6

Halo CE General Discussion » Galaxy Verge Apr 21, 2019 09:42 AM (Total replies: 4)

Quote: --- Original message by: SomeFan
what keeps these veterans going

Creative potential and community grow and sustain the popularity of this game. But the game also has to be fun and designed coherently. Marketing might be a contributing factor. There are several game engines from decades past and in recent years that claim to intend to "let you easily make your own game". But they die as they burn platform support. That's why I am not using Unity or Unreal Engine. Also, unless they are bloated, they tend to focus on one perspective of gameplay and asset design. Halo, on the other hand, turns the limitation into a feature, where you have both first-person and third-person models for players.

Halo CE General Discussion » Sparky's Thread Apr 21, 2019 09:12 AM (Total replies: 8)

Happy Easter!
Relevant quote:
"The reason The Father loves me is because I lay down my life and take it back up again. No one takes it from me, but I lay it down deliberately. I have authority to lay it down and authority to take it back up again. This command I received from my Father." (John 10:17-18).

Quote: --- Original message by: DeadHamster
write an external program that plays alongside

I've kind of already done that with the stock game, but with device control states. And it lags even on localhost, which is why I would want to have such synchronization built into a new game engine, so I can fine-tune things like that so they don't appear asynchronous.

Example from three years ago.

Here's a list of about 700 game engines, two-thirds of which are said to be "released" (completed?). https://www.moddb.com/engines/top

I'd want to import the Halo files for use.

Biped ground-related physics are stored inside the .biped tag in undocumented metadata between the "camera, collision, and auto-aim" section and the "contact points" section, if I remember correctly. The rest is either configured using bitmask flags or other metadata visible in the .biped tag or simply hardcoded into the game engine.
Edited by sparky on Apr 21, 2019 at 08:49 AM

Halo CE Technical / Map Design » Adding fake or dummy players? Apr 19, 2019 11:10 PM (Total replies: 1)

You can launch multiple copies of the game. Simply specify windowed view and other minimal launch arguments. Add launch argument "/?" to see the list of options. Ah, and use Halo Multiclient. If you want actual simulated behaviors for connected client dummies, use memory modding.

If you want dummy bipeds instead, such as for testing purposes, simply use Sapien to place them or use chain spawning by shooting a biped instead of a projectile from a weapon.

If you want AI actors, use Sapien to place .actor_variant instances using platoons and squads in the .scenario tag. You can script their behaviors with .hsc files.

Edited by sparky on Apr 19, 2019 at 11:14 PM

Thanks! One step closer to emulating behavior in PlanetSide 2 and other open-space flight simulator games like Vendetta Online.

EDIT: In terms of game engine, you basically just added a feature that revises a desired constraint that was determined to be cool by attaching the camera to the model marker's location. https://www.youtube.com/watch?v=_ENjQvnEAJ8

It can apply to first-person and third-person views, as one could see by switching the vehicle's driver view between first and third person options.

Now maybe do a script that toggles between first person and third person views. Has that been done? Could it be done by overwriting the bitmask value in memory? Food for thought.
Edited by sparky on Apr 19, 2019 at 09:30 AM

Halo CE General Discussion » Sparky's Thread Apr 19, 2019 08:55 AM (Total replies: 8)

How would you change Halo 1 to improve it and give content authors more creative potential?

[EDIT: I've asked this in the past, and I'll check to see if my thread is still online or if I need to dig it up from my archives.]

Blam was not designed to give users of The Internet creative potential. It was designed for Bungie based upon Bungie's creative experience with their older game engines like that used with Marathon, which had "2.5-D space".

The game engine I am thinking to design is to give you creative potential. That's why I ask you, based upon your creative experience with various versions of Halo, and with Blam! and the HEK.

Nobody asked you for ideas when they made the HEK and released it for you to use.
Compare that to Open Sauce which is open source. Open Sauce is a hack, not a complete game engine.
Compare that to me, who is planning to do the work, but is asking you what ideas you want for a new game engine.

I'm not remaking the Halo game engine by its logic, I'm using perhaps the same kinds of metadata for behavior creative potential, and that's the question: how would you change or add to the creative potential you already have with the HEK? I mean besides removing fixed limits like with file size.
Edited by sparky on Apr 19, 2019 at 09:00 AM

(to be determined)

Definitions: https://pastebin.com/QzzQjhfF
Retribution.h: https://pastebin.com/cwqy7A2f

Comparing the definitions with my retribution.h file, it seems that the HEK programs only write bytes that are used to store data. That means it's not obviously definition type sizes that determine data storage. For example, you can see in my retribution.h file that I specify byte flags instead of word flags when the data is written as byte flags, even though the definition is word flags.

Definitions line 2785 and 2795

    word_flags           flags

    word_flags           scale flags#these flags determine which fields are scaled by the contrail density

Retribution.h lines 3062-3064

    // 64, 1
uint8_t flags; //toff 64 8-bit 0x7F
uint16_t scale_flags; //toff 66 16-bit 0x03FF

Since the definition is for two bytes, and two bytes are allocated into the file yet only the second byte is written (big endian in the file), then either the program or the compiler decided to "allocate" 16 bits of space, but the program only wrote one byte because it only used one byte.

What we learn from this initially is that the HEK does not show in Guerilla all the values it uses; it might use 32-bits of flags but show only 2 flags in the interface...
Edited by sparky on Apr 19, 2019 at 07:43 AM

The most obvious sign of predetermined allocation is the definition of blocks containing their sizes. That, combined with the logic of the matter that they knew that they wanted to store it all into memory and that they were using static, calculated virtual memory addresses, means that all this is not done by a compiler flag specifying memory address alignment, but that it is allocated space, the struct sizes based in part upon the definition type sizes, with only used bytes overwritten.

So how did they determine the struct sizes based upon definition type sizes, if the compiler wasn't used to allocate space? There is a lot of padding sometimes, which is what led me to consider that perhaps some non-data Guerilla interface text, which is specified in the interface definitions, was allocated space. But all the larger padding values are actually defined in the interface definitions, and at first glance, at least the explanation and custom types are not assigned bytes in the file.

Bitmap definition lines 1045-1069

Field Class: bshw
explanation type
Dialog Data Offset: 0x4da1d0
Type controls bitmap 'geometry'. All dimensions must be a power of two except for SPRITES and INTERFACE BITMAPS:

* 2D TEXTURES: Ordinary, 2D textures will be generated.
* 3D TEXTURES: Volume textures will be generated from each sequence of 2D texture 'slices'.
* CUBE MAPS: Cube maps will be generated from each consecutive set of six 2D textures in each sequence, all faces of a cube map must be square and the same size.
* SPRITES: Sprite texture pages will be generated.
* INTERFACE BITMAPS: Similar to 2D TEXTURES, but without mipmaps and without the power of two restriction.
enum type
2D textures
3D textures
cube maps
interface bitmaps

Retribution.h line 2476

    uint16_t type;

So it's not worth investigating this with the other definition types as in extracthalotagdefs lines 27-74.

enum datatypes
datatype_string = 0x00,
datatype_char_integer = 0x01,
datatype_short_integer = 0x02,
datatype_long_integer = 0x03,
datatype_angle = 0x04,
datatype_tag = 0x05,
datatype_enum = 0x06,
datatype_long_flags = 0x07,
datatype_word_flags = 0x08,
datatype_byte_flags = 0x09,
datatype_point_2d = 0x0A,
datatype_rectangle_2d = 0x0B,
datatype_rgb_color = 0x0C,
datatype_argb_color = 0x0D,
datatype_real = 0x0E,
datatype_real_fraction = 0x0F,
datatype_real_point_2d = 0x10,
datatype_real_point_3d = 0x11,
datatype_real_vector_2d = 0x12,
datatype_real_vector_3d = 0x13,
datatype_real_quaternion = 0x14,
datatype_real_euler_angles_2d = 0x15,
datatype_real_euler_angles_3d = 0x16,
datatype_real_plane_2d = 0x17,
datatype_real_plane_3d = 0x18,
datatype_real_rgb_color = 0x19,
datatype_real_argb_color = 0x1A,
datatype_real_hsv_color = 0x1B,
datatype_real_ahsv_color = 0x1C,
datatype_short_integer_bounds = 0x1D,
datatype_angle_bounds = 0x1E,
datatype_real_bounds = 0x1F,
datatype_fraction_bounds = 0x20,
datatype_tag_reference = 0x21,
datatype_block = 0x22,
datatype_short_block_index = 0x23,
datatype_long_block_index = 0x24,
datatype_data = 0x25,
datatype_array_start = 0x26,
datatype_array_end = 0x27,
datatype_pad = 0x28,
datatype_skip = 0x29,
datatype_explanation = 0x2A,
datatype_custom = 0x2B,
datatype_terminator_X = 0x2C

Conclusion? The HEK wastes disk and memory space by specifying definition sizes larger than it needs. It's a programming flaw, not an artifact of the compilation process.

That's another credit towards using a database to store its values. But I knew that already, and you probably knew this already. Yet using a database to retrieve file metadata in part or whole would be slower than reading a single file, because you would have the overhead of the database software instead of the operating system kernel or whatever accesses the data on the filesystem for your program to store in memory. And I don't need constant analytics for file metadata; with the sparse files feature on recent filesystems, you don't have to worry so much about padded bytes, but as far as tag duplicates, that can all be checked by storing a checksum of each tag in the collection, and as far as overall data size, you can use quick compression types, and distribute archives in the read-only squashfs filesystem format.
Edited by sparky on Apr 19, 2019 at 08:20 AM
Edited by sparky on Apr 19, 2019 at 08:25 AM
Edited by sparky on Apr 19, 2019 at 08:28 AM

Halo CE General Discussion » Sparky's Thread Apr 18, 2019 01:42 PM (Total replies: 8)

Quote: --- Original message by: hondros
write a brand new engine that can run the Halo CE maps.

That's it.

My first step is to go through the tag metadata in a once-over conversion to usable C code. I'll share that and it can be a reference.
Then I think more about whether a tag system is really the best idea nowadays.
Then I figure out what kind of metadata I want to keep and what should be reorganized.
Then I'm going to skip forward to the networking concepts, to make it so lead is not necessary and responsiveness with actions is acceptable. [Thoughts along the lines of, "Maybe UDP is possible if it's merely the client sending a packet to request an action and the server sending back a packet to say it's OK."] And I want to find out how Halo 2 does it; if it trusts the client to an extent but uses some private hashing communication with the server to validate the result.

All of the technical stuff I plan to do myself, but I want to invite you all to help decide what kinds of behaviors and features there should be. I invite you all to basically decide what metadata fields should be added to tags. [EDIT: I'm looking for suggestions like those given in the past, such as ragdoll physics, but also additions to types of information stored in the files beyond what Halo 1 includes. Do you have any ideas on how to give AI less cookie-cutter movements and behavior responses?] I'll also look at what Open Sauce added. In that regard, I want the game engine to be in open public development.

I've also had an idea for how to earn income, since I've been looking at old shareware software recently. My idea is that the game engine and resulting game would be free as community-developed (again, you all could help with the ideas and I would do the coding), but to make an "online account" for multiplayer (connecting to the server) would require a one-time registration fee. Something like $1 to help keep the servers running. You would play single player for free and when you want to make a multiplayer account, you get assigned a number by the server (saved to your user preferences file), and that number identifies your account to the server so you can log in. Other functionality with logging into the web site would be similar to common practice. The file with the number simply becomes your user ID hash, kind of like CD key hash, but limited to one per player account, not per game installation. Let me know how that sounds. [EDIT: Using a local file or ID is unnecessary.]
Edited by sparky on Apr 19, 2019 at 09:10 AM

Halo CE General Discussion » Galaxy Verge Apr 18, 2019 09:14 AM (Total replies: 4)

The issue is primarily that the projects I mentioned in the past were really intended to be means for me to gain experience with experimentations with software development. Unfortunately, as you mentioned, my reputation suffered because, even though I wanted to finish the projects, in the back of my mind, I really knew that it was all really simply practice and learning, so they were never fully finished in the ways that I had mentioned I wanted to experiment. I did release a bunch of different incomplete apps, and a few for slapstick comedy, but my interests have been mostly with doing the work, not with putting forth a polished work, and that's why there's no end result application but merely a lot of source code and innovative SAPP scripts and the like.

While I'm still in a learning and experimentation phase of software development, I think the next step for me is to design a new game engine that incorporates ideas from what I've learned while studying how Halo works.

But I gripe about several aspects of Halo, such as what I've mentioned in other threads recently, and I'd rather have fun making a new game and trying to include the worthwhile parts of blam than continue along the dead end road of scripts and hacks and more experiments with this game that is about to reach end of life on Apple's side in multiple ways (dropping OpenGL, dropping 32-bit, etc.). A fellow software developer I met online expressed their opinion that I should forget Apple, but the fact is that I use a Mac, even to run Windows 7.

Thus, my former thoughts were, "if I'm doing it in C anyway, why not also do it in Objective-C and C# for Mac and Windows?" The problem becomes that if you use Objective-C for interface, you basically have to use it for data structures... and I have already done several renditions of programs in exclusively Objective-C and C#. My work left off in the user interface: that Auto Layout was too slow so I have to use manual layout (I forgot what that's called) and that I would want to use WInForms because WPF is too weird and complex for me. Then you get into how to integrate OpenGL, whether you build it into the program or use some framework like you link with Xcode... So that was all still experimentations, and still only with handling Halo's files. And along the way, I ran into situations where the coordinate systems were flipped on different axes and several other oddities with Halo. But I think I gained enough experience practicing that I can keep going now with a new game engine.

All that means that I was destined to stop using Halo anyway. And so I think that time has come. So while I can regret not making decent software for the members here to use, especially when they ask about bugs and errors with the existing HEK and community-developed software, I am realizing this fact: I don't want to debug software whose source code I didn't write, and I don't want to deal with errors due to engine limitations and behaviors with which I don't agree, especially while I am proceeding to take the time to design my own game engine with the goal of not having such limitations or doing things in such a way.

I appreciate the warm sentiment.

Halo CE Technical / Map Design » CRC32 Apr 18, 2019 08:43 AM (Total replies: 3)

Yes. If it says "checksum" with Halo 1, CRC32 is the type of checksum it's using. It's also used in part of the 64-byte header of each tag file, and probably with other things.

Halo CE General Discussion » Galaxy Verge Apr 15, 2019 08:59 PM (Total replies: 4)

galaxyverge.com is the main domain that I use. I have had multiple projects over the years using several different domain names, but that's the main domain name.

I'm organizing it. For example, I was hosting mirrors of archival sites like blamdepot and xboxdb. Duplicate files were common. No longer. I'm decompressing everything and removing any residual extraneous files that were not already removed by what I've already done.

Also, since I'm not modifying my own files since earlier renditions of the archive, I'm simply going to put it into a squashfs read-only filesystem. Via SFTP, you will be able to access individual files and, if you have the disk space, download the entire .squashfs archive to extract using 7-Zip. I'll think about also presenting the archive as a typical HTML-generated directory listing in case you don't want to use an SFTP program for whatever reason.

I realize this is kind of late news, but I don't know what people have done since I stopped using this forum. If there is new software or information, it unfortunately will remain apart from my archive.

Once it's all sorted, I'll leave it up for at least several months. By this time, you should be comfortable with other options.

Thinking back on my various Halo-related projects, the only other project I intend to complete is doing some C coding to kind of remake Halo's file format structs. I don't know who is interested in that anymore besides myself. I'd like to glance through some of the work others have done and compare to my results before presenting to you all here some links to what would be my definitive Halo C source files.

After that, I'm officially done with Halo, to begin taking all that I've learned from these matters and pursuing the design of a new game engine. I've already mentioned this in another thread.

I hope you enjoy using whatever I come up with throughout the next several months.

Halo CE General Discussion » HELP ME WITH VIRUS Apr 15, 2019 07:48 PM (Total replies: 6)

If that doesn't work, boot into a Windows 7 or newer installation disk, copy all your valuable files to an external hard drive, and completely erase and reformat your system disk.

Halo CE General Discussion » Sparky's Thread Apr 15, 2019 07:31 PM (Total replies: 8)

I like testing limits and constructing designs that eliminate extents.

It's often simple to test limits. I've done so in many situations, such as with Altimit01's Eschaton, prompting him to make version 0.8.1. I tested limits with SAPP, and who hasn't tested limits with the HEK, and many of us have messed around with Halo's runtime memory. I also used to make lots of different maps for Halo Demo PPC Mac and Halo MD and Custom Edition -- I stopped counting at 50 -- to experiment with different gameplay. I tested server configurations, etc. etc. etc. Fun times. I spent years gathering ideas from a wide variety of games, single player, multi player, etc., and I gained experience setting up and managing servers, using different operating systems, looking at a variety of software, gaining ideas, designing web sites, messing around with various scripting and programming languages, and so on. (I'm simply glossing over this.) And I've done so many different things with Halo, much more than most people, and I have for the most part enjoyed sharing some of my work.

I have no qualms with high workloads. And when a pattern has been established, there's a regex sequence and a "for loop" for that.

Now I am pondering how I might design a new game engine. Instead of mentioning what I've already learned and what improvements I would want to make beyond what Halo and contemporary games typically offer (which would take too long), I'd simply like to say that I have in mind using C and the very same OpenGL the bridge to which Apple has chosen to burn.

Now I didn't like GitHub when I was using it, and this forum does not perfectly display code blocks, so I'm kind of left with Pastebin or hosting plain text files on one of my web servers to show source code. I know, I know, there are alternatives. Whatever.

So there are a few things I'd like to do first, before I dive into discussing topics like C structs and kernel drivers. At the moment, I'm transferring files around, off of floppy disks onto some 4TB drives... and this will all take some time. I'm not proposing a timetable for progress (as usual), I simply want to present some thoughts to you all, for discussion. You know some of what I've talked about in the past, and you've probably already seen or heard of some of what I've done, especially if you were in my various Discord servers in the past. Nevertheless, I'm going to consider irrelevant whatever experience and perspective you think I have and simply present some ideas for (additional) discussion.

Programming Language and Memory Handling

I have tried to do everything in C when I could, and to design interfaces using Objective-C for Mac and C# for Windows. Of course, there's GTK or whatever for Linux, but I've only focused on web page interfaces on Linux so far.

OpenGL is in C.

I kind of dislike C++. It's too much for me. I'll leave it at that.

MacSoft's port of Halo PPC Mac was of course a Carbon application, even with the Universal Binary version (I guess, nil or Samuco or 002 could correct me if they want). Samuco did his OpenGL injections or whatever with his HaloMD plug-ins. That was weird. Anyway... I have no interest in DirectX at this time.

And there are weird alterations that Halo does with things, like I mentioned in another thread how it inverts the CRC32 result.

All of these things hint at a path that is saying, "Go back and put all the Halo file data structures into C structures, including all the work from retribution.h, and then rethink the necessity of tag files for flexibility; consider filesystems like squashfs or others with sparse file support; using a (relational) database has been a shoddy approach... and load all the data into RAM all at once."

Halo was designed for low-memory systems and uses static address pointers. Blam is a work of art, but let's re-think the approach given modern hardware. We no longer have to fear thrashing the hard drive since many people nowadays have PCs that use 1TB SSD drives and at least 16GB of RAM.


I remember that years ago, nil commented that Halo spams UDP packets. Halo was designed for 56k connections, as you know, limiting that to 4 players per multiplayer game. And its same-system split-screen co-op mode has up to 2 players, and its same-system split-screen multiplayer mode has up to 4 players; it supports at most 16 players per game server instance.

You can have millions of simultaneous connections to a computer. And if you're using a single IP address, and you want to be super-duper conservative about the whole thing, you can of course have tens of thousands of simultaneous connections. Something's got to improve.

UDP spamming is debatable. UDP vs RDP vs TCP is debatable. There is plenty of room to discuss scalability and proper programming strategies.

Halo 2 doesn't have the ping lead issues that Halo 1 has. It has been advised to never trust the client; does Halo 2?

Don't even get me started on the absurd overhead of GameSpy. At least some people have hacked into the game some kind of IPv6 support.


Looking at the assembly, I wouldn't want to touch Halo's source code. They did what they could, using the technology they had at the time, and it was pretty impressive for ca. 2000, right?

Optimization is a consideration, but I'll leave it at that for now. Let me know what you guys think. I haven't even begun discussing physics calculations or other fun math things. Eventually, perhaps... And there are several differences between Halo 1, Halo 2, and newer versions of the game engine.

I haven't been around for half-a-year, and I'm still doing various things. Someone asked in another thread and in a PM, and I was transferring files anyway, so I'll put some info here later about a new mirror of files from the Halo Maps Archive.

Edited by sparky on Apr 15, 2019 at 07:36 PM

Halo CE General Discussion » Faster way to download files? Apr 15, 2019 02:36 PM (Total replies: 4)

To download all the files from that list, use wget or similar program and filter by only zip files, or use a regular expression to modify the HTML text to show only the zip file links as one per line and use a batch script, for example.

I replied to your private message. I have occasionally read the logs on my server and noticed there is still an interest in Halo-related files I had archived. In the past, I did HTML directory listings, but I'm going to do SFTP instead. I'll post a new thread when both the files and SFTP are ready. With SFTP, you can download files individually or in bulk. Consider using:

Since you asked about alternatives to hce.halomaps.org, notice that HaloMaps does not use HTTPS. Halonet.net also does not use valid HTTPS. Applying HTTPS is a trivial task for web site owners, therefore I do it for myself. This forum could also generally use updating, in my opinion. It has a lot of information, so I archived it up to a point.

But my interests have moved elsewhere.

Halo is a work of art, and its players have done a lot with it, extending its expected lifespan and thus Microsoft's profit margins. But attention to old software is merely showing what has been done. I think that the reconsideration of basic aspects of the game engine is neglected, and that is where the player and modder and programmer interests fall short. That's why several programmers have moved on. Discussions that Bungie programmers mentioned have no soil here; I did as they said was possible, using a database instead of the tag file system, but all such discussions ultimately are outside the scope of this community, because the results become something other than Halo. It's development of a new and different game engine. I've done so many different things with this game and its files that if I were to list them all, you'd probably ask me why I haven't simply made a new game. So that's what I would want to discuss; my interests in the hundreds of gigabytes of files I have paid and worked to have downloadable is waning. And I've already essentially stopped using this forum.

My work is dynamic. Links change. Files are modified. Features are added. Systems are overhauled. Tutorials are revised for brevity. Directories are sorted. Software is updated. I change my mind about whatever it is that I'm designing.

Halo Maps Forum has been rather static and consistent. (Kudos to Dennis.) Learn to work with such systems by practicing regular expressions and exploring software options.

In the mean time, the rest of us will be making new games and apps for you to enjoy.

Halo CE Technical / Map Design » CRC32 Apr 11, 2019 11:32 AM (Total replies: 3)

Halo flips the bits of the typical CRC32 calculation result.
Two approaches are here from my old projects, one shown in C and the other using a calculated table shown in C#.

Take from the Paste Bin links, not the shown text blocks. Certain text combinations shatter Halo Maps Forum.


const int order = 32;
const unsigned long polynom = 0x4c11db7;
const int direct = 1;
const unsigned long crcinit = 0xffffffff;
const unsigned long crcxor = 0xffffffff;
const int refin = 1;
const int refout = 1;
unsigned long crcmask;
unsigned long crchighbit;
unsigned long crcinit_direct;
unsigned long crcinit_nondirect;
unsigned long crctab[256];

unsigned long halo_crc32_reflect (unsigned long crc, int bitnum) {

// reflects the lower 'bitnum' bits of 'crc'

unsigned long i, j=1, crcout=0;

for (i=(unsigned long)1<<(bitnum-1); i; i>>=1) {
if (crc & i) crcout|=j;
j<<= 1;
return (crcout);

void halo_crc32_generate_crc_table() {

// make CRC lookup table used by table algorithms

int i, j;
unsigned long bit, crc;

for (i=0; i<256; i++) {

crc=(unsigned long)i;
if (refin) crc=halo_crc32_reflect(crc, 8);
crc<<= order-8;

for (j=0; j<8; j++) {

bit = crc & crchighbit;
crc<<= 1;
if (bit) crc^= polynom;

if (refin) crc = halo_crc32_reflect(crc, order);
crc&= crcmask;
crctab= crc;

unsigned long halo_crctablefast (unsigned char* p, unsigned long len) {

// fast lookup table algorithm without augmented zero bytes, e.g. used in pkzip.
// only usable with polynom orders of 8, 16, 24 or 32.

unsigned long crc = crcinit_direct;

if (refin) crc = halo_crc32_reflect(crc, order);

if (!refin) while (len--) crc = (crc << 8) ^ crctab[ ((crc >> (order-8)) & 0xff) ^ *p++];
else while (len--) crc = (crc >> 8) ^ crctab[ (crc & 0xff) ^ *p++];

if (refout^refin) crc = halo_crc32_reflect(crc, order);
crc^= crcxor;
crc&= crcmask;

crc = ~crc & 0xffffffff; // Halo has an inverted CRC32 value and we also want to mask to strip unusable bytes from unsigned long to unsigned int


uint32_t halo_crc32 (const void* p, unsigned long len)
int i;
unsigned long bit, crc;

// at first, compute constant bit masks for whole CRC and CRC high bit

crcmask = ((((unsigned long)1<<(order-1))-1)<<1)|1;
crchighbit = (unsigned long)1<<(order-1);

// check parameters

if (order < 1 || order > 32) {
printf("ERROR, invalid order, it must be between 1..32.\n");

if (polynom != (polynom & crcmask)) {
printf("ERROR, invalid polynom.\n");

if (crcinit != (crcinit & crcmask)) {
printf("ERROR, invalid crcinit.\n");

if (crcxor != (crcxor & crcmask)) {
printf("ERROR, invalid crcxor.\n");

// generate lookup table


// compute missing initial CRC value

if (!direct) {

crcinit_nondirect = crcinit;
crc = crcinit;
for (i=0; i<order; i++) {

bit = crc & crchighbit;
crc<<= 1;
if (bit) crc^= polynom;
crc&= crcmask;
crcinit_direct = crc;

else {

crcinit_direct = crcinit;
crc = crcinit;
for (i=0; i<order; i++) {

bit = crc & 1;
if (bit) crc^= polynom;
crc >>= 1;
if (bit) crc|= crchighbit;
crcinit_nondirect = crc;

uint32_t result = (uint32_t)halo_crctablefast((unsigned char *)p, len);
return result;


using System;

namespace Furnace.Fire
internal static class CRC32
static readonly UInt32[] Table = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
public static UInt32 Hash(byte[] data)
UInt32 crc = 0 ^ ~0U;
int length = data.Length;
for (int i = 0; i < length; i++) { crc = unchecked(Table[(crc ^ data) & 0xFF] ^ (crc >> 8)); }
return 0xFFFFFFFF - (crc ^ ~0U);

Halo CE Technical / Map Design » Differences between actor types? Apr 7, 2019 02:04 AM (Total replies: 2)

If you're referring to the different races of aliens and such, and "mounted weapon", then it's merely a number value, basically to keep things organized. It has no substantial alteration on behavior; merely to keep track of enemy / friend teams.

Halo CE General Discussion » 4 Bytes in Tag Header / Reflexive Count Apr 7, 2019 01:57 AM (Total replies: 3)


Halo CE General Discussion » [Release] extracthalotagdefs Aug 28, 2018 10:15 PM (Total replies: 4)

One last huzzah as I run for the hills. Keep in touch with me on my discord server if you want (https://discord.gg/mcEzrrv).

Tag definitions ripped from guerilla.exe.

Kornman said he did something like this for his Prometheus application. I see evidence of such in its source files.

Enjoy. All work done by myself, no one else helped, I figured it out on my own and did it on my own without any miscellaneous consultation among the community; evidence that I can proceed "on my own", as I intend to do. Included is the C source code for the extracthalotagdefs program, which takes one parameter -- a file path to guerilla.exe -- and prints out some pseudo-code definitions. You can modify extracthalotagdefs if you can decipher it and make it work to print out the definitions in any other format you desire.

Note that this is not a magic bullet; as I mention towards the top of the printout, these definitions do not represent on-disk or in-memory file structures. They do represent most or all of the relevant data available within the guerilla.exe bytes.

For continued updates on my other works, you'll have to join my discord. (If you can't, or if you were banned, get my work from someone else or do it yourself.)

Program source code (in C): https://pastebin.com/aS5pfGfx
Output: https://pastebin.com/QzzQjhfF

And finally, one last video message to "the community": https://www.youtube.com/watch?v=AAIdsU41vdU

Good luck to you all. Be well. Sparky out.


Halo CE General Discussion » [Release] Sparky's Version of Guerilla Aug 28, 2018 09:56 PM (Total replies: 7)

Such a feature would be inappropriately complicated for the time it takes to change static pointers and overwrite apparently unused bytes in the .exe. And there would be no guarantee some random other thing wouldn't break in the attempt. In fact, I was just thinking about this on my own in my discord server. Since I don't use this wonderful forum anymore, I invite to you my less-wonderful discord server: https://discord.gg/mcEzrrv hope to see you there.

Time: Tue April 23, 2019 1:24 PM 125 ms.
A Halo Maps Website