* First steps towards shader transpilation Needs to be manually enabled via -Dshader_transpiler=true. Requires shaderc. https://github.com/google/shaderc Not yet functional due to missing SPIRV-Cross integration. SPIRV-Cross currently does not have an official C API, and crossc is too minimal to be useful. The current plan is to extend crossc and vendor it, while also sending PRs upstream. * Integrate crossc; shader transpilation for GLES now works * fix leak * gles30 backend now playable on Mesa with 3.2 context Some rendering issues are present. Identified so far: - Marisa's lasers are invisible - Death effect looks wrong Also, a small pixmap manipulation library has been written, and the texture uploading API redesigned around it. * fix marisa lasers in GLES (uniform name clashed with builtin) * fix player death effect in GLES (another name clash) * Dump ANGLE's translated shader code in debug log * fix screenshots * Drop support for triangle fans, switch to strips Fans offer no advantage over strips, and they've been removed in D3D10+, so ANGLE has to emulate them. * crude workaround for an ANGLE bug * Re-enable GL debug labels, fix an issue with them that affected ANGLE (but was always technically a bug) * fix race condition in shaderc initialization * New SDL_RWops interface for vertex buffers * Optimize VBO streaming via buffering updates Measurable performance improvement even with the main gl33 renderer, drastic improvement with ANGLE. * Fix the depth texture binding problem under ANGLE Apparently it hates GL_DEPTH_COMPONENT16 for some reason. Sized internal formats are not supported in GLES 2.0 anyway, so not using them is probably a good idea. * fix GLES2.0 segfault (the backend still doesn't work, though) * dump GL extensions at info log level, not debug * get around a Mesa bug; more correct texture format table for GLES2 * Correct GLES3 texture format table according to the spec Not a Mesa bug after all * require crossc>=1.5.0, fallback to subproject * Request at least 8bit per color channel in GL backends * Forbid lto for static windows builds with shader_transpiler=true * fix edge case segfault * Add basic ANGLE bundling support to the build system Windows only, and no NSIS support yet * Fix various windows-related build system and installer brokenness * Disable gles backends by default * update documentation
166 lines
5.3 KiB
ReStructuredText
166 lines
5.3 KiB
ReStructuredText
Taisei
|
||
======
|
||
|
||
.. contents::
|
||
|
||
Introduction
|
||
------------
|
||
|
||
Taisei is an open clone of the Tōhō Project series. Tōhō is a one-man
|
||
project of shoot-em-up games set in an isolated world full of Japanese
|
||
folklore.
|
||
|
||
Installation
|
||
------------
|
||
|
||
Dependencies
|
||
^^^^^^^^^^^^
|
||
|
||
- SDL2 >= 2.0.5, SDL2_mixer, SDL2_image
|
||
- zlib
|
||
- libzip >= 1.0
|
||
- libpng >= 1.5.0
|
||
- libjpeg
|
||
- freetype2
|
||
- OpenGL >= 3.3, or OpenGL ES >= 3.0
|
||
- libshaderc (optional, for OpenGL ES backends)
|
||
- crossc >= 1.5.0 (optional, for OpenGL ES backends)
|
||
|
||
Build-only dependencies
|
||
^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
- meson >= 0.45.0 (build system)
|
||
- Python >= 3.4
|
||
- pkg-config
|
||
- docutils (optional, for documentation)
|
||
|
||
To build and install Taisei just follow these steps.
|
||
|
||
::
|
||
|
||
mkdir build
|
||
cd build
|
||
meson --prefix=$yourprefix ..
|
||
ninja
|
||
ninja install
|
||
|
||
This will install game data to ``$prefix/share/taisei/`` and build this
|
||
path *statically* into the executable. This might be a package
|
||
maintainer’s choice. Alternatively you may want to add
|
||
``-Dinstall_relative=true`` to get a relative structure like
|
||
|
||
::
|
||
|
||
$prefix/taisei
|
||
$prefix/data/
|
||
|
||
``install_relative`` is always set when building for Windows.
|
||
|
||
The OpenGL ES 3.0 backend is not built by default. To enable it, do:
|
||
|
||
::
|
||
|
||
meson configure -Dr_gles30=true -Dshader_transpiler=true
|
||
|
||
See `here <doc/ENVIRON.rst>`__ for information on how to activate it.
|
||
Alternatively, do this to make GLES 3.0 the default backend:
|
||
|
||
::
|
||
|
||
meson configure -Dr_default=gles30
|
||
|
||
Note that while it's also possible to enable a GLES 2.0 backend, it's currently
|
||
not functional.
|
||
|
||
Where are my replays, screenshots and settings?
|
||
-----------------------------------------------
|
||
|
||
Taisei stores all data in a platform-specific directory:
|
||
|
||
- On **Windows**, this will probably be ``%APPDATA%\taisei``
|
||
- On **macOS**, it's ``$HOME/Library/Application Support/taisei``
|
||
- On **Linux**, **\*BSD**, and most other **Unix**-like systems, it's
|
||
``$XDG_DATA_HOME/taisei`` or ``$HOME/.local/share/taisei``
|
||
|
||
This is referred to as the **Storage Directory**. You can set the
|
||
environment variable ``TAISEI_STORAGE_PATH`` to override this behaviour.
|
||
|
||
Game controller support
|
||
-----------------------
|
||
|
||
Taisei uses SDL2's unified GameController API. This allows us to
|
||
correctly support any device that SDL recognizes by default, while
|
||
treating all of them the same way. This also means that if your device
|
||
is not supported by SDL, you will not be able to use it unless you
|
||
provide a custom mapping. If your controller is listed in the settings
|
||
menu, then you're fine. If not, read on.
|
||
|
||
An example mapping string looks like this:
|
||
|
||
::
|
||
|
||
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,
|
||
|
||
There are a few ways to generate a custom mapping:
|
||
|
||
- You can use the
|
||
`controllermap <https://aur.archlinux.org/packages/controllermap>`__
|
||
utility, which `comes with SDL source
|
||
code <https://hg.libsdl.org/SDL/file/68a767ae3a88/test/controllermap.c>`__.
|
||
- If you use Steam, you can configure your controller there. Then you
|
||
can add Taisei as a non-Steam game; run it from Steam and everything
|
||
should *just work™*. In case you don't want to do that, find
|
||
``config/config.vdf`` in your Steam installation directory, and look
|
||
for the ``SDL_GamepadBind`` variable. It contains a list of SDL
|
||
mappings separated by line breaks.
|
||
- You can also try the `SDL2 Gamepad Tool by General
|
||
Arcade <http://www.generalarcade.com/gamepadtool/>`__. This program
|
||
is free to use, but not open source.
|
||
- Finally, you can try to write a mapping by hand. You will probably
|
||
have to refer to the SDL documentation. See
|
||
`gamecontrollerdb.txt <misc/gamecontrollerdb/gamecontrollerdb.txt>`__
|
||
for some more examples.
|
||
|
||
Once you have your mapping, there are two ways to make Taisei use it:
|
||
|
||
- Create a file named ``gamecontrollerdb.txt`` where your config,
|
||
replays and screenshots are, and put each mapping on a new line.
|
||
- Put your mappings in the environment variable
|
||
``SDL_GAMECONTROLLERCONFIG``, also separated by line breaks. Other
|
||
games that use the GameController API will also pick them up.
|
||
|
||
When you're done, please consider contributing your mappings to
|
||
`SDL <https://libsdl.org/>`__,
|
||
`SDL_GameControllerDB <https://github.com/gabomdq/SDL_GameControllerDB>`__,
|
||
and `us <https://github.com/taisei-project/SDL_GameControllerDB>`__, so
|
||
that other people can benefit from your work.
|
||
|
||
Also note that we currently only handle input from analog axes and
|
||
digital buttons. Hats, analog buttons, and anything more exotic will not
|
||
work, unless remapped.
|
||
|
||
Troubleshooting
|
||
---------------
|
||
|
||
Sound problems (Linux)
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
If your sound becomes glitchy, and you encounter lot of console messages
|
||
like:
|
||
|
||
::
|
||
|
||
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occurred
|
||
|
||
it seems like you possibly have broken ALSA configuration. This may be
|
||
fixed by playing with parameter values of ``pcm.dmixer.slave`` option
|
||
group in ``/etc/asound.conf`` or wherever you have your ALSA
|
||
configuration. Commenting ``period_time``, ``period_size``,
|
||
``buffer_size``, ``rate`` may give you the first approach to what to do.
|
||
|
||
Contact
|
||
-------
|
||
|
||
http://taisei-project.org/
|
||
|
||
#taisei-project on Freenode
|