The parser does not know whether the constant proplist it is about to fill
is missing because it was overwritten by a later local/constant, or because
the preparser was interrupted by a script error and didn't store its
proplist. Thus, the parser cannot simply give up at that point, and in
order to keep things simple it creates a throwaway proplist. This proplist
was thrown away too soon, though.
Thanks to Zapper for the testcase.
Only one scenario (Arena.ocf\Ruins.ocs) was using any of the duplicate entries.
The missing earth definition caused earth borders to liquid to be rectangular sometimes.
This might make the rendering a bit quicker, since the whole texture
environment setup that we do every frame is no longer required --
instead only the shader is bound and a few variables uploaded. However,
this was not the main motivation behind this change.
It also simplifies the code a bit. The texture environment setup is
replaced by GLSL code generation. Another small benefit is that for
texture units in material scripts that do not use an actual texture
image no hardware TIU is being used. This reduces the number of hardware
TIUs required for rendering the Clonk from 3 to 2.
The main benefit of this change, however, is that material specific
and clonk specific color variations can be applied correctly. This mainly
concerns ClrModulation and MOD2 drawing. Before, the ClrModulation was
mixed with the material color, which could lead to incorrect results
depending on what the texture units were doing. Now it is being applied
by the shader after all texture units in the material scripts have been
processed.
Another motivation of this change is to implement support for custom
shaders, which is already foreseen by OGRE material scripts. The
specification has only to be implemented. With this change in place,
both custom shaders and "fixed" processing can share the same code in
the engine, since both end up using a shader for the mesh rendering.
The shader currently works only for directional lights, but should be
easy to extend to also support point lights.
EnemyAI:
* Try to avoid shooting allies standing between AI and target. Jump to get free path.
* Fix some cases of AI stuck in wall scaling action
* Ranged enemies face their targets when they shoot
* Catapult handling: If catapult is empty, let go and attack with melee weapon
* Change ranged targets if current is unreachable
* Encounter callbacks to game script and ally wakeup
EvilCastle:
* Lock player view (Prohibit mouse scrolling)
* Encounter messages for some enemies
* Enemy aggro ranges tweaked
* Some landscape reworks
* Icon changed
The missing break meant that the freshly created copy of the proplist would
get overwritten by the original, which was thankfully caught and announced
with "internal error: constant proplist has the wrong parent".
Thanks to Zapper for the testcase.
Library_Inventory: handles slots and an arbitrary amount of hands, generic and not only Clonk-related
Library_InventoryControl: interactions between the user and the inventory
Library_CarryHeavyControl: interaction with carry-heavy-objects
Library_ClonkGamepadControl: gamepad-related stuff
Library_ClonkControl: general Clonk control library
* Wind generator down to 3 wood, 1 metal
* Flagpole down to 3 wood, 1 metal
* Sawmill down to 1 wood, 4 rock
* Trees give 5 wood (that's still 2 wood with direct chopping) to make the sawmill even more efficient
* Reduce maximum number of trees by ~20%, because trees tend to cause so much lag
* Reduce amount of power needed by sawmill to make sure one wind generator is enough even with moderate wind conditions
Instead of just checking whether the material is available, also
consume it.
I'm not quite certain whether we should return the removed material
along with the amount removed (to match the return value of the barrel's
GetLiquid), but since the bucket is not currently accepting wildcards
I don't think it's necessary.
When trying to get the sign of the horizontal velocity, a calculation
erroneously assumed that it could never be 0. When it did, a #DE was
raised. This changeset replaces the calculation with the Sign() function
from Math.c, which handles a zero argument correctly.
* Removed lift tower
* Fix scaffolds walls to no longer move Clonks on creation
* Reduce scaffold hit points
* Add flints to home base material and more flints to landscape
* Remodeled landscape and chests a bit
* Made plane parts destructible on damage, so you can destroy them if they get stuck
* Tweaked storm push a bit
Minimal.ocs is not at all experimental. It has two uses: Testing aspects of
the game that do not depend on the scenario in a clean environment, and
checking that the default scenario settings still work.
This scenario folder is now intended more towards scenario testing purposes rather than containing random development stuff.
Both Experimental.ocd and Experimental.ocf should never be included in releases.
Mostly so that moves them, and so that the airship doesn't appear to be
between the elevator and the elevator case. To prevent other objects from
doing that in the future, move the elevator itself to just behind the
elevator case.
Also set default to 8. This might be a pretty controversial change, but
the amounts of screenshots we have at zoom levels beyond 4 just calls for
a more high-res approach.
Pretty awkward compromise, but the array version seems to confuse a lot of
drivers, without causing an actual error. So this is probably better in
practice until better drivers are more common.
That means the clonk can only have 1 active item now. The old 2-hand-stuff still
exists and can easily be activated through an appendto for scenarios etc.