Giter Site home page Giter Site logo

openh2's Introduction

Build Status

OpenH2

OpenH2 is an open source game engine and tooling for Halo 2. It serves as a personal project of reverse engineering the Halo 2 (Vista) map file format. I am explicitly avoiding any reverse engineering of binaries or distributed tooling.

Tag Architecture

Reading of a map into tags is currently defined via set of Tag types with attributes on the properties. A deserializer type is generated at compile time by the OpenBlam.Serialization package that was created for this project.

Scenery Tag Example

SceneryTag.cs

Tools

Scenario Explorer

The Scenario Explorer is the main tool used for reverse engineering the tag formats. It contains an integrated hex viewer with best-effort auto-detection of tag sections and references. In "Discovery mode" the tag tree is built based on auto-detection of tag references. In "Exploration mode" the tree is built via the static tag references in the types. The tool is built with AvaloniaUI.

Scenario explorer

MccBulkPatcher

In order to research changes to tags and scripts, patching functionality is present in the project. This is surfaced in the MccBulkPatcher tool that can be used to apply arbitrary tag and script patches to MCC Halo 2 maps. This is currently used to create the mods I've published from base maps. (SpeedMod and Sword Playground)

Miscellaneous tooling

There are a number of other dumping and analysis tools also in the solution, but they're not intended for long term use and will eventually be removed.

Progress History

Script execution is implemented, debug views for bones, colliders, and triggers added. Work on animations is in progress.

December 2020 Progress

https://youtu.be/64IwoZsDBwI

Demo of the Armory (01a_tutorial) mission running in the OpenH2 engine This is the first demo of the following features:

  • Script Execution
  • 3D Audio Subsystem
  • AI Unit Bootstrapping

Armory Demo - November 2020

https://www.youtube.com/watch?v=l8jZkum3AOk

Attempted to implement an ad-hoc physics engine. After abandoning that work was done to integrate PhysX into the engine. Work on parsing game scripts is underway.

Physics Fails - July 2020

https://www.youtube.com/watch?v=nqIXdxn6a88

Fixed mesh loading, now loading all mesh parts, item and vehicle placements, fix for mesh normals, new shader mapping system, more scenario tag loading

Zanzibar - December 2019

https://www.youtube.com/watch?v=eaFrBpENgwY

All static geometry and crate objects loading, with textures (although shaders with multiple textures aren't quite right). Animated meshes are incorrect, such as the Zanzibar house gate.

Zanzibar - November 2019

https://www.youtube.com/watch?v=EiBVZlxRlTA

Basic map geometry and some textures loading

Zanzibar - July 2019

https://www.youtube.com/watch?v=j3ZXj8xkp6c

openh2's People

Contributors

48ca avatar dependabot-preview[bot] avatar dependabot[bot] avatar ronbrogan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openh2's Issues

Information request

Hi!! Nice project! This is targeting linux/opengl/vulkan too? also.. How far you are by now??

Better in-air acceleration

In-air acceleration should decay, over N frames, the delta velocity it causes. In H2 releasing a direction in-air causes you to fall directly down instead of conserving momentum

Investigate Virtualization for Tag Tree and Hex Viewer in Scenario Explorer

Avalonia 0.9 introduces the ItemsRepeater control, which seems to support virtualization. HexViewer performance is terrible with large objects (such as scnr or sbsp tags) and is currently capped at how much data it will show. Virtualizing the hex rows would allow any size tag to be visualized and explored.

Tag tree will need to be reimplemented as a custom control to support virtualization

Implement SHAD tag preview in ScenarioExplorer

Previewing of BITM tags in Scenario Explorer is implemented, however previewing a full shader tag is not supported.

Using the new SHAD -> material mapping functionality in MaterialFactory, a preview of the shader can be implemented right in ScenarioExplorer.

If hot-reloading of the material mapping can be implemented, this can be a good way to easily create new mappings for missing shaders.

Create material mappings for all shader tags

Shader tags reference a Shader Template (stem) tag. This shader template can be used to key a mapping on how a given shader can be mapped to an OpenH2 Material object. Currently, this is implemented as a separate config, where STEM tag IDs are mapped to shader bitmap/input indices:

image
src\OpenH2.Core\Configs\material-config.json

All maps should be loaded, and mappings or aliases added to ensure that all shaders render correctly.

  • 00a_introduction.map
  • 01a_tutorial.map
  • 01b_spacestation.map
  • 03a_oldmombasa.map
  • 03b_newmombasa.map
  • 04a_gasgiant.map
  • 04b_floodlab.map
  • 05a_deltaapproach.map
  • 05b_deltatowers.map
  • 06a_sentinelwalls.map
  • 06b_floodzone.map
  • 07a_highcharity.map
  • 07b_forerunnership.map
  • 08a_deltacliffs.map
  • 08b_deltacontrol.map
  • ascension.map
  • backwash.map
  • beavercreek.map
  • BoardingAction.map
  • burial_mounds.map
  • coagulation.map
  • colossus.map
  • containment.map
  • cyclotron.map
  • deltatap.map
  • dune.map
  • elongation.map
  • foundation.map
  • gemini.map
  • headlong.map
  • lockout.map
  • midship.map
  • needle.map
  • street_sweeper.map
  • triplicate.map
  • turf.map
  • warlock.map
  • waterworks.map
  • zanzibar.map

README.md

Hi,

Please add README with description and features, thanks!

Greets! ๐Ÿ‘

Out-of-tag resource deserialization

Tags can reference data in arbitrary locations in the map file. Currently, these out-of-tag resources are ignored. Support needs to be added to read these resources as well.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.