{"id":13480234,"url":"https://github.com/phoboslab/wipeout-rewrite","last_synced_at":"2025-05-14T02:04:54.803Z","repository":{"id":187470158,"uuid":"676941180","full_name":"phoboslab/wipeout-rewrite","owner":"phoboslab","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-26T19:33:15.000Z","size":419,"stargazers_count":2750,"open_issues_count":49,"forks_count":225,"subscribers_count":41,"default_branch":"master","last_synced_at":"2025-04-26T20:27:23.587Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phoboslab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-08-10T11:14:58.000Z","updated_at":"2025-04-26T19:33:19.000Z","dependencies_parsed_at":"2024-03-02T23:25:14.137Z","dependency_job_id":"c4eddbae-d83f-44ee-a8ed-e17bf90fdc84","html_url":"https://github.com/phoboslab/wipeout-rewrite","commit_stats":null,"previous_names":["phoboslab/wipeout-rewrite"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoboslab%2Fwipeout-rewrite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoboslab%2Fwipeout-rewrite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoboslab%2Fwipeout-rewrite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoboslab%2Fwipeout-rewrite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phoboslab","download_url":"https://codeload.github.com/phoboslab/wipeout-rewrite/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254052678,"owners_count":22006716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T17:00:36.124Z","updated_at":"2025-05-14T02:04:54.791Z","avatar_url":"https://github.com/phoboslab.png","language":"C","funding_links":[],"categories":["C","Legend","others","Games","Racing","Nintendo Wii"],"sub_categories":["WipeOut"],"readme":"# wipEout Rewrite\n\nThis is a re-implementation of the 1995 PSX game wipEout.\n\nPlay here: https://phoboslab.org/wipegame/\n\nMore info in my blog: https://phoboslab.org/log/2023/08/rewriting-wipeout\n\n⚠️ Work in progress. Expect bugs.\n\n# Building\n\nThe Wipeout rewrite supports two different platform-backends:\n[SDL2](https://github.com/libsdl-org/SDL) and\n[Sokol](https://github.com/floooh/sokol).\nThe only difference in features is that the SDL2 backend supports game controllers \n(joysticks, gamepads) and uses OpenGL 2.x, while the Sokol backend does not\nsupport controllers and uses OpenGL 3.3.\nThe Sokol backend is also only supported on macOS, Linux, Windows and Emscripten.\n\nFor Linux \u0026 Unix-likes a simple Makefile is a provided. Additionally, this\nproject can be build with [CMake](https://cmake.org) for all platforms.\n\nConsult the following sections for how to install the prerequisites for your platform:\n\n\n## Linux \u0026 Unix-like\n\nBuilding on Linux should be as simple as installing CMake, GLEW, and the\nnecessary platform libraries from your package manager.\nFor brevity, this guide assumes that the necessary development tools (i.e. a C\ncompiler, make) have already been installed.\nThe SDL2 platform should only require the `sdl2` library and headers, whilst the\nSokol platform requires the library/headers for:\n\n- `X11`\n- `Xi`\n- `Xcursor`\n- `ALSA`\n\nThe following snippets list the specific package manager invocations for\npopluar \\*nix OSs:\n\n### Debian/Ubuntu\n\n```sh\napt install cmake libglew-dev\n# For SDL2\napt install libsdl2-dev\n# For Sokol\napt install libx11-dev libxcursor-dev libxi-dev libasound2-dev\n```\n\n### Fedora\n\n```sh\ndnf install cmake glew-devel\n# For SDL2\ndnf install SDL2-devel\n# For Sokol\ndnf install libx11-devel libxcursor-devel libxi-devel alsa-lib-devel\n```\n\n### Arch Linux\n\n```sh\npacman -S cmake glew\n# For SDL2\npacman -S sdl2\n# For Sokol\npacman install libx11 libxcursor libxi alsa-lib\n```\n\n### OpenSUSE\n\n```sh\nzypper install cmake glew-devel\n# For SDL2\nzypper install SDL2-devel\n# For Sokol\nzypper install libx11-devel libxcursor-devel libxi-devel alsa-lib-devel\n```\n\n### FreeBSD\n\n```sh\npkg install cmake sdl2\n```\n\n### OpenBSD\n\n```sh\npkg_add cmake sdl2\n```\n\nNote that the Sokol platform is not supported on the BSDs, since the Sokol\nheaders themselves do not support these Operating Systems.\n\nWith the packages installed, you can now setup and build:\n\n```sh\n# With make for SDL2 backend\nmake sdl\n\n# With make for SDL2 with GLX backend (for legacy NVIDIA and perhaps others)\nUSE_GLX=true make sdl\n\n# With make for Sokol backend\nmake sokol\n\n# With cmake\ncmake -S path/to/wipeout-rewrite -B path/to/build-dir\ncmake --build path/to/build-dir\n```\n\n## macOS\n\nCurrently only the SDL2 platform works.\nmacOS is very picky about the GLSL shader version when compiling with Sokol and\nOpenGL3.3; it shouldn't be too difficult to get it working, but will probably\nrequire a bunch of `#ifdefs` for SDL and WASM.\nPull-requests welcome!\n\nIt is recommended to use [Homebrew](https://brew.sh) to fetch the required\nsoftware, other solutions (e.g. MacPorts) may work but have not been tested.\nUsing homebrew, you can install the required software with the following:\n\n```sh\nbrew install cmake\n# For SDL2\nbrew install sdl2\n# Nothing extra needed for Sokol\n```\n\nWith the packages installed, you can now setup and build:\n\n```sh\ncmake -S path/to/wipeout-rewrite -B path/to/build-dir \\\n\t-DCMAKE_PREFIX_PATH=\"$(brew --prefix sdl2)\"\ncmake --build path/to/build-dir\n```\n\n## Windows\n\n### clang-cl\n\nBuilding natively on Windows requires a more complicated setup. The source code\nrelies on GCC extensions that are not supported by `msvc`, which requires the\nuse of `clang-cl`.\nThe simplest way to get a build environment with `clang-cl` is to download and\ninstall [Visual Studio](https://visualstudio.microsoft.com/downloads/) (2022 at\nthe time of writing) with the \"Desktop development with C++\" option selected.\nAlso make sure to select \"Clang C++ compiler for Windows\" in \"Individual\nComponents\" if it hasn't been already.\n\nThe next step is to acquire development versions of SDL2 and GLEW.\nThe easiest way is to install [vcpkg](https://vcpkg.io) and let Visual Studio's\nintegration build and install it for you.\nFollow the [vcpkg \"Getting Started\" guide](https://vcpkg.io/en/getting-started)\nand integrate it with Visual Studio.\n\nFinally, open Visual Studio, select \"Open a local folder\", and navigate to the\ndirectory where you have cloned this repo.\nVisual Studio should automatically configure itself to build with CMake, and\nbuild the necessary libraries using vcpkg.\nSince this repository contains a `CMakeSettings.json` file, there should already\nbe CMake configurations listed in the menubar dropdown.\nWhen adding a new configuration, make sure to use the `clang_cl` toolsets.\nSelect the config you want from the list and build using `F7`, the build\nartifacts should be under `path\\to\\wipeout-rewrite\\build`.\n\n### MSYS2\n\nBuilding with [MSYS2](https://www.msys2.org/) is sightly easier but still\ninvolves a bit of configuration.\nDownload and install MSYS2 using the installer, and enter a MSYS2 environment\nusing the start menu. For this guide we're using the `UCRT` environment, but the\nothers work just as well.\n\nInstall the following packages using `pacman`:\n\n```sh\npacman -S mingw-w64-ucrt-x86_64-{toolchain,cmake,SDL2,glew}\n```\n\nWith the packages installed, you can now setup and build:\n\n```sh\n# With make for SDL2 backend\nmake sdl\n\n# With make for Sokol backend\nmake sokol\n\n# With cmake\ncmake -S path/to/wipeout-rewrite -B path/to/build-dir\ncmake --build path/to/build-dir\n```\n\n## Emscripten\n\nDownload and install the [Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html),\nso that `emcc` and `emcmake` is in your path.\nLinux users may find it easier to install using their distro's package manager\nif it is available.\nNote that only the Sokol platform will work for WebAssembly builds.\n\nWith the SDK installed, you can now setup and build:\n\n```sh\n# With make (combined full and minimal builds)\nmake wasm\n\n# With cmame (full or minimal builds specified via -DMINIMAL_BUNDLE={OFF|ON})\nemcmake cmake -S path/to/wipeout-rewrite -B path/to/build-dir -DPLATFORM=SOKOL\ncmake --build path/to/build-dir\n```\n\n## Build Flags for cmake\n\nThe following is a table for project specific build flags using CMake:\n\n| Flag             | Description                                                                             | Options                                                                              | Default                                                                                     |\n|------------------|-----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|\n| `PLATFORM`       | The platform to build for.                                                              | `SDL2`, `SOKOL`                                                                      | `SDL2`                                                                                      |\n| `RENDERER`       | Graphics renderer.                                                                      | `GL` for OpenGL 3, `GLES2` for OpenGL ES 2, `SOFTWARE` for a pure software renderer. | `GL`                                                                                        |\n| `USE_GLVND`      | Link against the OpenGL Vendor Neutral Dispatch libraries.                              | `ON`, `OFF`                                                                          | `ON`, falling back to `OFF` if the libraries aren't found or an OpenGL renderer isn't used. |\n| `MINIMAL_BUNDLE` | Do not include the music/intro video when building for the web.                         | `ON`, `OFF`                                                                          | `OFF`                                                                                       |\n| `PATH_ASSETS`    | Set a static path where the game assets are loaded from.                                | Any valid filesystem path.                                                           | Unset                                                                                       |\n| `PATH_USERDATA`  | Set a static path where user data (e.g. game saves) are stored.                         | Any valid filesystem path.                                                           | Unset                                                                                       |\n| `DEV_BUILD`      | Sets the assets/userdata path to the source directory. Useful when testing any changes. | `ON`, `OFF`                                                                          | `OFF`                                                                                       |\n\n# Running\n\nThis repository does not contain the assets (textures, 3d models etc.) required to run the game. This code mostly assumes to have the PSX NTSC data, but some menu models from the PC version are required as well. Both of these can be easily found on archive.org and similar sites. The music (optional) needs to be provided in [QOA format](https://github.com/phoboslab/qoa). The intro video as MPEG1.\n\nThe directory structure is assumed to be as follows\n\n```\n./wipegame # the executable\n./wipeout/textures/\n./wipeout/music/track01.qoa\n./wipeout/music/track02.qoa\n...\n```\n\nNote that the blog post announcing this project may or may not provide a link to a ZIP containing all files needed. Who knows!\n\nOptionally, if you want to use a game controller that may not be supported by SDL directly, you can place the [gamecontrollerdb.txt](https://github.com/gabomdq/SDL_GameControllerDB) in the root directory of this project (along the compiled `wipegame`). Note that if you want to use the analog sticks of your gamecontroller in the game you have to configure it in the Options menu; the analog sticks are not bound by default.\n\n\n\n# Ideas for improvements\n\nPRs Welcome.\n\n## Not yet implemented\n\nSome things from the original game are not yet implemented in this rewrite. This includes\n\n- game-end animations, formerly `Spline.cpp` (the end messages are just shown over the attract mode cameras)\n- reverb for sfx and music when there's more than 4 track faces (tunnels and such)\n- some more? grep the source for `TODO` and `FIXME`\n\n## Gameplay, Visuals\n\n- less punishing physics for ship vs. ship collisions\n- less punishing physics for sideways ship vs. track collisions (i.e. wall grinding like in newer wipEouts)\n- somehow resolve the issue of inevitably running into an enemy that you just shot\n- add additional external view that behaves more like in modern racing games\n- dynamic lighting on ships\n- the scene geometry could use some touch-ups to make an infinite draw distance option less awkward\n- increase FOV when going over a boost\n- better menu models for game exit and video options\n- gamepad analog input feels like balancing an egg\n- fix collision issues on junctions (also present in the original)\n\n## Technical\n\n- implement frustum culling for scene geometry, the track and ships. Currently everything within the fadeout radius is drawn.\n- put all static geometry into a GPU-side buffer. Currently all triangles are constructed at draw time. Uploading geometry is complicated a bit by the fact that some scene animations and the ship's exhaust need to update geometry for each frame.\n- the menu system is... not great. It's better than the 5000 lines of spaghetti that it was before, but the different layouts need a lot of `if`s\n- the save data is just dumping the whole struct on disk. A textual format would be preferable.\n- since this whole thing is relying on some custom assembled assets anyway, maybe all SFX should be in QOA format too (like the music). Or switch everything to Vorbis.\n- a lot of functions assume that there's just one player. This needs to be fixed for a potential splitscreen mode.\n\n\n# License\n\nThere is none. This code may or may not be based on the source code of the PC (ATI-Rage) version that was leaked in 2022. If it were, it would probably violate copyright law, but it may also fall under fair use ¯\\\\\\_(ツ)\\_/¯\n\nWorking with this source code is probably fine, considering that this game was originally released 28 years ago (in 1995), that the current copyright holders historically didn't care about any wipEout related files or code being available on the net and that the game is currently not purchasable in any shape or form.\n\nIn any case, you may NOT use this source code in a commercial release. A commercial release includes hosting it on a website that shows any forms of advertising.\n\nPS.: Hey Sony! If you're reading this, I would love to work on a proper, officially sanctioned remaster. Please get in touch \u003c3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoboslab%2Fwipeout-rewrite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphoboslab%2Fwipeout-rewrite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoboslab%2Fwipeout-rewrite/lists"}