GTA III, Vice City

Related tags

Data Structures re3
Overview

re3 logo

Build Status

Intro

In this repository you'll find the fully reversed source code for GTA III (master branch) and GTA VC (miami branch).

It has been tested and works on Windows, Linux, MacOS and FreeBSD, on x86, amd64, arm and arm64.
Rendering is handled either by original RenderWare (D3D8) or the reimplementation librw (D3D9, OpenGL 2.1 or above, OpenGL ES 2.0 or above).
Audio is done with MSS (using dlls from original GTA) or OpenAL.

The project has also been ported to the Nintendo Switch, Playstation Vita and Nintendo Wii U.

We cannot build for PS2 or Xbox yet. If you're interested in doing so, get in touch with us.

Installation

Screenshots

re3 2021-02-11 22-57-03-23 re3 2021-02-11 22-43-44-98 re3 2021-02-11 22-46-33-76 re3 2021-02-11 22-50-29-54

Improvements

We have implemented a number of changes and improvements to the original game. They can be configured in core/config.h. Some of them can be toggled at runtime, some cannot.

  • Fixed a lot of smaller and bigger bugs
  • User files (saves and settings) stored in GTA root directory
  • Settings stored in re3.ini file instead of gta3.set
  • Debug menu to do and change various things (Ctrl-M to open)
  • Debug camera (Ctrl-B to toggle)
  • Rotatable camera
  • XInput controller support (Windows)
  • No loading screens between islands ("map memory usage" in menu)
  • Skinned ped support (models from Xbox or Mobile)
  • Rendering
    • Widescreen support (properly scaled HUD, Menu and FOV)
    • PS2 MatFX (vehicle reflections)
    • PS2 alpha test (better rendering of transparency)
    • PS2 particles
    • Xbox vehicle rendering
    • Xbox world lightmap rendering (needs Xbox map)
    • Xbox ped rim light
    • Xbox screen rain droplets
    • More customizable colourfilter
  • Menu
    • Map
    • More options
    • Controller configuration menu
    • ...
  • Can load DFFs and TXDs from other platforms, possibly with a performance penalty
  • ...

To-Do

The following things would be nice to have/do:

  • Fix physics for high FPS
  • Improve performance on lower end devices, especially the OpenGL layer on the Raspberry Pi (if you have experience with this, please get in touch)
  • Compare code with PS2 code (tedious, no good decompiler)
  • PS2 port
  • Xbox port (not quite as important)
  • reverse remaining unused/debug functions
  • compare CodeWarrior build with original binary for more accurate code (very tedious)

Modding

Asset modifications (models, texture, handling, script, ...) should work the same way as with original GTA for the most part.

CLEO scripts work with CLEO Redux.

Mods that make changes to the code (dll/asi, limit adjusters) will not work. Some things these mods do are already implemented in re3 (much of SkyGFX, GInput, SilentPatch, Widescreen fix), others can easily be achieved (increasing limis, see config.h), others will simply have to be rewritten and integrated into the code directly. Sorry for the inconvenience.

Building from Source

When using premake, you may want to point GTA_III_RE_DIR environment variable to GTA3 root folder if you want the executable to be moved there via post-build script.

Clone the repository with git clone --recursive https://github.com/GTAmodding/re3.git. Then cd re3 into the cloned repository.

Linux Premake

For Linux using premake, proceed: Building on Linux

Linux Conan

Install python and conan, and then run build.

conan export vendor/librw librw/[email protected]
mkdir build
cd build
conan install .. re3/[email protected] -if build -o re3:audio=openal -o librw:platform=gl3 -o librw:gl3_gfxlib=glfw --build missing -s re3:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
conan build .. -if build -bf build -pf package
MacOS Premake

For MacOS using premake, proceed: Building on MacOS

FreeBSD

For FreeBSD using premake, proceed: Building on FreeBSD

Windows

Assuming you have Visual Studio 2015/2017/2019:

  • Run one of the premake-vsXXXX.cmd variants on root folder.
  • Open build/re3.sln with Visual Studio and compile the solution.

Microsoft recently discontinued its downloads of the DX9 SDK. You can download an archived version here: https://archive.org/details/dxsdk_jun10

If you choose OpenAL on Windows You must read Running OpenAL build on Windows.

ℹ️ premake has an --with-lto option if you want the project to be compiled with Link Time Optimization.

ℹ️ There are various settings in config.h, you may want to take a look there.

