• Stars
    star
    2,449
  • Rank 17,958 (Top 0.4 %)
  • Language
    C
  • Created 9 months ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

wipEout Rewrite

This is a re-implementation of the 1995 PSX game wipEout.

Play here: https://phoboslab.org/wipegame/

More info in my blog: https://phoboslab.org/log/2023/08/rewriting-wipeout

⚠️ Work in progress. Expect bugs.

Building

The game currently supports two different platform-backends: SDL2 and Sokol. The only difference in features is that the SDL2 backend supports game controllers (joysticks, gamepads), while the Sokol backend does not.

Linux

Ubuntu

# for SDL2 backend
apt install libsdl2-dev libglew-dev
make sdl
# for Sokol backend
apt install libx11-dev libxcursor-dev libxi-dev libasound2-dev
make sokol

Fedora

# for SDL2 backend
dnf install SDL2-devel glew-devel
make sdl
# for Sokol backend
dnf install libX11-devel libXi-devel alsa-lib-devel glew-devel libXcursor-devel
make sokol

macOS

Currently only the SDL2 backend works. macOS is very picky about the GLSL shader version when compiling with Sokol and OpenGL3.3; it shouldn't be too difficult to get it working, but will probably require a bunch of #ifdefs for SDL and WASM. PRs welcome!

brew install sdl2 glew
make sdl

Windows

In theory both backends should work on Windows, but the Makefile is missing the proper compiler flags. Please send a PR!

todo

WASM

Install emscripten and activate emsdk, so that emcc is in your PATH. The WASM version automatically selects the Sokol backend. I'm not sure what needs to be done to make the SDL2 backend work with WASM.

make wasm

This builds the minimal version (no music, no intro) as well as the full version.

Flags

The makefile accepts several flags. You can specify them with make FLAG=VALUE

  • DEBUGtrue or fals, default is false. Whether to include debug symbols in the build.
  • RENDERERGL or SOFTWARE, default is GL (the SOFTWARE renderer is very much unfinished and only works with SDL)
  • USE_GLXtrue or false, default is false and uses GLVND over GLX. Only used for the linux build.

Running

This 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. The intro video as MPEG1.

The directory structure is assumed to be as follows

./wipegame # the executable
./wipeout/textures/
./wipeout/music/track01.qoa
./wipeout/music/track02.qoa
...

Note that the blog post announcing this project may or may not provide a link to a ZIP containing all files needed. Who knows!

Optionally, if you want to use a game controller that may not be supported by SDL directly, you can place the gamecontrollerdb.txt in the root directory of this project (along the compiled wipegame).

Ideas for improvements

PRs Welcome.

Not yet implemented

Some things from the original game are not yet implemented in this rewrite. This includes

  • screen shake effect
  • game-end animations, formerly Spline.cpp (the end messages are just shown over the attract mode cameras)
  • viewing highscores in options menu
  • reverb for sfx and music when there's more than 4 track faces (tunnels and such)
  • some more? grep the source for TODO and FIXME

Gameplay, Visuals

  • less punishing physics for ship vs. ship collisions
  • less punishing physics for sideways ship vs. track collisions (i.e. wall grinding like in newer wipEouts)
  • somehow resolve the issue of inevitably running into an enemy that you just shot
  • add option to lessen the roll in the internal view
  • add additional external view that behaves more like in modern racing games
  • dynamic lighting on ships
  • the scene geometry could use some touch-ups to make an infinite draw distance option less awkward
  • increase FOV when going over a boost
  • better menu models for game exit and video options
  • gamepad analog input feels like balancing an egg
  • fix collision issues on junctions (also present in the original)

Technical

  • implement frustum culling for scene geometry, the track and ships. Currently everything within the fadeout radius is drawn.
  • 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.
  • 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 ifs
  • the save data is just dumping the whole struct on disk. A textual format would be preferable.
  • 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.
  • a lot of functions assume that there's just one player. This needs to be fixed for a potential splitscreen mode.

License

There 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 ¯\_(ツ)_/¯

Working 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.

In 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.

PS.: Hey Sony! If you're reading this, I would love to work on a proper, officially sanctioned remaster. Please get in touch <3

More Repositories

1

qoi

The “Quite OK Image Format” for fast, lossless image compression
C
6,657
star
2

jsmpeg

MPEG1 Video Decoder in JavaScript
JavaScript
6,222
star
3

Ejecta

A Fast, Open Source JavaScript, Canvas & Audio Implementation for iOS
Objective-C
2,795
star
4

jsmpeg-vnc

A low latency, high framerate screen sharing server for Windows and client for browsers
C
2,329
star
5

Impact

HTML5 Game Engine
JavaScript
1,916
star
6

q1k3

A tiny FPS for js13k
JavaScript
1,471
star
7

underrun

Twin stick shooter game in 13kb of JavaScript/WebGL
JavaScript
1,075
star
8

pl_mpeg

Single file C library for decoding MPEG1 Video and MP2 Audio
C
695
star
9

JavaScriptCore-iOS

Apple's JavaScript Engine, with modified project files for iOS
C++
685
star
10

qoa

The “Quite OK Audio Format” for fast, lossy audio compression
C
641
star
11

wipeout

WipEout (PSX) Model Viewer in WebGL/Three.js
JavaScript
520
star
12

voidcall

Real time strategy game in 13kb of JavaScript/WebGL
JavaScript
365
star
13

WebGLImageFilter

Fast image filters for Browsers with WebGL support
JavaScript
322
star
14

js-hqx

hqx Pixel Art Scaling Algorithm in JavaScript
JavaScript
187
star
15

TwoPointFive

3D View Plugin for the Impact HTML5 Game Engine
JavaScript
140
star
16

Quakespasm-Rift

Quake for Oculus Rift
C
138
star
17

Asaph

A micro-blogging system, focusing on collecting links and images
PHP
97
star
18

ttt

Tiny Texture Tumbler – A JS library and an editor to create textures
HTML
78
star
19

pagenode

Pagenode – No Bullshit Content Management
PHP
68
star
20

OculusWeb

A fast and lean HTTP/WebSocket Oculus Rift Tracking Server for Windows and Mac
C
57
star
21

impact-box2d

Box2D Plugin for the Impact Game Engine
JavaScript
51
star
22

JS360

A NET framework for JavaScript on the XBox with XNA.
C#
48
star
23

json-format

JSON Pretty Printer for JavaScript
JavaScript
38
star
24

picturelicious

Social Imaging Platform
PHP
36
star
25

impact-splash-loader

A loading screen for Impact that shows the Impact logo
JavaScript
34
star
26

rectpack

Super Simple Rectangle Packing for JS
JavaScript
13
star
27

arduboy-games

My Arduboy Mini Games
C
12
star
28

jQuery-JSH

Tiny jQuery Plugin for JavaScript SyntaxHighlighting
11
star
29

pagenode-legacy

Older version of Pagenode with a complete admin interface
PHP
2
star