Skip to content
Jannik Vogel edited this page Aug 13, 2016 · 25 revisions

These are lists of stuff to do in OpenRW. They are just examples, the list is far from complete. If you want to work on anything please contact us on IRC first to coordinate work.

These lists are in no particular order (yet).

New features and documentation

OpenRW is far from complete. Some of the tasks which must still be worked on are listed below.

Revise input

For reference this is how GTA’s input system works in general: The game keeps two internal controllers (CPad) resembling PS2 pads that can be updated from physical game pads. They store the state of the last and the current frame. !oldstate.button && newstate.button is used to find pressed buttons. The analogs are in range -127 to 127. Everything is stored as a short (clarification necessary: Is “everything” a list of flags for each button? Are buttons analog?).

Keyboard and mouse are mapped to these CPads depending on player mode (on foot, in vehicle, etc.). All subsystems that require input query the controller state on update. Functions are used to abstract the user’s mapping. Raw keyboard and mouse states are available as well (e.g. for PC-specific controls). The event handler updates a temporary state from the events, CPad::Update and related functions then copy the new state to the old state and the temporary state to the new state. Input in OpenRW used to be hardcoded to SDL2 functions. Some abstraction has been done by danhedron lately. However, the Script functions do not have access to the “CPad” data in OpenRW yet. Gamepads are also not supported in OpenRW yet.

Create a list of all GTAs and their engine / data file formats

(Contact @JayFoxRox for more information!) This has been partially done but it's still far from complete. danhedron has a seperate list for hardcoded data

  • Merge these lists in a way that makes sense
  • Fill in all data
  • Add all releases to the list

Cheats

Note: JayFoxRox already has some C style pseudo-code for this for a lot of GTA3 cheats. SDL2 offers options to get a string of the last input text.

Use GXT Strings in OpenRW menu

We currently use hardcoded strings. We should be using GXT strings so the menu is automaticly translated. http://public.sannybuilder.com/GXT/ for a list of GXT strings.

Radio-Stations and Sound-Effects

  • Play radio
    • Allow switching radio station
  • Play vehicle motor sound effects
  • Play scripted sound effects
  • Play ped sound effects
  • Play audio from chase scene in intro

Chaos level / Wanted level

  • Implement chaos level
  • Setters / getters for the wanted level
  • Implement all chaos level events
  • Implement police for each wanted level
  • Implement all related script functions

Objects

  • Time-restricted models not working

Particle systems

  • We don't currently implement any particle systems which will be necessary for a lot of ingame effects

Fire

Required: Scripted fire, Projectile Fire Optional: Burning peds, Temporarily burning Vehicles, Vehicle damage visible burning, Flamethrower fire (VC only? Did III have one?)

  • Document fire behaviour (scheduled tasks for burning characters / burn duration)

Explosions

  • Scripted explosions
  • Projectile explosions
  • Exploding vehicles

Race Checkpoints

They look like this. Race checkpoints are currently not drawn? This is probably very easy to add: We have to reverse engineer the color, texture name and orientation of the billboards (model name?). Race checkpoints also have to be integrated in the script module.

Hardcoded special events

  • Medic behavior
  • Fire-truck behavior

Hardcoded vehicle features

  • Sirens for emergency vehicles
  • Firetruck spray / water cannon
  • Rhino turret
  • Yardie hydraulics
  • Taxi gives money
  • Police vehicle gives weapon
  • Ambulance gives health
  • Enforcer gives armor

2DFX system

  • Implement the 2D effects such as streetlight glow etc

Savegames

We are currently not able to save the game from OpenRW and there are remaining problems with loading GTA3 Savegames.

  • Loading all savegames
  • Storing game progress to savegame

Shooting / Weapons

  • Projectiles (Grenaded / Molotov)
  • Flamethrower
  • Rocketlauncher
  • First Person Weapons / Mode
  • Melee weapons
  • Fistfighting
  • Running while shooting
  • Third-person camera bullet shooting weapons

Tool to collect opcode information

(Contact @JayFoxRox for more information!) We need a tool to collect information from main.scm. There is already a proposed sheet to display collected data and a tool to extract some data from the script based on gta3sc (by JayFoxRox, still closed source)

  • List of threads and what starts those threads (can only be automated partially!)
  • Which thread uses which opcode?
  • Tool must be cross-platform (maybe gta3sc based?)

Script opcodes implementation for nearly all missions

Various missions don't work yet

  • Test each mission
  • Report problems as issues
  • Implement or stub missing opcodes

Cleanup

Much of the code in OpenRW is not up to par, it is either poorly designed or brittle. These are the issues that should be fixed over time to improve the code quality.

Style fixes

(Contact @danhedron for more information!)

  • We need a config for clang-format
  • Code must be reviewed after re-formatting it to make sure it's behavior didn't break.

Migration to FFMPEG or other audio libs

We are currently (August 2016) using libsndfile [for ADPCM] and libmad [for MP3]. We heard bad things about libsndfile and libmad is outdated (VC6 project file, last release in 2004). A change to FFMPEG would not only allow decoding of these formats, but it’s also proven to be highly portable. We will also be able to decode WMA audio (Radio stations on Xbox), BIK (Intro Movies on Xbox), MPEG (Intro Movies on PC), probably AC3Plus (Assumption about Radio station on PSP) and generally everything else we throw at it. We should however, discuss how we link this rather huge and complicated library.

Camera aligned Billboard rendering

Billboards are currently stretched when viewed from the top

  • Document behavior of GTA3
  • Fix the implementation

ifstream Usage

  • Fix all text-mode usages
  • long term: determine how to handle packaged & unpackaged files

TXD/DFF Loading

  • Properly store Texture Dictionary structure
  • Uncouple DFF and TXD loading from OpenGL
Clone this wiki locally