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: MosesofEgypt
About Contact
Joined: Apr 3, 2013 04:12 PM
Last Post: Mar 14, 2020 10:35 PM
Last Visit: Mar 17, 2020 07:34 PM
Your Age:
What Games do you play:

Send Private Message
Post Statistics
MosesofEgypt has contributed to 518 posts out of 464915 total posts (.11%) in 2,653 days (.20 posts per day).

20 Most recent posts:
Halo CE General Discussion » Any updated animation exporters? Mar 14, 2020 10:35 PM (Total replies: 4)

Mozzarilla allows decompiling entire animation tags into jm files. It has the same option for gbxmodels. Refinery allows both of those as well, but from map files(just put it in data extract mode).


If you need help, ask on the github, because I don't maintain it anymore.

Halo CE General Discussion » Refined Tags FATAL Bug Jan 30, 2020 10:48 PM (Total replies: 2)

Remove refined cortana. This issue will occur in the control room of b40/c40 as well. I had to put a lot more shader passes on her to get the original effect, and while the game doesn't care, sapien freaks out and crashes.

Halo CE General Discussion » [Utility] Reclaimer Dec 13, 2019 11:56 AM (Total replies: 144)

Not to steal Gravemind's thunder, but shelly has mapped out the AMF structure fully, and has actually written a tool to convert that to a gbxmodel tag. The reason I mention this is because we are making a set of blender tools for Halo, and an AMF importer could be very easily added to the set.

Halo CE General Discussion » Adjutant News and Info! Nov 19, 2019 12:00 AM (Total replies: 996)

Use refinery. Refinery can rip most of the sounds, and can decompress the dtz maps to regular maps.

Yeah. I don't have a good recommendation for how to go about importing all the scenery. Aether and open sauce supposedly have ways to import them for use in lightmap baking, but idk how to do it precisely.

The rocks and everything are scenery objects, which must be imported separately and placed separately. The scenario tag defines a palette of machines, sceneries, bipeds, vehicles, etc, and has a list of which instances of each to make, where they're located, and how they're rotated.

The textures are missing because all you did is import the model. If you want those, I recommend running Mozz again, going to Tools->Tag data extraction and make sure "bitmap" is selected(unselect the rest because you'll just extract a bunch of stuff you don't need). Now click the "Browse" button in the "Directory to extract from" box and select the root of the tags directory and click "Extract".

This will extract every bitmap in the tags directory to dds files, including all the lightmap pages. The bitmaps will be placed in a "data" directory in the same folder as the tags directory, with the same hierarchy as the tags directory. You should be able to use those dds files in 3ds max.


Several months ago I added to Mozzarilla the ability to convert every bit of geometry and markers in sbsp tags to gbxmodel tags. Since we have gbxmodel importers for 3ds Max, this will let you import those converted bsps. Download the MEKE, open Mozzarilla, go to Tools->Tag conveters->structure_scenario_bsp to gbxmodel and use that to convert the model. You can choose what to include, but for just navigating it in another engine you'll want Renderable, Lightmaps, and Collidable.

You can get the MEKE here(includes gbxmodel importer scripts for 3DS Max):


Halo CE General Discussion » [WIP] Invader Aug 18, 2019 12:18 AM (Total replies: 31)

Quote: --- Original message by: Dennis
The term you are looking for is narcissism.

Also what this guy said.

Halo CE General Discussion » [WIP] Invader Aug 17, 2019 04:04 AM (Total replies: 31)

What that guy said.

Halo CE General Discussion » [Utility] Blade - JMS Exporter for Blender Jul 21, 2019 06:06 PM (Total replies: 4)

Just so you know, nodes and markers need to be sorted alphabetically by name when exported. The nodes need to be sorted alphabetically, grouped by how deeply nested they are.

Lets take the cyborg for example:

depth node name
0 bip01 pelvis
1 bip01 l thigh
2 bip01 l calf
3 bip01 l foot
1 bip01 r thigh
2 bip01 r calf
3 bip01 r foot
1 bip01 spine
2 bip01 spine1
3 bip01 l clavicle
4 bip01 l upperarm
5 bip01 l forearm
6 bip01 l hand
3 bip01 r clavicle
4 bip01 r upperarm
5 bip01 r forearm
6 bip01 r hand
3 bip01 neck
4 bip01 head

You would sort them by depth, and within each depth, sort them alphabetically.
So the proper order to sort them would be:

index node name
depth 0
0 bip01 pelvis

depth 1
1 bip01 l thigh
2 bip01 r thigh
3 bip01 spine

depth 2
4 bip01 l calf
5 bip01 r calf
6 bip01 spine1

depth 3
7 bip01 l clavicle
8 bip01 l foot
9 bip01 neck
10 bip01 r clavicle
11 bip01 r foot

depth 4
12 bip01 head
13 bip01 l upperarm
14 bip01 r upperarm

depth 5
15 bip01 l forearm
16 bip01 r forearm

depth 6
17 bip01 l hand
18 bip01 r hand

I'm not entirely sure about upper/lower case, but IIRC, halo lowercases node names when compiling the intermediate jm formats into tags.

