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: Aug 18, 2019 12:18 AM
Last Visit: Yesterday @ 02:47 AM
Location:
Occupation:
Interests:
Your Age:
What Games do you play:
Avatar:


Send Private Message
Post Statistics
MosesofEgypt has contributed to 511 posts out of 469346 total posts (.11%) in 2,359 days (.22 posts per day).

20 Most recent posts:
Halo CE General Discussion » [WIP] Invader Aug 18, 2019 12:18 AM (Total replies: 28)

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: 28)

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: 10)

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.
https://bitbucket.org/Moses_of_Egypt/

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:

https://discord.gg/D7APNj7


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


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:
surface_edges.add(e_i)
edge = edges[e_i]
if edge.left_surface == s_i:
e_i = edge.forward_edge
vert_indices.append(edge.start_vertex)
else:
e_i = edge.reverse_edge
vert_indices.append(edge.end_vertex)

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)

https://bitbucket.org/Moses_of_Egypt/mek/src/default/notes/Mo's%20Halo%20Whitepapers%20-%20Constants%2C%20Enumerators%2C%20and%20Structures.odt

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

Halo CE General Discussion » Tool reuses to use modified stock tags, help! Feb 22, 2019 02:40 PM (Total replies: 16)

What michelle says is correct. I wrote a script to edit all bitmaps in a folder so it would add a teeny 4x4 dxt1 bitmap with 0 mips onto the end of the bitmaps reflexive. Adds an additional 56 bytes per tag, so it's inconsequential. Also, vap, not everyone can set up a compiler

Halo CE General Discussion » AI\biped in t-pose during cutscenes. Jan 10, 2019 04:13 PM (Total replies: 11)

Something something asserting dominance something something white diamond

Halo CE General Discussion » OBJ to JMS converter Nov 5, 2018 10:47 PM (Total replies: 9)

The error says what you need to know. Export the model with vertex normals, not smoothing groups. Also export it as triangles. Quads and ngons are not supported.

Halo CE General Discussion » OBJ to JMS converter Nov 5, 2018 09:00 PM (Total replies: 9)

Also, I recommend you disable optimization for bsps if the compiled bsp doesn't turn out right(apparently tool doesn't like optimized portal geometry).

Halo CE General Discussion » OBJ to JMS converter Nov 5, 2018 08:44 PM (Total replies: 9)

It's in the "compile tag" menu of mozz in version 1.3.6 and higher.



It's not through pool because it's a compiler I wrote myself. Mozz can compile models, bitmaps, strings, hud_message_text, and physics. It cannot compile sounds, animations, collision, or bsps.

Halo CE General Discussion » OBJ to JMS converter Nov 5, 2018 06:40 PM (Total replies: 9)

Mozzarilla has a model compiler. It can load jms/obj files and optimize them on load. From there you can tell it to either compile a gbxmodel, or spit the models back out as jms files. Be warned though, some shader symbols don't work in obj files, so you might need to open the jms files in notepad and add them back.

You can get Mozzarilla in the MEK or MEKE. Hth


If you are playing PAL Halo it's going to have different physics than NTSC and PC. The PAL version is not true to the original game. If you don't understand what I just said, look it up.


Time: Tue September 17, 2019 3:23 AM 235 ms.
A Halo Maps Website