LambdaHack- A roguelike game engine in early and active development

Safe HaskellSafe-Inferred



Game time and speed.



data Time Source

Game time in ticks. The time dimension. One tick is 1 microsecond (one millionth of a second), one turn is 0.5 s.


timeZero :: TimeSource

Start of the game time, or zero lenght time interval.

timeClip :: TimeSource

At least once per clip all moves are resolved and a frame or a frame delay is generated. Currently one clip is 0.1 s, but it may change, and the code should not depend on this fixed value.

timeTurn :: TimeSource

One turn is 0.5 s. The code may depend on that. Actors at normal speed (2 m/s) take one turn to move one tile (1 m by 1 m).

timeAdd :: Time -> Time -> TimeSource

Time addition.

timeFit :: Time -> Time -> IntSource

How many time intervals of the latter kind fits in an interval of the former kind.

timeNegate :: Time -> TimeSource

Negate a time interval. Can be used to subtract from a time or to reverse the ordering on time.

timeScale :: Time -> Int -> TimeSource

Scale time by an Int scalar value.

timeToDigit :: Time -> Time -> CharSource

Represent the main 10 thresholds of a time range by digits, given the total length of the time range.

data Speed Source

Speed in meters per 1 million seconds (m/Ms). Actors at normal speed (2 m/s) take one time turn (0.5 s) to move one tile (1 m by 1 m).

toSpeed :: Double -> SpeedSource

Constructor for content definitions.

speedNormal :: SpeedSource

Normal speed (2 m/s) that suffices to move one tile in one turn.

speedScale :: Speed -> Int -> SpeedSource

Scale speed by an Int scalar value.

ticksPerMeter :: Speed -> TimeSource

The number of time ticks it takes to walk 1 meter at the given speed.

traveled :: Speed -> Time -> IntSource

Distance in meters (so also in tiles, given the chess metric) traveled in a given time by a body with a given speed.

speedFromWeight :: Int -> Int -> SpeedSource

Calculate projectile speed from item weight in grams and speed bonus in percents. See

rangeFromSpeed :: Speed -> IntSource

Calculate maximum range in meters of a projectile from its speed. See With this formula, each projectile flies for exactly one second, that is 2 turns, and then drops to the ground. Dividing and multiplying by 2 ensures both turns of flight cover the same distance.