Git Product home page Git Product logo

open76's Introduction

Open76

Open76 is an engine reimplementation of Activision's Interstate '76 on the Unity platform.

Screenshot 1

What works?

Parsing and rendering of pretty much everything contained in a level (including cars).

The mission stack machines are now underway; Open76 can parse and run the stack machines. However, there's still a lot of machine actions that needs implementation.

The simulation does not work yet. Driving around works as well as the various camera modes. The car simulation needs a lot of work (engine simulation, gearbox, etc.).

Some features of the above are not yet fully implemented or have problems - see Issues.

How do I run it?

  1. Open Level.scene in Unity.
  2. Find the gameobject called "Game" and set the "Game path" property to your Interstate '76 install directory.

For now, Open76 requires the uncompressed ZFS of version 1.0 as delivered on the original CD. It cannot parse the compressed ZFS present in later versions.

Open76 can now parse both the original uncompressed version and the compressed version of the ZFS. Nitro pack seems to have a different mission file format, this needs to be investigated.

How do I contribute?

Fork this repository. Look in the Issues list. Communicate that you're committing to fixing an issue and finally submit a pull request.

Why?

For fun. Tinkering with Interstate '76 started many years ago, but I never made much progress on the monstrous number of file formats presented. Until early 2017 when I discovered that blogger "That Tony" reverse engineered many of the formats on his blog http://hackingonspace.blogspot.se. Some formats had been reversed years ago by modders, although these specifications were hard to find since most of the sites were long gone (bless web-archive!).

In my opinion, Interstate '76 is one of the best games ever made. It suffers from an aging engine though, and in recent years it has become increasingly harder to play it on modern platforms. The primary goal of this project is to provide the same playing experience in a modern engine while conforming to the original data file specifications. A long term goal is to extend the engine with various modern features, such as HMD and VR support.

Acknowledgements

Without "That Tony"'s wonderful blog (http://hackingonspace.blogspot.se) and reverse engineering skills, this project would never have gotten anywhere. Tony reverse-engineered most of the formats used by I76.

More screenshots

Screenshot 2 Screenshot 3 Screenshot 4 Screenshot 5 Screenshot 6 Screenshot 7

License

Licensed under the GPL version 3.

This is in no way affiliated with or endorsed by Activision or any other company.

open76's People

Contributors

jjjohan avatar r1sc 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  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

open76's Issues

Vehicle doesn't drive - Any chance at reviving this project?

@r1sc @JJJohan I downloaded this and got it to run on the proper Unity version, but I can't figure out how to get the vehicles to drive. I'm able to switch vehicles by changing the parameters in the 'game' object once the level is loaded, then I can click the camera and have it focus on the vehicle, but the vehicle doesn't drive. I can manually change the throttle and steering values on the car physics script once in-game, which makes the car drive, but actual input doesn't work.

It would be cool to revive this project. I'm a game developer, but not a coder. So I'm not sure how much I could actually contribute (if at all), but I'd love for this project to get revived. Even if you could help me get things working in the editor, that'd be cool. Thanks.

Basic Weapon Firing

With most of the interior car interface out of the way now (with exception of the speedo/tacho) I figured I'd have a go at one of the real fun bits - the weapons.

We've got the models in place now and I've been able to squeeze even more data out of the GDF files through trial and error of editing the files in a hex editor and then observing the changes in the original retail version of the game (it's a lot easier to do that when the ZFS file isn't compressed)

We've got all the basics needed to at least make an attempt of firing the weapons.

Useful GDF bits:

  • Ammo count
  • Weapon health
  • Weapon group
  • Burst count
  • Weapon mass
  • Burst fire rate
  • Weapon mesh
  • Weapon facing direction (from VDF)
  • Fire rate
  • Firing sounds
  • Projectile velocity
  • Projectile damage
  • Projectile mesh

What I've got implemented in a branch so far:

  • Interface stuff
    • Cycling between weapons.
    • Weapon grouping.
    • Separator between front and rear facing weapons.
  • Shooty stuff
    • Firing projectiles
    • Firing all grouped weapons.
    • Multi-shot weapons (e.g. fire-rite rockets fire rockets in a 3-shot burst before a longer reload pause)
    • Loading projectile models and textures

I've found that some weapons do not have meshes for the projectiles. Rockets generally do, but things like the 30-cal machine gun does not have a mesh - it only has a texture. Right now creating a 1x1x1 cube and texturing that, then shooting that out of the machine gun. It doesn't look great.