ℹ️ re3 uses completely homebrew RenderWare-replacement rendering engine; librw. librw comes as submodule of re3, but you also can use LIBRW enviorenment variable to specify path to your own librw.

If you feel the need, you can also use CodeWarrior 7 to compile re3 using the supplied codewarrior/re3.mcp project - this requires the original RW33 libraries, and the DX8 SDK. The build is unstable compared to the MSVC builds though, and is mostly meant to serve as a reference.

Contributing

As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are completely reversed code from original binaries.

We don't accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.

We accept only these kinds of PRs;

  • A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
  • Game, UI or UX bug fixes (if it's a fix to original code, it should be behind FIX_BUGS)
  • Platform-specific and/or unused code that's not been reversed yet
  • Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
  • A new cross-platform skeleton/compatibility layer, or improvements to them
  • Translation fixes, for languages original game supported
  • Code that increase maintainability

We have a Coding Style document that isn't followed or enforced very well.

Do not use features from C++11 or later.

History

re3 was started sometime in the spring of 2018, initially as a way to test reversed collision and physics code inside the game. This was done by replacing single functions of the game with their reversed counterparts using a dll.

After a bit of work the project lay dormant for about a year and was picked up again and pushed to github in May 2019. At the time I (aap) had reversed around 10k lines of code and estimated the final game to have around 200-250k. Others quickly joined the effort (Fire_Head, shfil, erorcun and Nick007J in time order, and Serge a bit later) and we made very quick progress throughout the summer of 2019 after which the pace slowed down a bit.

Due to everyone staying home during the start of the Corona pandemic everybody had a lot of time to work on re3 again and we finally got a standalone exe in April 2020 (around 180k lines by then).

After the initial excitement and fixing and polishing the code further, reVC was started in early May 2020 by starting from re3 code, not by starting from scratch replacing functions with a dll. After a few months of mostly steady progress we considered reVC finished in December.

Since then we have started reLCS, which is currently work in progress.

License

We don't feel like we're in a position to give this code a license.
The code should only be used for educational, documentation and modding purposes.
We do not encourage piracy or commercial use.
Please keep derivate work open source and give proper credit.

You might also like...
Cytopia is a free, open source retro pixel-art city building game with a big focus on mods.
Cytopia is a free, open source retro pixel-art city building game with a big focus on mods.

Cytopia is a free, open source retro pixel-art city building game with a big focus on mods. It utilizes a custom isometric rendering engine based on SDL2.

A simple class for parsing JSON data into a QVariant hierarchy and vice versa.

The qt-json project is a simple collection of functions for parsing and serializing JSON data to and from QVariant hierarchies. NOTE: Qt5 introduced a

json_struct is a single header only C++ library for parsing JSON directly to C++ structs and vice versa

Structurize your JSON json_struct is a single header only library that parses JSON to C++ structs/classes and serializing structs/classes to JSON. It

A simple class for parsing JSON data into a QVariant hierarchy and vice versa.

The qt-json project is a simple collection of functions for parsing and serializing JSON data to and from QVariant hierarchies. NOTE: Qt5 introduced a

A patched version of the VICE C64/VIC20/... emulator

VICE Emulator emitting bap-frames traces This is a patched version of the VICE C64/VIC20/... emulator that can emit traces in the bap-frames format, p

An efficient tool written in C to convert base numbers dumps into human readable string and vice versa.

strtools A tool written in C to convert number bases to human readable string and vice versa. Usage Compile make Help strtools -h Output: Usage: strt

GTA: SA Vita
GTA: SA Vita

GTA: SA Vita This is a wrapper/port of Grand Theft Auto: San Andreas Android for the PS Vita with lots of custom patches such as: Fixed camera control

Run GTA:SA multiple times

Multi Process GTASA With this ASI mod you are able to run GTASA multiple times If you also wish to have windowed mode ability, you can use https://git

Play GTA San Andreas Multiplayer with mouse only and no keyboard

Play GTA SAMP with your mouse and no keyboard! For some reason some people think it's a troll or an inside joke, IT IS NOT! This is a legit mod for th

GTA Online survival missions in Single Player mode

SurvivalsModCPPVersion You liked the survival missions from GTA Online? Well, me too. This mod aims to recreate the same gamemode in Single Player mod

SDK for creating GTA IV .asi plugins
SDK for creating GTA IV .asi plugins

iv-sdk "SDK" for creating GTA IV .asi plugins Supports 1.0.7.0 and 1.0.8.0 (EFIGS only) The majority of the project has been created for 1.0.8.0 and t

A mod menu base for GTA - Custom UI, backend == BigBase

Custom Base This is a mod menu base made for Grand Theft Auto V and compatible with GTA Online aswell. Making a parent submenu Parent submenus are the

PoC that fixes two GTA Online bugs and drastically improves load times for CPU-bound systems

Project status Officially fixed by R* 2021-03-16 :) PoC that fixes two GTA Online bugs and drastically improves load times for CPU-bound systems All a

