[a Work In Progress fork, expect history overwriting]
The only case of t==0 being skipped is if the projectile was somehow created after the projectile processing loop for this frame has been finished. Currently that is only possible if a particle spawns a non-particle projectile, which, ideally, should never happen. The same problem exists with other types of entities. For example, if you have a funny projectile rule that spawns an Enemy, that Enemy will have the 0th frame skipped. One way to fix this is to maintain a list of all entities in the game and process them all in a single loop, where newly spawned entities would be appended to the tail of the list. This is also probably the only good way to fix this, too. Handling of all projectile events has been made mandatory to facilitate easier debugging of subtle and/or hard to track bugs. If t<0, then the projectile rule MUST return ACTION_ACK, signifying that it acknowledged the event and handled it appropriately. Otherwise, it SHOULD return ACTION_NONE or ACTION_DESTROY. In a perfect world, those just wouldn't be conflated in the same function with update logic. I've also cleaned up the stage_logic routine a bit. Moved most of the dialog handling into dialog.c and gave higher priority to boss processing. The later is currently necessary to let boss-spawned projectiles and particles to get called with t==0. |
||
---|---|---|
atlas | ||
doc | ||
external | ||
misc | ||
resources | ||
scripts | ||
src | ||
subprojects | ||
xdg | ||
.gitignore | ||
COPYING | ||
meson.build | ||
meson_options.txt | ||
README.rst |
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_ttf, SDL2_mixer, SDL2_image
- zlib
- libzip >= 1.0
- libpng >= 1.5.0
- libjpeg
- 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
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.
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