For reference, this lines up with how halo sorts the cyborgs nodes:

Edited by MosesofEgypt on Jul 21, 2019 at 06:14 PM

Halo CE General Discussion » [RELEASE] BioGoji's Campaign Mod Version 1.5 Jun 30, 2019 04:03 PM (Total replies: 11)

You've come a long way from struggling to figure out how to get a map to extract and properly recompile. Glad to see you're still at it and having fun. You've put together some interesting maps from the looks of it, and know your way around how the game works pretty well now.
Edited by MosesofEgypt on Jun 30, 2019 at 04:07 PM

To this day, the only way we can compile scripts is with sapien. Nothing else can.

These definitions contain a lot of hidden fields that the HEK tools don't have included in their definitions. If we went just by what if in the definitions, many extracted tags would be broken.

Python 3 to be specific. If you're interested, here's my repositories.

MEK is the Moses Editing Kit, which contains my replacements for Guerilla and HEK+, a lovely wrapper for Tool, and a bunch of converters. Mozzarilla is the replacement Guerilla, Refinery is the replacement HEK+, Binilla is what most of Mozzarilla is built on, Supyr Struct is a binary structure handling library, and Reclaimer is my library for interfacing with all things Halo.

If anything, Reclaimer is probably what you'd be interested in browsing through. One of the things it contains is definitions for every tag structure(including most of the hidden fields and their purposes). If you're interested in talking with all of us in an active Discord server, here's ours:


Quote: --- Original message by: LaikaGlove
Quote: --- Original message by: Bungie LLC

For Halo 1 & 2 Bonobo has the tag definitions so you can view the collision tags. It's definitely possible to write something to extract straight to a halo 1 collision tag, but extracting straight to jms is a little trickier. I also don't have those tags mapped out for the later games so that would have to be done as well.

A couple of the hurdles for extracting straight to jms are:
- The vertex positions exist in the collision model, but they aren't oriented with the bones so I'd have to look into the math for translating those points to reorient them with the bones.
- The triangles are totally lost and only exist in the form of an edge tree, which I couldn't figure out how to reconstruct back in the day. There's likely an algorithm to do this that I wasn't aware of at the time though.

Took these from my collision converter, cleaned them up a bit, and made them a little more generic. You can use one for getting the edge loops to traverse the vertices to outline the collision surfaces, and you can use the other to turn those edge loops into triangles. Use them as you see fit.

def edge_loop_to_fanned_tris(edge_loop):
Generates a list of fanned triangles that represent the
coplanar, convex surface defined by the edge loop.
triangles = [None] * (len(edge_loop) - 2)
v0_i = edge_loop[0]
for j in range(len(edge_loop) - 2):
triangles[j] = (v0_i, edge_loop[j + 1], edge_loop[j + 2])

return triangles

def get_bsp_surface_edge_loops(bsp):
Returns a dictionary of collections of edge loops separated
by the surfaces material index. These edge loops specify
the order to traverse the vertices to trace the outline of
the coplanar, convex surface.
surfaces = bsp.surfaces
edges = bsp.edges

edge_loops = {}
# loop over each surface in the collision.
# NOTE: These are polygonal, not just triangular
for s_i in range(len(surfaces)):
surface = surfaces[s_i]
e_i = surface.first_edge

surface_edges = set()
vert_indices = []
# loop over each edge in the surface and concatenate
# the verts that make up the outline until we run out
while e_i not in surface_edges:
edge = edges[e_i]
if edge.left_surface == s_i:
e_i = edge.forward_edge
e_i = edge.reverse_edge

edge_loops.setdefault(surface.material, []).append(vert_indices)

return edge_loops

As for the rotations though, I can't provide anything so succinct, as mine relies on my Matrix module and classes, as well as a decent understanding on how to apply quaternion transforms.
Edited by MosesofEgypt on May 29, 2019 at 01:27 AM

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


And before you ask, no, it's not in python, it's C++.
Edited by MosesofEgypt on Apr 3, 2019 at 01:55 AM

Changing the execution folder exists. The cwd directive tells pool what directory to run tool from. I use it all the time.

Maybe I could put an optional setting in Pool to apply this patch if it doesn't already exist.

Halo CE Technical / Map Design » Having an issue compiling d40 levels Apr 1, 2019 10:17 AM (Total replies: 12)

Did you use hek+, or refinery?

I specifically disabled extracting scenarios, bsps, sounds, and bitmaps from anniversary maps. Bitmaps, sounds, and bsps are missing their rawdata in anniversary maps, so you'd only be extracting partial tags. Scenarios are a different issue. I don't know how the recorded animations are stored, so I can't properly byteswap them. Additionally, unless hek+ got an update after anniversary released, I guarantee it won't be able to properly extract tags. I've personally extracted all of b30 anniversary with refinery(replacing the tags types I mentioned with pc equivalents) and rebuilt and played it for custom edition. Aside from some weirdness with the hud scalingg, it plays perfectly.
Edited by MosesofEgypt on Mar 18, 2019 at 07:23 PM

Time: Tue July 7, 2020 6:46 PM 250 ms.
A Halo Maps Website