Исходный код need for speed

Обновлено: 02.07.2024

An attempt to recreate the classic Need for Speed Games (1-6), unpacking their original data files into a modern scratch built engine. Extremely early in development, current features include:

  • Reverse engineered asset loaders (tracks, cars, images, music etc) for NFS 1-6 PC and PSX (with the possibility for other systems as well), soon to be separated into LibOpenNFS for the creation of mod tools/converters through a stable API
  • A barebones game engine designed with enough configurability to accurately replicate each titles respective graphics and gampelay
  • Bullet Physics Integration for vehicle dynamics
  • New shaders that allow for dynamic lighting and shadows

Screenshot

Current Loadable Assets

Below is a table better describing the current level of asset load into OpenNFS:

Game Cars Tracks Music
NFS6 PC
NFS5 PC 40%** 25%**
NFS4 PC 90%* 90%*
NFS4 PS1 50%*
NFS3 PC 100% 100% 95%
NFS3 PS1 40% 90% 95%
NFS2 SE 90%* 90%
NFS2 PC 90%* 90%
NFS2 PS1 90%* 90%
NFS1

*Some titles fail to load in current builds of OpenNFS due to the undertaking of a large parser refactor.

**NFS5 Track formats have been reverse engineered, but a stable parser has not yet been written.

  • An actual implementation of gameplay that replicates the original titles
  • AI generated through neuroevolution for both the police and racers
  • Custom(izable), modular menus built from moddable configuration files
  • Automated import of game assets from CD, ISO or provided URLs
  • A track editor and automated converter between classic NFS titles, utlilising LibOpenNFS
  • Free Roam of an open world amalgamation of all classic NFS tracks
  • Multiplayer!

OpenNFS does not bundle any EA intellectual property. A copy of the original games must be provided to OpenNFS in order to function, instructions for this are available on the release page.

Development builds on CI:

All versions (Windows/Mac/Linux) are built on VSTS, but the current build artifacts only contain the OpenNFS executable. To use these builds, it is recommended to download a Github Release from the 'Releases' page, and replace the OpenNFS executable with that produced by CI. You will most likely also need to update the 'shaders' directory, using the latest available from Git. I will alter my CI scripts soon to produce zips that can be ran without these extra steps.

Linux Windows Mac OS

Keep up to date

Check out what I'm working on by looking at the Github Project boards for an upcoming point release here.

The CMake files are currently configured to detect external libraries from within the 'lib' folder at the same level as 'src', just do a 'git submodule update --recursive --remote' to get them.

Massive thanks to Denis Auroux, Vitaly 'Necromancer', EdasX, Ian Brownm, Jesper Juul-Mortensen and Arushan for their work on reverse engineering various NFS formats. Thanks go out to AJ_Lethal for the OpenNFS Logo.

Models, textures, tracks, cars by EA Seattle (C) 1998, 1999, 2002. EA Canada (C) 2000, EA Blackbox (C) 2002. OpenNFS is not affiliated in any way with EA.

Released under the MIT License.

About

An attempt to recreate the classic Need for Speed Games (1-6), unpacking their original data files into a modern, scratch built engine.

Screenshot

Cross-platform wrapper for the Need For Speed™ II SE game with 3D acceleration and TCP protocol!

Don't forget to update submodules:

  • By default OpenGL 2 is used (except Android - it always uses GLES2).
  • To use OpenGL 1, add gl1 argument to compilation script.
  • To use OpenGL|ES 2, add gles2 argument to compilation script.

Compile for x86:

  • To compile the game, you must have:
    • GCC or Clang compiler which can generate 32-bit code for x86 (set by $CC environment variable),
    • 32-bit OpenGL devel and drivers,
    • 32-bit SDL2 devel.
    • Yasm assembler,
    • Edit the compile_nfs script, modify what do you want. Compile the game by executing the script - it will automatically generate executable file inside Need For Speed II SE directory:
      • ./compile_nfs - native compilation for Unix-like systems (Linux, OS X, . ),
      • ./compile_nfs win32 - cross compilation for Windows.

      Compile for non-x86 CPUs:

      • This game can run on ARM devices, also on Android. Only 32-bit little-endian CPUs are supported.
      • The performance is lower than the original assembly code.
      • It can be less stable than assembly code due to possible translation bugs.
      • SDL2 (32-bit) and OpenGL (32-bit),
      • target must be 32-bit little-endian,
      • GCC 4.9 or higher (currently Clang is not supported).
      • run ./compile_nfs cpp
      • install NDK and SDK (API levels: 14 and 16),
      • set environment variables: ANDROID_NDK_ROOT and ANDROID_HOME ,
      • create directory path: src/Android/jni/SDL/include/SDL2 ,
      • download SDL2 sources and create symlinks from SDL2 source directory:
        • android-project/app/src/main/java/org to src/Android/src/org ,
        • src to src/Android/jni/SDL ,
        • include/*.h to src/Android/jni/SDL/include/SDL2 ,
        • Copy fedata and gamedata directories from the Need For Speed™ II SE original CD-ROM into Need For Speed II SE directory.
        • This game needs data from Need For Speed 2 Special Edition, otherwise you'll see a 'MOVIE FILE NOT FOUND' message!
        • You can delete unnecessary files, e.g. fedata/pc/text/text.* , because TCP version uses new files in root directory.
        • All files and directories copied from CD-ROM must have small letters on Unix-like systems.
          • Please use the Need For Speed II SE/convert_to_lowercase script if you have UPPERCASE names.
          • english,
          • french,
          • german,
          • italian,
          • spanish,
          • swedish.
          • Game controllers (reconnected game controllers should be the same),
          • Force Feedback (tested on Linux),
          • TCP and UDP connection,
          • Serial port connection,
          • Brightness,
          • Sound.

          What does not work:

          • Modem connection (it will never work again, this feature has been removed from assembly code),
          • Force Feedback might not work on Windows due to bugs in SDL2. You can try to enable it in nfs2se.conf file (WindowsForceFeedbackDevice).

          Function keys in-game

          • F1 - toggle rain,
          • F2 - car detail,
          • F3 - view distance,
          • F4 - toggle horizon,
          • F5 - toggle HUD (player 1),
          • F6 - toggle HUD (player 2),
          • F7 - toggle mirror,
          • F8 - toggle music,
          • F9 - toggle sound effects,
          • F10 - brightness,
          • F11 - reset car.
          • Arch Linux package is available in AUR as nfs2se-git .
          • Compilation on *BSD systems probably needs changes in compilation script (not tested).
          • Cockpit view and night driving are unavailable (original 3D-accelerated version doesn't have this), see NFSIISEN repository.
          • OpenGL 1.x only: if the game crashes it might not restore the gamma properly. In this case run: xgamma -gamma 1.0 .
          • There is Docker based build environment available on GitHub.