[a Work In Progress fork, expect history overwriting]
Find a file
Andrei Alexeyev 9b3779ebb4
Some renderer refactoring (mostly API and GLES preparations) (#144)
* Refacor uniforms API:

    - More complete and consistent
    - Type-safety
    - Usage correctess assertions missing for now, planned

* Redesign texturing API: texunits gone, assign textures to sampler uniforms directly

r_texture_create now allocates memory and returns an opaque Texture
pointer; similar changes to the other renderer APIs will follow.

* Framebuffers: make _create return an opaque pointer, add debug label APIs (unused for now)

* opaque pointers and debug label APIs for vertex arrays and buffers

* fix null renderer

* Refactor glsl preprocessing into an independent module

* Separate shader resource management from renderer backend

This makes it possible to add more shading languages and/or include a
transpiler, which will be useful for the GLES backend.

* refactor r_clear into a stateless API

* add r_texture_clear API; fix gl33_framebuffer_clear

* Replace deprecated glsl_objects with objects in all *.prog files

* fix missing texture_clear implementation in null renderer

* remove some dead code in null renderer

* fix GLES segfault

* GLES 3.0 actually has glVertexAttribDivisor

* Query GL for supported GLSL versions (preparing to add shader transcompilation)
2018-09-14 10:37:20 +03:00
atlas High-res portraits 2018-08-13 19:56:43 +03:00
doc Add Reimu Hakurei as a playable character (#106) 2018-08-11 22:13:48 +03:00
external Update CGLM to the latest version 2018-07-11 18:05:47 +03:00
misc Attempt to improve the stage 1 background. "reeds" did not survive. 2018-08-29 23:21:29 +03:00
resources Some renderer refactoring (mostly API and GLES preparations) (#144) 2018-09-14 10:37:20 +03:00
scripts fix and enable mipmaps, atlas maintenance, etc. 2018-08-12 02:38:03 +03:00
src Some renderer refactoring (mostly API and GLES preparations) (#144) 2018-09-14 10:37:20 +03:00
subprojects Some renderer refactoring (mostly API and GLES preparations) (#144) 2018-09-14 10:37:20 +03:00
xdg meson: fixed some install_relative issues 2017-12-21 03:58:54 +01:00
.gitignore Rendering system rewrite, tons of refactoring, optimizations, and other cool stuff (#116) 2018-04-12 17:08:48 +03:00
COPYING COPYING: small clarification 2018-02-09 08:38:09 +02:00
meson.build Use GLAD to set up GL function pointers 2018-06-30 23:11:54 +03:00
meson_options.txt Add build option to disable object pools (for debugging) 2018-08-31 05:59:47 +03:00
README.rst Text rendering rewrite and optimizations; some refactoring (#129) 2018-06-30 00:36:51 +03:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

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

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