Some misc notes:

  • I believe data blocks in the GDF files prefixed by 'O' refer to the projectile (Ordinance?) and 'G' refers to the actual weapon (Gun?)

  • There is a mysterious string for each weapon in the GDFC block (which stores all the useful weapon info e.g. ammo, firing rate, etc.) - I can't find any references to this string elsewhere in any other files. Changing it doesn't seem to do anything in the original game. Examples are 'slg01' for gmlight.gdf and 'spp01' for gdumb.gdf.

  • The GPOF block is not really understood. At first glance it appears to be the Forward, Right, Up and Position vectors for 4 separate objects. Zeroing this block results in projectiles hitting thin air as soon as they're fired.

  • There's an ORDF block that seems to point at a number of XDF (sprite?) files and sound files, presumably used for hit effects.

  • The OGEO block at the end of the GDF file refers to the name of the projectile with a matching .map and .geo file.

What I'd like to get done for a first pass & pull request:

  • Figure out how the projectile is scaled - this should fix machine gun bullets from consisting of ghastly cubes.
  • Try and solve the GPOF block data mystery and determine if it's actually needed.
  • Simply reduce health of the entire vehicle the bullets hit (which will "explode" when their health reaches 0)

I'll be ignoring 'drop' weapons for the time being as they're a bit more complicated - e.g. oil slicks, fire, landmines

I'm not going to try and get XDF files for rocket smoke or projectile hit effects working yet. I just want the weapons to fire correct looking projectiles - after that I'll probably look at the missing bits.

I'll get some juicy screenshots in later - there's a few things implemented as noted above but I'd like to get it a little further along first.

Load car components

The Vehicle Configuration Files (.VCF) references component files for weapons (.GDF). For example WEPN........goilslck.gdf. These are parsed by the VcfParser, but they are not used anywhere at the moment.
Some GDF-files are not directly referenced by the VCF-files (e.g. Cup Holders).
Open76 should parse these GDF-files, including the geometry (if any) and attach them to the vehicle loaded.

  1. Figure out how to parse GDF-files and write a corresponding GdfParser.
  2. Discuss how the components should be attached to vehicles and finally implement this.

Licensing

Hi,

I guess this repo is dormant now, but I have a question:
how would licensing work?
Can anybody just take the assets from Interstate 76 (3d models, but especially the soundtrack) and just use them? Do the users 'only' have to buy the game?

What if I make a new game with the assets?

Thanks,
Dirk

Supported platforms?

Hi,

I wonder which are the platforms you plan to support for Open76. It will be nice to have a Linux version of it.

Car Component UI Sprites (Weapons, Car Health, etc.)

The point of this issue isn't to get completely functional components, but to at least draw their UI elements on screen.

I've managed to decipher the ETBL blocks in the vehicles. These serve two purposes based on their flag. They are either reference images with one or more coordinates on the image to indicate where things go, or alternatively they are spritesheet images which are cut up into multiple sub-sections.

An example of a reference image - ZSY_.MAP (the lines and text were added for illustration purposes)
reference

An example of a spritesheet - ZDUE.MAP:
spritesheet

The ETBL structure

ETBL Offset Name Example Value Description
0 Map filename zrad.map The texture that holds all the goods
13 ETBL Type 0 0 = spritesheet, 1 = reference image
17 ETBL Length 2 Amount of sprites/positions in map

The ETBL item structure

Offset Name Example Value Description
0 Item Name range_pos Name of sprite / reference position
16 X Offset 139 X pixel offset in map texture
20 Y Offset 4 Y pixel offset in map texture
24 Width 0 Sprite width (always 0 for reference pos)
28 Height 0 Sprite height (always 0 for reference pos)

What I'd like to get working for this issue:

  • [help wanted] Figure out how sprites are linked to items. For example, the '30cal MG' GDF weapon should be pointing at the 30cal_mg_on and 30cal_mg_off sprites, but I cannot find a reference to them anywhere, either by sprite index or by file name. In the Interstate 76 Gold Edition they ARE linked in the GDF by name (GDF is revision 8 instead of 7), unfortunately in the original game they are not - and I can't find them anywhere else!
  • Draw the weapon brackets and ammo digit sprites.
  • Draw the vehicle health sprites.
  • Draw selected gear arrow (just always assume car is in 'D' for now).

firstperson-reference

Stretch goal:

  • Draw compass
  • Draw UI when car itself is hidden (i.e. hitting F1 key twice in original game toggles car interior on/off but always shows weapons, radar, etc.)

Road hovers terrain

Right now, as a quick fix for terrain vs road height difference problems - the road hovers the terrain by some amount. This is ugly as the wheels sink through the road as they only collide with the terrain. The terrain also penetrates the road at some points.

A better "fix" would be to flatten out the terrain where the road is to avoid these problems.

Stringed objects

Some objects in the map files are "stringed". This means they are laid out on the map as a continous sequence. Many fences utilize these features.

Currently, stringed objects does not align correctly with the map. Figure out how they should align.

Car physics

The car physics needs a lot of work. Currently there are two different versions available. None of them feels like the "bowling-pin car model" in Interstate '76.

Make the car physics feel good. Preferrably like the original - or better :)

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.