Source Code Reference: Difference between revisions
Add basic overview of the directory structure |
|||
| (26 intermediate revisions by 9 users not shown) | |||
| Line 1: | Line 1: | ||
== | == External Libraries == | ||
* | FreeSpace 2 relies on the following libraries which are included in the source tree: | ||
* jansson: JSON library | |||
* libjpeg: JPEG library | |||
* libpng: PNG library | |||
* lua: LUA Scripting language | |||
* mongoose: HTTP server library | |||
* oggvorbis: Ogg Vorbis sound library | |||
* openal: OpenAL sound library | |||
* zlib: ZIP compression library; necessary for libpng | |||
For information on each library, look in the respective README files. | |||
=== | == FreeSpace 2 Source Code == | ||
The root also contains the actual FreeSpace 2 code, in the code/ directory. The FreeSpace 2 source code consists of several components, each of which is kept in a separate subdirectory. These components are listed below from different views. | |||
The | |||
* ai (Computer AI) | === Alphabetical View === | ||
* anim (Displaying .ani animated bitmaps) | |||
* asteroid (Handle asteroids - movement, collisions, creating smaller | * [[Source ai|ai]] (Computer AI) | ||
* [[Source anim|anim]] (Displaying .ani animated bitmaps) | |||
* asteroid (Handle asteroids - movement, collisions, creating smaller asteroids when larger ones are blown up etc.) | |||
* autopilot (Handles autopilot control - where if there are no enemies, travelling a long distance etc. control is temporarily switched to the computer) | * autopilot (Handles autopilot control - where if there are no enemies, travelling a long distance etc. control is temporarily switched to the computer) | ||
* bmpman (Manage 2d graphics files, such as .bmp, .tga, .jpg etc.) | * [[Source bmpman|bmpman]] (Manage 2d graphics files, such as .bmp, .tga, .jpg etc.) | ||
* camera (???) | * camera (used for ingame cutscenes ???) | ||
* cfile (File/directory management routines including .VP file handling that are OS independent | * cfile (File/directory management routines including .VP file handling that are OS independent e.g. handles differences between Linux & Windows) | ||
* cmdline (Handles command line switches, such as -mipmap etc.) | * cmdline (Handles command line switches, such as -mipmap etc.) | ||
* cmeasure (Handles countermeasures - flares that the player & AI can drop to disrupt missiles) | * cmeasure (Handles countermeasures - flares that the player & AI can drop to disrupt missiles) | ||
* controlconfig (Configures keyboard/mouse/joystick controls) | * controlconfig (Configures keyboard/mouse/joystick controls) | ||
* cutscene (Handles cutscene viewing) | * cutscene (Handles cutscene viewing) | ||
* ddsutils (Handles compressed textures for 3d graphics cards that support it) | * [[Source ddsutils|ddsutils]] (Handles compressed textures for 3d graphics cards that support it) | ||
* debris (Creates & handles flying debris from exploding ships) | * debris (Creates & handles flying debris from exploding ships) | ||
* debugconsole (Handles debugging console and file) | * debugconsole (Handles debugging console and file) | ||
| Line 37: | Line 39: | ||
* fireball (Displays & handles fireballs and warping effects) | * fireball (Displays & handles fireballs and warping effects) | ||
* freespace2 (Main code - handles engine initialisation, loading resources, plus windows resources like icons & dialog boxes) | * freespace2 (Main code - handles engine initialisation, loading resources, plus windows resources like icons & dialog boxes) | ||
* | * fs2netd (Game matchmaker network client code) | ||
* gamehelp (Displays context sensitive help text) | * gamehelp (Displays context sensitive help text) | ||
* gamesequence (Handles progression of events during a campaign, such as entering a mission, showing credits etc.) | * gamesequence (Handles progression of events during a campaign, such as entering a mission, showing credits etc.) | ||
* gamesnd (Handles sounds & music) | * gamesnd (Handles sounds & music) | ||
* globalincs (Basic global constants & definitions, eg. version, colours) | * globalincs (Basic global constants & definitions, eg. version, colours) | ||
* graphics (Low-level wrapper for all 2d & 3d graphics that handles different display engines (DirectX, OpenGL etc) | * [[Source graphics|graphics]] (Low-level wrapper for all 2d & 3d graphics that handles different display engines (DirectX, OpenGL etc) | ||
* hud (Handles the HUD - all the 2d cockpit graphics that the player can see | * hud (Handles the HUD - all the 2d cockpit graphics that the player can see e.g. radar, ammo, escort list, squad etc) | ||
* iff_defs (Handles | * iff_defs (Handles the iffs in [[iff_defs.tbl]], controlling what color they show up as and what iffs they attack) | ||
* io (Handles IO devices, such as keyboard, mouse & joystick) | * io (Handles IO devices, such as keyboard, mouse & joystick) | ||
* irc (Adds support for an IRC chat client) | * irc (Adds support for an IRC chat client) | ||
* jpgutils (Opens, reads JPG files) | * [[Source jpgutils|jpgutils]] (Opens, reads JPG files) | ||
* jumpnode (Displays & handles jump nodes) | * jumpnode (Displays & handles jump nodes) | ||
* lab ( | * lab (Responsible for WMCoolmon's F3 lab screen) | ||
* lighting (Handles light sources, and their effect on ships) | * lighting (Handles light sources, and their effect on ships) | ||
* localization (Handles a global string table for translating all written text into foreign languages) | * localization (Handles a global string table for translating all written text into foreign languages) | ||
* math (Library of math routines for handling vectors, splines etc) | * math (Library of math routines for handling vectors, splines etc) | ||
* menuui (Handles all the misc user interface, such as the main menu, tech room, campaign list etc) | * menuui (Handles all the misc user interface, such as the main menu, tech room, campaign list etc) | ||
* mission (Handles general mission actions | * mission (Handles general mission actions e.g. briefing, goals, training info, in-mission messages etc) | ||
* missionui (Handles UI for general mission actions) | * missionui (Handles UI for general mission actions) | ||
* mm (Headers for older MS Multimedia library) | * mm (Headers for older MS Multimedia library) | ||
* model (Displays and handles ship models | * model (Displays and handles ship models e.g. reading files, collision detection etc) | ||
* nebula (Displays and handles nebulae) | * nebula (Displays and handles nebulae) | ||
* network (All multi-player code, | * network (All multi-player code, e.g. UI, network traffic) | ||
* object (High-level code to handle all objects eg. ships, weapons, debris, asteroids, waypoints, fireballs, shockwaves) | * object (High-level code to handle all objects eg. ships, weapons, debris, asteroids, waypoints, fireballs, shockwaves) | ||
* observer ( | * observer (Responsible for the multiplayer observer mode) | ||
* osapi (Wraps low-level Operating System calls, for different OS, eg. multi-threads, windows event loops, main app window) | * osapi (Wraps low-level Operating System calls, for different OS, eg. multi-threads, windows event loops, main app window) | ||
* padlock (Handles cockpit views with a simulated head tracking of targets relative to the ship) | |||
* palman (Handles bitmap palettes - different colour maps for the same 2d bitmap) | * palman (Handles bitmap palettes - different colour maps for the same 2d bitmap) | ||
* parse (Handles scripting files, eg. python, LUA etc) | * parse (Handles scripting files, eg. python, LUA etc) | ||
* particle (Displays and handles particles, such as smoke, fire) | * particle (Displays and handles particles, such as smoke, fire) | ||
* pcxutils (Handles 2d .pcx graphics files) | * [[Source pcxutils|pcxutils]] (Handles 2d .pcx graphics files) | ||
* physics (Handles realistic physical behaviour of objects, such as ship acceleration/deceleration, rotation etc.) | * physics (Handles realistic physical behaviour of objects, such as ship acceleration/deceleration, rotation etc.) | ||
* playerman (Handles pilot files & player ship movement) | * playerman (Handles pilot files & player ship movement) | ||
* popup (Displays & handles 2d pop-up windows, | * popup (Displays & handles 2d pop-up windows, e.g. when the player dies) | ||
* radar (Displays & handles the radar) | * radar (Displays & handles the radar) | ||
* render ( | * [[Source render|render]] (Low-level 3d rendering code for some primitives) | ||
* ship (Displays & handles all ship code, | * ship (Displays & handles all ship code, e.g. shields, afterburner) | ||
* sound (Low-level sound, | * sound (Low-level sound, speech & music routines) | ||
* species_defs (Reads species_defs.tbl to handle different behaviour for different species) | * species_defs (Reads species_defs.tbl to handle different behaviour for different species) | ||
* starfield (Displays & handles background images such as starfields, nebulae etc) | * starfield (Displays & handles background images such as starfields, nebulae etc) | ||
* stats (Displays & handles player statistics, medals etc) | * stats (Displays & handles player statistics, medals etc) | ||
* tgautils (Handles .tga 2d graphics files) | * [[Source tgautils|tgautils]] (Handles .tga 2d graphics files) | ||
* ui (Low-level user inteface routines | * ui (Low-level user inteface routines e.g. buttons, scrollbars) | ||
* vcodec (Handles player voice streaming for multiplayer ???) | * vcodec (Handles player voice streaming for multiplayer ???) | ||
* weapon (Displays & handles everything to do with weapons) | * weapon (Displays & handles everything to do with weapons) | ||
* windows_stub (Low-level windows functions that are needed for Unix) | * windows_stub (Low-level windows functions that are needed for Unix) | ||
There are also some directories that are only used for generating tools (not part of the main fs2 executable): | There are also some directories that are only used for generating tools (not part of the main fs2 executable): | ||
| Line 93: | Line 95: | ||
* variables (???) | * variables (???) | ||
* wxfred2 (Cross-platform version of FRED2) | * wxfred2 (Cross-platform version of FRED2) | ||
=== Layer View === | |||
* Infrastructure | |||
** System | |||
*** cfile/ | |||
*** exceptionhandler/ | |||
*** irc/ | |||
*** localization/ | |||
*** osapi/ | |||
** Math | |||
*** math/ | |||
** Sound | |||
*** sound/ | |||
*** vcodec/ | |||
** Windows | |||
*** ui/ | |||
*** windows_stub/ | |||
** 2D graphics | |||
*** [[Source anim|anim]] | |||
*** [[Source bmpman|bmpman]] | |||
*** [[Source ddsutils|ddsutils]] | |||
*** [[Source jpgutils|jpgutils]] | |||
*** [[Source pcxutils|pcxutils]] | |||
*** [[Source tgautils|tgautils]] | |||
*** palman/ | |||
** 3D graphics | |||
*** decals/ | |||
*** mm/ | |||
*** directx/ | |||
*** [[Source graphics|graphics]] | |||
*** camera/ | |||
*** [[Source render|render]] | |||
** User Input | |||
*** controlconfig/ | |||
*** io/ | |||
* Freespace2 | |||
** Common | |||
*** globalincs/ | |||
*** cutscene/ | |||
*** cmdline/ | |||
*** debugconsole/ | |||
** In Space | |||
*** [[Source ai|ai]] | |||
*** asteroid/ | |||
*** autopilot/ | |||
*** cmeasure/ | |||
*** debris/ | |||
*** demo/ | |||
*** fireball/ | |||
*** gamehelp/ | |||
*** gamesequence/ | |||
*** gamesnd/ | |||
*** hud/ | |||
*** iff_defs/ | |||
*** jumpnode/ | |||
*** lighting/ | |||
*** nebula/ | |||
*** object/ | |||
*** observer/ | |||
*** model/ | |||
*** network/ | |||
*** particle/ | |||
*** parse/ | |||
*** popup/ | |||
*** physics/ | |||
*** radar/ | |||
*** ship/ | |||
*** species_defs/ | |||
*** starfield/ | |||
*** weapon/ | |||
** In Base | |||
*** stats/ | |||
*** menuui/ | |||
*** mission/ | |||
*** missionui/ | |||
** Engine | |||
*** fs2open_pxo/ | |||
*** freespace2/ | |||
*** playerman/ | |||
* FRED | |||
** fred2/ | |||
** wxfred2/ | |||
* Tools | |||
** cfilearchiver/ | |||
** cfileextractor/ | |||
** cryptstring/ | |||
** lab/ | |||
** scramble/ | |||
** inetfile/ | |||
** variables/ | |||
=== Category Browser === | |||
The subdirectories above are also categorised by function. See the Category:Source Code to browse this way. | |||
[[Category:Source Code]] | |||
Latest revision as of 05:30, 3 May 2015
External Libraries
FreeSpace 2 relies on the following libraries which are included in the source tree:
- jansson: JSON library
- libjpeg: JPEG library
- libpng: PNG library
- lua: LUA Scripting language
- mongoose: HTTP server library
- oggvorbis: Ogg Vorbis sound library
- openal: OpenAL sound library
- zlib: ZIP compression library; necessary for libpng
For information on each library, look in the respective README files.
FreeSpace 2 Source Code
The root also contains the actual FreeSpace 2 code, in the code/ directory. The FreeSpace 2 source code consists of several components, each of which is kept in a separate subdirectory. These components are listed below from different views.
Alphabetical View
- ai (Computer AI)
- anim (Displaying .ani animated bitmaps)
- asteroid (Handle asteroids - movement, collisions, creating smaller asteroids when larger ones are blown up etc.)
- autopilot (Handles autopilot control - where if there are no enemies, travelling a long distance etc. control is temporarily switched to the computer)
- bmpman (Manage 2d graphics files, such as .bmp, .tga, .jpg etc.)
- camera (used for ingame cutscenes ???)
- cfile (File/directory management routines including .VP file handling that are OS independent e.g. handles differences between Linux & Windows)
- cmdline (Handles command line switches, such as -mipmap etc.)
- cmeasure (Handles countermeasures - flares that the player & AI can drop to disrupt missiles)
- controlconfig (Configures keyboard/mouse/joystick controls)
- cutscene (Handles cutscene viewing)
- ddsutils (Handles compressed textures for 3d graphics cards that support it)
- debris (Creates & handles flying debris from exploding ships)
- debugconsole (Handles debugging console and file)
- decals (Adds support for painting decals - small 2d textures - onto ships etc.)
- demo (Allows you to save & playback games to show as demos)
- directx (Specific includes for the Microsoft DirectX library - Windows only)
- exceptionhandler (Deals with crashes, saving stack trace, system info etc.)
- fireball (Displays & handles fireballs and warping effects)
- freespace2 (Main code - handles engine initialisation, loading resources, plus windows resources like icons & dialog boxes)
- fs2netd (Game matchmaker network client code)
- gamehelp (Displays context sensitive help text)
- gamesequence (Handles progression of events during a campaign, such as entering a mission, showing credits etc.)
- gamesnd (Handles sounds & music)
- globalincs (Basic global constants & definitions, eg. version, colours)
- graphics (Low-level wrapper for all 2d & 3d graphics that handles different display engines (DirectX, OpenGL etc)
- hud (Handles the HUD - all the 2d cockpit graphics that the player can see e.g. radar, ammo, escort list, squad etc)
- iff_defs (Handles the iffs in iff_defs.tbl, controlling what color they show up as and what iffs they attack)
- io (Handles IO devices, such as keyboard, mouse & joystick)
- irc (Adds support for an IRC chat client)
- jpgutils (Opens, reads JPG files)
- jumpnode (Displays & handles jump nodes)
- lab (Responsible for WMCoolmon's F3 lab screen)
- lighting (Handles light sources, and their effect on ships)
- localization (Handles a global string table for translating all written text into foreign languages)
- math (Library of math routines for handling vectors, splines etc)
- menuui (Handles all the misc user interface, such as the main menu, tech room, campaign list etc)
- mission (Handles general mission actions e.g. briefing, goals, training info, in-mission messages etc)
- missionui (Handles UI for general mission actions)
- mm (Headers for older MS Multimedia library)
- model (Displays and handles ship models e.g. reading files, collision detection etc)
- nebula (Displays and handles nebulae)
- network (All multi-player code, e.g. UI, network traffic)
- object (High-level code to handle all objects eg. ships, weapons, debris, asteroids, waypoints, fireballs, shockwaves)
- observer (Responsible for the multiplayer observer mode)
- osapi (Wraps low-level Operating System calls, for different OS, eg. multi-threads, windows event loops, main app window)
- padlock (Handles cockpit views with a simulated head tracking of targets relative to the ship)
- palman (Handles bitmap palettes - different colour maps for the same 2d bitmap)
- parse (Handles scripting files, eg. python, LUA etc)
- particle (Displays and handles particles, such as smoke, fire)
- pcxutils (Handles 2d .pcx graphics files)
- physics (Handles realistic physical behaviour of objects, such as ship acceleration/deceleration, rotation etc.)
- playerman (Handles pilot files & player ship movement)
- popup (Displays & handles 2d pop-up windows, e.g. when the player dies)
- radar (Displays & handles the radar)
- render (Low-level 3d rendering code for some primitives)
- ship (Displays & handles all ship code, e.g. shields, afterburner)
- sound (Low-level sound, speech & music routines)
- species_defs (Reads species_defs.tbl to handle different behaviour for different species)
- starfield (Displays & handles background images such as starfields, nebulae etc)
- stats (Displays & handles player statistics, medals etc)
- tgautils (Handles .tga 2d graphics files)
- ui (Low-level user inteface routines e.g. buttons, scrollbars)
- vcodec (Handles player voice streaming for multiplayer ???)
- weapon (Displays & handles everything to do with weapons)
- windows_stub (Low-level windows functions that are needed for Unix)
There are also some directories that are only used for generating tools (not part of the main fs2 executable):
- cfilearchiver (Creates .VP file archives)
- cfileextractor (Extracts .VP file archives)
- cryptstring (Creates encrypted strings)
- fred2 (The FReespace EDitor)
- inetfile (FTP & HTTP network handlers)
- scramble (Utility to scramble file tables for the Demo version)
- variables (???)
- wxfred2 (Cross-platform version of FRED2)
Layer View
- Infrastructure
- Freespace2
- Common
- globalincs/
- cutscene/
- cmdline/
- debugconsole/
- In Space
- ai
- asteroid/
- autopilot/
- cmeasure/
- debris/
- demo/
- fireball/
- gamehelp/
- gamesequence/
- gamesnd/
- hud/
- iff_defs/
- jumpnode/
- lighting/
- nebula/
- object/
- observer/
- model/
- network/
- particle/
- parse/
- popup/
- physics/
- radar/
- ship/
- species_defs/
- starfield/
- weapon/
- In Base
- stats/
- menuui/
- mission/
- missionui/
- Engine
- fs2open_pxo/
- freespace2/
- playerman/
- Common
- FRED
- fred2/
- wxfred2/
- Tools
- cfilearchiver/
- cfileextractor/
- cryptstring/
- lab/
- scramble/
- inetfile/
- variables/
Category Browser
The subdirectories above are also categorised by function. See the Category:Source Code to browse this way.