With this patch, entities can serve as a sound source whose position
updates relative to the listener. This implements the last missing
feature of my previous positional audio patch, which is moving sound sources.
Previously, all sounds were relative to the listener with the listener
centered at (0, 0, 0), and once a sound started playing, the position could
not be changed. Volume was set as an estimation of the distance to the listener.
These restrictions are now gone; OpenAL will handle the volume & panning
based on the distance.
The remaining problem is that stereo sounds are not attenuated, at all.
Lua additions:
- playSfx() takes an additional parameter now.
- entity_setStopSoundsOnDeath()
This changes all typical vector interpolation functions that get
value, time, loopType, pingPong, ease as args from the Lua state;
use unified functions for all value type occurances.
This fixes the slightly annoying problem that it was not possible to
pass a boolean true to pingPong or ease, because lua_tonumber() would
always return 0 in that case.
Also changed:
- obj_getWorldPosition() now takes optional x,y-vector
New:
- obj_getWorldPositionAndRotation() is a more efficient shortcut,
as often both position and rotation are retrieved together,
and the underlying matrix chain operation is rather expensive.
- entity_getEmitter()
- entity_getNumEmitters()
- setSceneColor2()
- getSceneColor2()
This means there are no longer two builds necessary (one normal,
one dev), and all mod deveopment can be done using one build,
by setting
Demo builds now allow browsing the online mod list, but neither
downloading nor starting mods or applying patches.
The fix as suggested by Jonas Kulla on the mailing list is also in.
There hasn't been any extensive testing, and it may not yet compile
on platforms other than win32.
- quad_setRepeatTexture()
- quad_setRepeatScale()
- quad_isRepeatTexture()
(bone, entity, ... as well)
- getOldDT() - return unmodified dt
- getDT() - as passed to update(), for complicated edge cases
where dt is unavailable but required.
This allows to e.g. prevent ACTION_TOGGLEHELPSCREEN from being handled by
the game, and instead use a node's catch action functionality to handle the event.
Add related Lua functions:
- setIgnoreAction()
- isIgnoreAction()
- sendAction()
Respecting maxspeed lerp is not a good idea, there are nodes that set this
(normalpass, energypass, just to name two).
This causes way too fast swimming while the maxspeed lerp is > 1.
This bug occured when standing still and attempting to move,
having high FPS and very low difftime.
With near-zero vel, it was not built up enough per frame,
therefore velLen was always < 2 and was subsequently reset back to 0,
which resulted in naija never actually moving.
This bug could be reproduced by holding Shift+F with 60 FPS, and then
holding an arrow key.
Thanks to `Nax for reporting the problem.
(Cleaned out some cruft too, the actual change is the last line of the diff)
Apparently there is a new map with the index 55 -- a related entry was
added to the worldmap.txt file to prevent data loss, just in case.
<StartData ch=... /> field is not yet handled missing.
Hopefully the resulting format can be loaded on android without problems,
especially because both "ingr" and "ingrNames" fields appear in the
StartData tag now.
This adds a few additional interface functions, to be defined in:
scripts/global/cooking.lua, or
_mods/XYZ/scripts/cooking.lua
Added functions:
cookFailure(a,b,c) - Called when no recipe could be found for ingredients a,b,c
getIngredientString() - Called by the menu. Expected to return effects description
for scripted ingredient..
useIngredient(name) - Called when a scripted ingredient will be eaten.
Return true to eat.
Use a line like this in ingredients.txt:
LuaLoaf sealoaf Loaf (script)
to enable calling useIngredient() upon eating.
This commit is mainly intended to ease packaging for linux.
Unless environment variable AQUARIA_DATA_PATH is set, there are two
directories which are checked by the game:
If AQUARIA_DEFAULT_DATA_DIR is defined, it will chdir there for main
operation. If it's not defined, it chdirs into the directory where
the executable is located.
Then, if AQUARIA_EXTRA_DATA_DIR is defined, it will mount this directory
and all contents into the working path, so that the files present there
will override those from the working directory when accessed by the game.
Setting the environment variable AQUARIA_DATA_PATH will disable this
behavior altogether and use *only* AQUARIA_DATA_PATH as working dir.