NAME
TCOD - FFI bindings for libtcod
SYNOPSIS
use TCOD;
use File::Share 'dist_file';
use constant {
WIDTH => 80,
HEIGHT => 60,
};
my $tileset = TCOD::Tileset->load_tilesheet(
path => dist_file( TCOD => 'fonts/dejavu10x10_gs_tc.png' ),
columns => 32,
rows => 8,
charmap => TCOD::CHARMAP_TCOD,
);
my $context = TCOD::Context->new(
columns => WIDTH,
rows => HEIGHT,
tileset => $tileset,
);
my $console = $context->new_console;
while (1) {
$console->clear;
$console->print( 0, 0, 'Hello World!' );
$context->present( $console );
my $iter = TCOD::Event::wait;
while ( my $event = $iter->() ) {
$context->convert_event($event);
print $event->as_string . "\n";
exit if $event->type eq 'QUIT';
}
}
DESCRIPTION
TCOD offers Perl bindings to libtcod, a library for developing roguelike games.
If you're getting started, see TCOD::Context to manage rendering contexts and TCOD::Tileset to load custom fonts to display. TCOD::Event can be used to interact with input and system events. If you want to calculate line-of-sight within a map you can use TCOD::Map, which can also be used by TCOD::Path for path-finding.
On Stability
This distribution is currently experimental, and as such, its API might still change without warning. Any change, breaking or not, will be noted in the change log, so if you wish to use it, please pin your dependencies and make sure to check the change log before upgrading.
FUNCTIONS
get_error
$string = TCOD::get_error;
Get the current error message, if any.
Some functions (eg. TCOD::Context::new will set this string on error. When an error is indicated, you can use this method to retrieve the error.
The string returned by this function is only meaningful if an error has been indicated by some other function, and will only remain meaningful until a new function that uses this mechanism is called.
ENUMS
The enums listed below are available as constants like the ones defined using constant, which means the same caveats apply here.
To provide introspection into the values of the enums, they are also made available as package variables with the names of each enum. This makes it possible to get the name of a value in a given enum with code like the following:
say $TCOD::Alignment{ TCOD::LEFT }; # Prints 'LEFT'
Alignment
- TCOD::LEFT
- TCOD::RIGHT
- TCOD::CENTER
Charmap
- TCOD::CHARMAP_TCOD
- TCOD::CHARMAP_CP437
Renderer
- TCOD::RENDERER_GLSL
- TCOD::RENDERER_OPENGL
- TCOD::RENDERER_SDL
- TCOD::RENDERER_SDL2
- TCOD::RENDERER_OPENGL2
- TCOD::NB_RENDERERS
BackgroundFlag
This flag is used by most functions that modify a cell background colour. It defines how the console's current background color is used to modify the cell's existing background color.
See the documentation for TCOD::Color for details on how color arithmetic works when referenced below.
When equations are listed below, these are applied to each individual
component in turn, with new being the component for the new color, old
being the one for the current one, and white standing in for the maximum
value for a color component (255).
-
TCOD::BKGND_NONE
The cell's background is not modified.
-
TCOD::BKGND_SET
The cell's background is replaced with the new color.
-
TCOD::BKGND_MULTIPLY
The cell's background is multiplied with the new color.
-
TCOD::BKGND_LIGHTEN
Each of the components of the cell's background is replaced with the respective component of the new color if it is lighter.
-
TCOD::BKGND_DARKEN
Each of the components of the cell's background is replaced with the respective component of the new color if it is darker.
-
TCOD::BKGND_SCREEN
The cell's background color is modified according to the following operation:
white - ( white - old ) * ( white - new ) -
TCOD::BKGND_COLOR_DODGE
The cell's background color is modified according to the following operation:
new / ( white - old ) -
TCOD::BKGND_COLOR_BURN
The cell's background color is modified according to the following operation:
white - ( white - old ) / new -
TCOD::BKGND_ADD
The new color is added to the cell's background.
-
TCOD::BKGND_ADDALPHA
Use this as a macro with a float parameter between 0 and 1. The cell's background color is modified according to the following operation:
old + alpha * new -
TCOD::BKGND_BURN
The cell's background color is modified according to the following operation:
old + new - white -
TCOD::BKGND_OVERLAY
The cell's background color is modified according to the following operation:
2 * new * old # if the component is >= 128 white - 2 * ( white - new ) * ( white - old ) # if the component is < 128 -
TCOD::BKGND_ALPHA
Use this as a macro with a float parameter between 0 and 1. The cell's background color is modified according to the following operation:
( 1 - alpha ) * old + alpha * ( new - old ) -
TCOD::BKGND_DEFAULT
Use the console's default background flag. See TCOD::Console::set_background_flag.
ColorControl
- TCOD::COLCTRL_1
- TCOD::COLCTRL_2
- TCOD::COLCTRL_3
- TCOD::COLCTRL_4
- TCOD::COLCTRL_5
- TCOD::COLCTRL_NUMBER
- TCOD::COLCTRL_FORE_RGB
- TCOD::COLCTRL_BACK_RGB
- TCOD::COLCTRL_STOP
Keycode
- TCOD::K_NONE
- TCOD::K_ESCAPE
- TCOD::K_BACKSPACE
- TCOD::K_TAB
- TCOD::K_ENTER
- TCOD::K_SHIFT
- TCOD::K_CONTROL
- TCOD::K_ALT
- TCOD::K_PAUSE
- TCOD::K_CAPSLOCK
- TCOD::K_PAGEUP
- TCOD::K_PAGEDOWN
- TCOD::K_END
- TCOD::K_HOME
- TCOD::K_UP
- TCOD::K_LEFT
- TCOD::K_RIGHT
- TCOD::K_DOWN
- TCOD::K_PRINTSCREEN
- TCOD::K_INSERT
- TCOD::K_DELETE
- TCOD::K_LWIN
- TCOD::K_RWIN
- TCOD::K_APPS
- TCOD::K_0
- TCOD::K_1
- TCOD::K_2
- TCOD::K_3
- TCOD::K_4
- TCOD::K_5
- TCOD::K_6
- TCOD::K_7
- TCOD::K_8
- TCOD::K_9
- TCOD::K_KP0
- TCOD::K_KP1
- TCOD::K_KP2
- TCOD::K_KP3
- TCOD::K_KP4
- TCOD::K_KP5
- TCOD::K_KP6
- TCOD::K_KP7
- TCOD::K_KP8
- TCOD::K_KP9
- TCOD::K_KPADD
- TCOD::K_KPSUB
- TCOD::K_KPDIV
- TCOD::K_KPMUL
- TCOD::K_KPDEC
- TCOD::K_KPENTER
- TCOD::K_F1
- TCOD::K_F2
- TCOD::K_F3
- TCOD::K_F4
- TCOD::K_F5
- TCOD::K_F6
- TCOD::K_F7
- TCOD::K_F8
- TCOD::K_F9
- TCOD::K_F10
- TCOD::K_F11
- TCOD::K_F12
- TCOD::K_NUMLOCK
- TCOD::K_SCROLLLOCK
- TCOD::K_SPACE
- TCOD::K_CHAR
- TCOD::K_TEXT
Char
- TCOD::CHAR_HLINE
- TCOD::CHAR_VLINE
- TCOD::CHAR_NE
- TCOD::CHAR_NW
- TCOD::CHAR_SE
- TCOD::CHAR_SW
- TCOD::CHAR_TEEW
- TCOD::CHAR_TEEE
- TCOD::CHAR_TEEN
- TCOD::CHAR_TEES
- TCOD::CHAR_CROSS
- TCOD::CHAR_DHLINE
- TCOD::CHAR_DVLINE
- TCOD::CHAR_DNE
- TCOD::CHAR_DNW
- TCOD::CHAR_DSE
- TCOD::CHAR_DSW
- TCOD::CHAR_DTEEW
- TCOD::CHAR_DTEEE
- TCOD::CHAR_DTEEN
- TCOD::CHAR_DTEES
- TCOD::CHAR_DCROSS
- TCOD::CHAR_BLOCK1
- TCOD::CHAR_BLOCK2
- TCOD::CHAR_BLOCK3
- TCOD::CHAR_ARROW_N
- TCOD::CHAR_ARROW_S
- TCOD::CHAR_ARROW_E
- TCOD::CHAR_ARROW_W
- TCOD::CHAR_ARROW2_N
- TCOD::CHAR_ARROW2_S
- TCOD::CHAR_ARROW2_E
- TCOD::CHAR_ARROW2_W
- TCOD::CHAR_DARROW_H
- TCOD::CHAR_DARROW_V
- TCOD::CHAR_CHECKBOX_UNSET
- TCOD::CHAR_CHECKBOX_SET
- TCOD::CHAR_RADIO_UNSET
- TCOD::CHAR_RADIO_SET
- TCOD::CHAR_SUBP_NW
- TCOD::CHAR_SUBP_NE
- TCOD::CHAR_SUBP_N
- TCOD::CHAR_SUBP_SE
- TCOD::CHAR_SUBP_DIAG
- TCOD::CHAR_SUBP_E
- TCOD::CHAR_SUBP_SW
- TCOD::CHAR_SMILIE
- TCOD::CHAR_SMILIE_INV
- TCOD::CHAR_HEART
- TCOD::CHAR_DIAMOND
- TCOD::CHAR_CLUB
- TCOD::CHAR_SPADE
- TCOD::CHAR_BULLET
- TCOD::CHAR_BULLET_INV
- TCOD::CHAR_MALE
- TCOD::CHAR_FEMALE
- TCOD::CHAR_NOTE
- TCOD::CHAR_NOTE_DOUBLE
- TCOD::CHAR_LIGHT
- TCOD::CHAR_EXCLAM_DOUBLE
- TCOD::CHAR_PILCROW
- TCOD::CHAR_SECTION
- TCOD::CHAR_POUND
- TCOD::CHAR_MULTIPLICATION
- TCOD::CHAR_FUNCTION
- TCOD::CHAR_RESERVED
- TCOD::CHAR_HALF
- TCOD::CHAR_ONE_QUARTER
- TCOD::CHAR_COPYRIGHT
- TCOD::CHAR_CENT
- TCOD::CHAR_YEN
- TCOD::CHAR_CURRENCY
- TCOD::CHAR_THREE_QUARTERS
- TCOD::CHAR_DIVISION
- TCOD::CHAR_GRADE
- TCOD::CHAR_UMLAUT
- TCOD::CHAR_POW1
- TCOD::CHAR_POW3
- TCOD::CHAR_POW2
- TCOD::CHAR_BULLET_SQUARE
FontFlag
- TCOD::FONT_LAYOUT_ASCII_INCOL
- TCOD::FONT_LAYOUT_ASCII_INROW
- TCOD::FONT_TYPE_GREYSCALE
- TCOD::FONT_TYPE_GRAYSCALE
- TCOD::FONT_LAYOUT_TCOD
- TCOD::FONT_LAYOUT_CP437
FOV
- TCOD::FOV_BASIC
- TCOD::FOV_DIAMOND
- TCOD::FOV_SHADOW
- TCOD::FOV_PERMISSIVE_0
- TCOD::FOV_PERMISSIVE_1
- TCOD::FOV_PERMISSIVE_2
- TCOD::FOV_PERMISSIVE_3
- TCOD::FOV_PERMISSIVE_4
- TCOD::FOV_PERMISSIVE_5
- TCOD::FOV_PERMISSIVE_6
- TCOD::FOV_PERMISSIVE_7
- TCOD::FOV_PERMISSIVE_8
- TCOD::FOV_RESTRICTIVE
- TCOD::FOV_SYMMETRIC_SHADOWCAST
- TCOD::NB_FOV_ALGORITHMS
RandomAlgo
- TCOD::RNG_MT
- TCOD::RNG_CMWC
Distribution
These values are used by TCOD::Random to generate random numbers.
-
TCOD::DISTRIBUTION_LINEAR
This is the default distribution. It will return a number from a range min-max. The numbers will be evenly distributed, ie, each number from the range has the exact same chance of being selected.
-
TCOD::DISTRIBUTION_GAUSSIAN
This distribution does not have minimum and maximum values. Instead, a mean and a standard deviation are used. The mean is the central value. It will appear with the greatest frequency. The farther away from the mean, the less the probability of appearing the possible results have. Although extreme values are possible, 99.7% of the results will be within the radius of 3 standard deviations from the mean. So, if the mean is 0 and the standard deviation is 5, the numbers will mostly fall in the (-15,15) range.
-
TCOD::DISTRIBUTION_GAUSSIAN_RANGE
This one takes minimum and maximum values. Under the hood, it computes the mean (which falls right between the minimum and maximum) and the standard deviation and applies a standard Gaussian distribution to the values. The difference is that the result is always guaranteed to be in the min-max range.
-
TCOD::DISTRIBUTION_GAUSSIAN_INVERSE
Essentially, this is the same as
TCOD::DISTRIBUTION_GAUSSIAN. The difference is that the values near +3 and -3 standard deviations from the mean have the highest possibility of appearing, while the mean has the lowest. -
TCOD::DISTRIBUTION_GAUSSIAN_RANGE_INVERSE
Essentially, this is the same as
TCOD::DISTRIBUTION_GAUSSIAN_RANGE, but the min and max values have the greatest probability of appearing, while the values between them, the lowest.
NoiseType
- TCOD::NOISE_PERLIN
- TCOD::NOISE_SIMPLEX
- TCOD::NOISE_WAVELET
- TCOD::NOISE_DEFAULT
Event
- TCOD::EVENT_NONE
- TCOD::EVENT_KEY_PRESS
- TCOD::EVENT_KEY_RELEASE
- TCOD::EVENT_MOUSE_MOVE
- TCOD::EVENT_MOUSE_PRESS
- TCOD::EVENT_MOUSE_RELEASE
- TCOD::EVENT_KEY
- TCOD::EVENT_MOUSE
- TCOD::EVENT_ANY
SHARE DATA
This distribution bundles some data to make development simpler.
You can make use of this data with a distribution like File::Share, like in this example:
use File::Share 'dist_file';
my $path = dist_file TCOD => 'fonts/dejavu10x10_gs_tc.png';
The fonts directory contains antialiased fonts that can be used with
TCOD. The names of the font files are of the form:
<font_name><font_size>_<type>_<layout>.png
<type> : aa 32 bits png with alpha channel
gs 24 bits or greyscale PNG
<layout> : as standard ASCII layout
ro standard ASCII layout in row
tc TCOD layout
The terminal8x8 font is provided is every possible format as en example.
The structure of shared files is reproduced below.
share
└── fonts
├── dejavu10x10_gs_tc.png
├── dejavu12x12_gs_tc.png
├── dejavu16x16_gs_tc.png
├── dejavu8x8_gs_tc.png
├── dejavu_wide12x12_gs_tc.png
├── dejavu_wide16x16_gs_tc.png
├── terminal10x10_gs_tc.png
├── terminal10x16_gs_ro.png
├── terminal10x16_gs_tc.png
├── terminal10x18_gs_ro.png
├── terminal12x12_gs_ro.png
├── terminal16x16_gs_ro.png
├── terminal7x7_gs_tc.png
├── terminal8x12_gs_ro.png
├── terminal8x12_gs_tc.png
├── terminal8x14_gs_ro.png
├── terminal8x8_aa_ro.png
├── terminal8x8_aa_tc.png
├── terminal8x8_gs_ro.png
├── terminal8x8_gs_tc.png
└── ucs-fonts
└── 4x6.bdf
SEE ALSO
- TCOD::Color
- TCOD::ColorRGBA
- TCOD::Console
- TCOD::Context
- TCOD::Dijkstra
- TCOD::Event
- TCOD::Image
- TCOD::Key
- TCOD::Map
- TCOD::Mouse
- TCOD::Noise
- TCOD::Path
- TCOD::Random
- TCOD::Sys
- TCOD::Tileset
Also, these other external resources might be useful:
COPYRIGHT AND LICENSE
Copyright 2021 José Joaquín Atria
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.