GTA SA FMOD mod, realistic car engine sounds.
GTA SA FMOD mod, realistic car engine sounds.

GTA FMOD Informations FMOD is a proprietary sound effects engine and authoring tool for video games and applications developed by Firelight Technologi

GTA 3/VC HUD recreation for Manhunt.

GTAHud Grand Theft Auto HUD recration for Manhunt. Installation GTAHud requires Ultimate ASI Loader (https://github.com/ThirteenAG/Ultimate-ASI-Loader

Comments
  • Shooting fix with certain weapons

    Shooting fix with certain weapons

    Aim was broken when shooting and moving with Colt 45 and UZI. Fixed it.

    As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are completely reversed code from original binaries.

    We don't accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.

    We accept only these kinds of PRs;

    • A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
    • Game, UI or UX bug fixes (if it's a fix to R* code, it should be behind FIX_BUGS)
    • Platform-specific and/or unused code that's not been reversed yet
    • Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
    • A new cross-platform skeleton/compatibility layer, or improvements to them
    • Translation fixes, for languages R* supported/outsourced
    • Code that increase maintainability
    opened by yasinkaraaslan 1
Releases(reVC_1.0)
Owner
Kid
Building good software from the ground up is kinda what I do.
Kid
Play GTA San Andreas Multiplayer with mouse only and no keyboard

Play GTA SAMP with your mouse and no keyboard! For some reason some people think it's a troll or an inside joke, IT IS NOT! This is a legit mod for th

iAmir 21 Aug 31, 2022
In this repository you'll find the fully reversed source code for GTA III (master branch) and GTA VC (miami branch).

Intro In this repository you'll find the fully reversed source code for GTA III (master branch) and GTA VC (miami branch). It has been tested and work

Zero 1 Nov 11, 2021
An open source UI re-implementation based on GTA:V, built for GTA: San Andreas.

V Hud: A work-in-progress user interface overhaul, for Grand Theft Auto: San Andreas, based on Grand Theft Auto: V. Project has been made in order to

_AG 108 Dec 28, 2022
SIMD (SSE) implementation of the infamous Fast Inverse Square Root algorithm from Quake III Arena.

simd_fastinvsqrt SIMD (SSE) implementation of the infamous Fast Inverse Square Root algorithm from Quake III Arena. Why Why not. How This video explai

Liam 7 Oct 4, 2022
Tomb Raider III multiplayer modification.

Tomb Raider III Multiplayer Mod. Multiplayer Modification for Tomb Raider III. Website: https://tr3mp.net/ If you own the base source of \patch projec

Tony 3 Dec 25, 2021
My set of enhancements for the Black Ops III Mod Tools.

T7MTEnhancements This is a patch for Linker (and possibly other tools within Black Ops III's Mod Tools in the future) that adds some enhancements to L

Philip 4 Jan 22, 2022
A new city of code on a cosmopolitan foundation.

Neopolitan C “A new city of code on a cosmopolitan foundation.” <https://aquefir.co/neopolitan> <https://github.com/aquefir/neopolitan> Created by A

Aquefir 19 Jul 28, 2022
Isometric city building game

HopCity Isometric defo not sim city building game Screenshots Thanks [https://github.com/MichaelKirsch] -> Profiler Joco223 -> Stone wall textures Bui

Matthew Hopson 17 Sep 3, 2022
Battle City Game Clone

BattleCity Battle City Game Clone 4 Level 3 Level 2 Level 1 Level Menu You can also add your own level as txt-extention file: -in first row you need t

Sergey Semionkin 2 Feb 19, 2022
A web application which finds the shortest or quickest path from two points in the city of Rio de Janeiro.

A web application which finds the shortest or quickest path from two points in the city of Rio de Janeiro. Obviously not Waze. (final project for EDA @ EMAp, 2021)

null 2 Nov 17, 2021