LambdaHack- A game engine library for roguelike dungeon crawlers

Safe HaskellNone



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 :: Time Source

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

timeClip :: Time Source

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 :: Time Source

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

timeEpsilon :: Time Source

An infinitesimal time period.

absoluteTimeAdd :: Time -> Time -> Time Source

Absolute time addition, e.g., for summing the total game session time from the times of individual games.

absoluteTimeNegate :: Time -> Time Source

Absolute time negation. To be used for reversing time flow, e.g., for comparing absolute times in the reverse order.

timeFit :: Time -> Time -> Int Source

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

timeFitUp :: Time -> Time -> Int Source

How many time intervals of the latter kind cover an interval of the former kind (rounded up).

newtype Delta a Source

One-dimentional vectors. Introduced to tell apart the 2 uses of Time: as an absolute game time and as an increment.


Delta a 


Functor Delta 
Bounded a => Bounded (Delta a) 
Enum a => Enum (Delta a) 
Eq a => Eq (Delta a) 
Ord a => Ord (Delta a) 
Show a => Show (Delta a) 
Binary a => Binary (Delta a) 

timeShift :: Time -> Delta Time -> Time Source

Shifting an absolute time by a time vector.

timeDeltaToFrom :: Time -> Time -> Delta Time Source

Time time vector between the second and the first absolute times. The arguments are in the same order as in the underlying scalar subtraction.

timeDeltaReverse :: Delta Time -> Delta Time Source

Reverse a time vector.

timeDeltaScale :: Delta Time -> Int -> Delta Time Source

Scale the time vector by an Int scalar value.

timeDeltaToDigit :: Delta Time -> Delta Time -> Char.Char Source

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

ticksPerMeter :: Speed -> Delta Time Source

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

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 make one step (move one tile, which is 1 m by 1 m).

toSpeed :: Int -> Speed Source

Constructor for content definitions.

fromSpeed :: Speed -> Int Source

Pretty-printing of speed in the format used in content definitions.

speedZero :: Speed Source

No movement possible at that speed.

speedNormal :: Speed Source

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

speedScale :: Rational -> Speed -> Speed Source

Scale speed by an Int scalar value.

timeDeltaDiv :: Delta Time -> Int -> Delta Time Source

Divide a time vector.

speedAdd :: Speed -> Speed -> Speed Source

Speed addition.

speedNegate :: Speed -> Speed Source

Speed negation.

speedFromWeight :: Int -> Int -> Speed Source

Calculate projectile speed from item weight in grams and velocity percent modifier. See

rangeFromSpeed :: Speed -> Int Source

Calculate maximum range in meters of a projectile from its speed. See With this formula, each projectile flies for at most 1 second, that is 2 turns, and then drops to the ground.

rangeFromSpeedAndLinger :: Speed -> Int -> Int Source

Calculate maximum range taking into account the linger percentage.