1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
|
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
This project attempts to adhere to [Semantic Versioning](http://semver.org/) since `1.7.0`.
Versions since `1.7.0` only track ABI breaks and not API breaks.
## [Unreleased]
## [1.22.3] - 2022-09-09
### Added
- Libtcod can now be built without utf8proc by passing the `-LIBTCOD_UTF8PROC=disable` flag to CMake.
### Fixed
- Fixed double present bug in non-context flush functions.
This was affecting performance and also caused a screen flicker whenever the global fade color was active.
## [1.22.2] - 2022-08-26
### Fixed
- Libtcod was not linking `utf8proc` correctly in projects statically built with CMake.
## [1.22.1] - 2022-08-24
### Fixed
- Fix regression in TCODList when items are removed during iteration.
## [1.22.0] - 2022-08-24
### Added
- Libtcod can now be built without zlib by passing the `-DLIBTCOD_ZLIB=disable` flag to CMake or by setting `CMAKE_DISABLE_FIND_PACKAGE_ZLIB=1`.
- Libtcod can now be built without PNG support by passing the `-DLIBTCOD_LODEPNG=disable` flag to CMake.
- Added context screen capture functions to take screenshots into memory instead of a file.
### Changed
- The OpenGL2 renderer now defaults to the nearest filter unless `SDL_HINT_RENDER_SCALE_QUALITY` is set otherwise.
This makes the renderer consistent with the SDL2 renderer.
- Parser function parameters are more const correct.
### Fixed
- SDL2 console rendering is no longer likely to stack overflow.
- Fixed regression where new keywords would prevent older config files from loading.
- Exceptions were not correctly thrown on errors when reading colors from streams.
## [1.21.0] - 2022-07-15
### Added
- Added the `tcod::Context` class to better handle contexts in C++.
- Added a CMake toggle `LIBTCOD_THREADS` to remove deprecated threading functions.
`CMAKE_DISABLE_FIND_PACKAGE_Threads=1` can also be used.
- Libtcod can now be built without SDL by passing the `-DLIBTCOD_SDL2=disable` flag in CMake or by setting
`CMAKE_DISABLE_FIND_PACKAGE_SDL2=1`.
### Changed
- SDL-based accumulate functions can now handle a non-window render target.
- The SDL2 renderer has been rewritten to use `SDL_RenderGeometry` when compiled with SDL 2.0.18.
[#104](https://github.com/libtcod/libtcod/issues/104)
- C++ inline functions switched to use C++17 filesystem types.
- Error messages are no longer thread-local.
- C++ objects have been moved to their `.hpp` headers:
`tcod::ColorRGB`, `tcod::ColorRGBA`, `tcod::BresenhamLine`, REXPaint functions.
### Deprecated
- Older REXPaint functions using `TCOD_list_t` have been deprecated.
- C++ methods gotten through TCOD_Context have been moved to a specialized class.
Replace ``tcod.new_context(params)`` with ``tcod::Console(params)``.
### Fixed
- Fixed poor attribute handing causing compile errors in GCC 12.
[#116](https://github.com/libtcod/libtcod/issues/116)
- Context screenshots no longer crash when given NULL which the API implied was possible.
## [1.20.1] - 2022-01-07
### Fixed
- BDF files with blank lines no longer fail to load with an "Unknown keyword" error.
## [1.20.0] - 2021-12-24
### Added
- `TCOD_RENDERER_XTERM` was added.
[#100](https://github.com/libtcod/libtcod/pull/100)
### Fixed
- `const` was missing from `tcod::Tileset`'s `get_X` methods.
- Fixed segfault during cleanup when an OpenGL2 context fails to load.
### Removed
- Removed deprecated overrides that existed to help transition obsolete code.
This affects `Console::clear` and the C++ printing methods which take pointers to colors such as `tcod::print`.
## [1.19.0] - 2021-11-12
### Added
- Added `TCOD_context_convert_event_coordinates` and `TCOD_Context::convert_event_coordinates` as an easier way to convert mouse pixel coordinates to tile coordinates.
- Added `tcod::print`, `tcod::print_rect`, and `tcod::get_height_rect` to replace the older C++ functions.
- Added `tcod::Tileset`, `tcod::load_tilesheet`, and `tcod::load_bdf` for working with tilesets in C++ along with the character maps `tcod::CHARMAP_CP437` and `tcod::CHARMAP_TCOD`.
- `TCOD_Context`, `TCOD_ContextParams`, `TCOD_ViewportOptions`, and `tcod::new_context` are now public.
- Added vprintf-like console printing functions: `TCOD_console_vprintf` and `TCOD_console_vprintf_rect`.
- Added the `tcod::Timer` class. A way of handing frame limiting and delta time without depending on libtcod's internals.
- Added `TCOD_sys_get_internal_context`. An easy way to get a `TCOD_Context` from the old API.
- Added `TCOD_sys_get_internal_console`. This returns a pointer to the root console used by the old API.
- Added `tcod::ColorRGB` and `tcod::ColorRGBA` to help with color type conversions.
- Added libtcod logging functions, for debugging and internal use.
- Added `tcod::draw_quartergraphics` to replace older C++ blit2x functions.
- Added `tcod::blit` to replace older C++ blit functions.
- Added `tcod::stringf` to encapsulate printf formatted strings so that other C++ functions won't have to deal with them.
A library like [fmt](https://fmt.dev/latest/index.html) is safer and faster if you have access to it.
### Changed
- Initializing libtcod with the old API will now enable VSync by default.
You can set the environment variable `TCOD_VSYNC=0` to disable this or use the new API where VSync is a setting.
- `TCODConsole::get_data` now returns a non-NULL pointer to the root console.
- Fixes to Gaussian number generation will have changed the resulting numbers and any subsequent random numbers.
- `TCOD_Random` now points to a union type.
- Libtcod now uses the C++17 standard.
- The newer C++ printing functions now take `std::string_view` instead of `std::string`.
- `TCODConsole`, `TCODBsp`, `TCODPath`, `TCODDijkstra`, `TCODNoise`, `TCODImage`, and `TCODMap` can now handle move operations.
Their copy operators have been deleted. This makes them safe to use as a value instead of using `new`/`delete`.
### Deprecated
- Deprecate `TCOD_chars_t` enum values because they are non-Unicode.
- Deprecated C++ color constants because of class `static const` initialization issues.
- Deprecated libtcod's older timing functions.
- Deprecated older font loading functions.
- Deprecated `TCOD_random_t` type.
- Console defaults have been deprecated.
- Root console initiation has been deprecated.
### Fixed
- Gaussian number generation no longer affects the results of unrelated RNG's.
- Gaussian number generation is now reentrant and thread-safe.
### Removed
- Dropped support for C++14.
## [1.18.1] - 2021-05-21
### Fixed
- Fixed potential crash in PNG image loading.
## [1.18.0] - 2021-05-15
### Added
- Added REXPaint functions which don't use TCOD lists for multiple consoles.
### Fixed
- Resolved C++17 deprecation warnings with `tcod::BresenhamLine`.
## [1.17.1] - 2021-05-15
### Fixed
- Fixed regression with loading PNG images.
## [1.17.0] - 2021-05-13
### Added
- Added `tcod::BresenhamLine`, a C++ Bresenham line iterator.
[#91](https://github.com/libtcod/libtcod/pull/91)
[#92](https://github.com/libtcod/libtcod/issues/92)
[#93](https://github.com/libtcod/libtcod/pull/93)
- Added `TCODImage::get_data` to return its `TCOD_Image*` object.
### Changed
- CMake scripts now use `CMAKE_INSTALL_DATAROOTDIR` correctly.
### Deprecated
- Deprecated the `TCOD_List` and `TCODList` classes since they don't work for their intended purpose.
- Deprecated libtcod's event handling API, you should use SDL for events instead of libtcod.
### Fixed
- Fixed `TCOD_load_library`.
- Fixed `TCODList(TCOD_list_t)` constructor.
- Fixed a regression in `TCOD_console_printf_frame` where a `fmt` of NULL would prevent the frame from being drawn.
## [1.16.7] - 2021-03-31
### Changed
- CMake files now use lower-case `libtcod` to be consistent with the previous
usage of this name.
### Fixed
- Fixed PNG loading issues when using Vcpkg.
- Fixed crashes from loading tilesets with non-square tile sizes.
- Tilesets with a size of 0 should no longer crash when used.
- Prevent division by zero from recommended-console-size functions.
## [1.16.6] - 2021-03-02
### Fixed
- Fixed static linking.
## [1.16.5] - 2021-03-02
### Added
- CMake scripts now support fetching dependencies from Vcpkg.
## [1.16.4] - 2021-02-28
### Fixed
- Simplified libtcod's system calls which should fix support for Microsoft's
UWP.
## [1.16.3] - 2021-02-24
### Fixed
- Libtcod's CMake config file is now aware of its dependencies.
## [1.16.2] - 2021-02-22
### Fixed
- The `SDL_WINDOW_ALLOW_HIGHDPI` flag has been added to SDL windows created
with the non-context API. This fixes issues on some MacOS systems.
[#90](https://github.com/libtcod/libtcod/issues/90)
## [1.16.1] - 2021-02-17
### Fixed
- Fixed the case-sensitive file name `LibtcodConfig.cmake.in` which was causing
CMake to fail.
## [1.16.0] - 2021-02-11
### Added
- SCons builder now supports MacOS ARM64 and Universal 2 architectures.
### Changed
- `TCOD_sys_get_current_resolution` now returns error codes.
### Deprecated
- Deprecated `TCOD_sys_get_current_resolution`
### Fixed
- Code points from the Private Use Area will now print correctly.
- Fixed regression in `TCOD_sys_get_current_resolution` behavior. This
function now returns the monitor resolution as was previously expected.
- The OpenGL 2 renderer was ignoring `SDL_HINT_RENDER_SCALE_QUALITY=nearest`.
### Removed
- `TCOD_rng_splitmix64_next` has been marked as provisional.
## [1.16.0-alpha.15] - 2020-11-13
### Deprecated
- Deprecated the zip functions.
### Fixed
- Context functions won't crash when methods are missing.
## [1.16.0-alpha.14] - 2020-10-30
### Added
- Added new algorithm `FOV_SYMMETRIC_SHADOWCAST` based off of the code
provided [here](https://www.albertford.com/shadowcasting/).
### Changed
- `TCOD_map_compute_fov` and `TCOD_map_copy` now return error codes.
## [1.16.0-alpha.13] - 2020-10-23
### Added
- Tilesets can now be loaded from an in-memory PNG file or from raw data.
- The character mappings `TCOD_CHARMAP_CP437` and `TCOD_CHARMAP_TCOD` are now
public.
- Added `TCOD_rng_splitmix64_next`.
- Added the `TCOD_VERSIONNUM` and `TCOD_COMPILEDVERSION` macros.
- Added vectorized noise generator functions.
### Changed
- Video driver status info has been added to SDL video driver errors.
- Console blits now ignore alpha compositing which would result in division by
zero.
- Image loading now returns an error code.
- Added window `x, y` coordinates when creating contexts.
- Added `argc` and `argv` to contexts so that they can optionally support CLI
commands.
- A struct is used to pass parameters for creating contexts.
- The OpenGL 2 renderer can now use `SDL_HINT_RENDER_SCALE_QUALITY` to
determine the tileset upscaling filter.
- Improved performance of the FOV_BASIC algorithm.
[#77](https://github.com/libtcod/libtcod/issues/77)
### Deprecated
- Deprecated the following macros:
`TCOD_HEXVERSION`, `TCOD_TECHVERSION`, and `TCOD_STRVERSIONNAME`.
### Fixed
- `TCOD_console_is_key_pressed` should work even if libtcod events are ignored.
- Fixed images only saving as a red channel.
[#75](https://github.com/libtcod/libtcod/pull/75)
- The `TCOD_RENDERER` and `TCOD_VSYNC` environment variables should work now.
- `FOV_PERMISSIVE` algorithms are now reentrant.
## [1.16.0-alpha.12] - 2020-05-22
### Changed
- CMake can now create packages.
### Fixed
- `TCOD_console_init_root` and context initializing functions were not
returning error codes on failure.
## [1.16.0-alpha.11] - 2020-05-13
### Changed
- Print functions will no longer treat special glyphs as double wide.
- Library CMake files now support Vcpkg.
### Fixed
- Fixed divide by zero when handing mouse input without a global context.
## [1.16.0-alpha.10] - 2020-04-26
### Fixed
- Fixed characters being dropped when color codes were used.
## [1.16.0-alpha.9] - 2020-04-24
### Fixed
- `FOV_DIAMOND` and `FOV_RESTRICTIVE` algorithms are now reentrant.
[#48](https://github.com/libtcod/libtcod/pull/48)
- Heightmap functions will crash less often when given out-of-bounds parameters.
[#13](https://github.com/libtcod/libtcod/issues/13)
[#50](https://github.com/libtcod/libtcod/pull/50)
- The `TCOD_VSYNC` environment variable was being ignored.
- Malformed UTF-8 strings will no longer hang printing functions.
## [1.16.0-alpha.8] - 2020-04-03
### Fixed
- Changing the active tileset now redraws tiles correctly on the next frame.
## [1.16.0-alpha.7] - 2020-04-02
### Fixed
- Changing the active tileset will now properly show it on the next render.
## [1.16.0-alpha.6] - 2020-03-26
### Added
- Added `TCOD_load_bdf` and `TCOD_load_bdf_memory`.
## [1.16.0-alpha.5] - 2020-02-28
### Changed
- Mouse tile coordinates are now always zero before the first call to
TCOD_console_flush.
## [1.16.0-alpha.4] - 2020-02-22
### Fixed
- Mouse tile coordinates are now correct on any resized window.
## [1.16.0-alpha.3] - 2020-02-21
### Deprecated
- Mouse state and keyboard state functions are deprecated.
- Mouse functions with SDL alternatives are deprecated.
### Fixed
- The wavelet noise generator now excludes -1.0f and 1.0f as return values.
- Fixed console fading color.
- Fixed keyboard state and mouse state functions losing state when events were
flushed.
## [1.16.0-alpha.2] - 2020-02-14
### Fixed
- Fixed possible crash in `TCOD_mouse_move`.
## [1.16.0-alpha.1] - 2020-02-14
### Added
- Added the `TCOD_clear_error` and `TCOD_set_errorf` functions.
- Added an error code enum: `TCOD_Error`.
### Changed
- Console blit operations now perform per-cell alpha transparency.
- When a renderer fails to load it will now fallback to a different one.
The order is: OPENGL2 -> OPENGL -> SDL2.
### Deprecated
- The use of `libtcod.cfg` or `terminal.png` is deprecated.
### Fixed
- The following are no longer mislabeled as taking const images:
- `TCOD_image_get_mipmap_pixel`
- `TCOD_image_blit`
- `TCOD_image_blit_rect`
- `TCOD_sys_update_char` now works with the newer renderers.
- Fixed buffer overflow in name generator.
- `TCOD_image_from_console` now works with the newer renderers.
- New renderers now auto-load fonts from `libtcod.cfg` or `terminal.png`.
## [1.15.1] - 2019-11-22
### Changed
- Renamed build systems directory from `build/` to `buildsys/`.
### Fixed
- `OPENGL` and `GLSL` renderers were not properly clearing space characters.
## [1.15.0] - 2019-11-08
### Changed
- `TCOD_image_blit_2x` now renders using Unicode block elements instead of a
custom encoding.
### Fixed
- Libtcod will no longer segfault if it's statically linked to an executable.
## [1.14.0] - 2019-09-06
### Added
- `TCODConsole::get_data` method for getting the C struct pointer from C++.
### Fixed
- `TCOD_map_compute_fov` will now silently ignore out-of-bounds coordinates
instead of crashing.
- Changing the tiles of an active tileset will now work correctly.
## [1.13.0] - 2019-07-05
### Added
- You can now set the `TCOD_RENDERER` and `TCOD_VSYNC` environment variables to
force specific options to be used.
Example: ``TCOD_RENDERER=sdl2 TCOD_VSYNC=1``
### Changed
- `TCOD_sys_set_renderer` now returns an error status.
- `TCODSystem::setRenderer` will now throw instead of terminating on an error.
- `TCOD_console_init_root` and `TCOD_sys_set_renderer` are now no-discard.
### Fixed
- `TCOD_console_map_ascii_code_to_font` functions will now work when called
before `TCOD_console_init_root`.
## [1.12.3] - 2019-06-02
### Fixed
- Fixed regressions in text alignment for non-rectangle-bound text on UTF-8
print functions.
## [1.12.2] - 2019-05-24
### Fixed
- Fixed crashes and bad output when using printf-style functions.
## [1.12.1] - 2019-05-17
### Fixed
- Fixed shader compilation issues in the OPENGL2 renderer.
- Fallback fonts should fail less on Linux.
## [1.12.0] - 2019-05-17
### Added
- Added the `TCOD_get_error` and `TCOD_set_error` functions.
### Changed
- `TCOD_console_init_root` and `TCOD_console_set_custom_font` will now return
an error code instead of terminating on a known error.
## [1.11.5] - 2019-05-10
### Added
- Several functions in the `tcod::console` namespace are now accessible.
These functions are provisional, so the API may change at anytime.
### Fixed
- Corrected bounding box issues with the stateless UTF-8 print functions.
## [1.11.4] - 2019-04-26
### Fixed
- Fixed a name conflict with endianness macros on FreeBSD.
## [1.11.3] - 2019-04-19
### Changed
- New consoles are initialized as if clear was called.
- The SDL callback type now uses a typed argument instead of void pointer.
### Fixed
- Fixed horizontal alignment for TrueType fonts.
- Fixed screenshots with the older SDL renderer.
### Deprecated
- The SDL callback feature has been deprecated.
## [1.11.2] - 2019-03-29
### Fixed
- Console printing was ignoring color codes at the beginning of a string.
- Releases no longer display debug messages.
## [1.11.1] - 2019-03-15
### Fixed
- Fixed header declaration for `TCOD_sys_accumulate_console`.
## [1.11.0] - 2019-03-15
### Added
- Added new functions which convert from SDL events to libtcod events:
- `TCOD_sys_process_key_event`
- `TCOD_sys_process_mouse_event`
- `tcod::sdl2::process_event`
- Added a way to access libtcod's SDL variables.
- `TCOD_sys_get_sdl_window`
- `TCOD_sys_get_sdl_renderer`
- Added `TCOD_sys_accumulate_console` which renders a console to the display
without automatically presenting it.
- The new renderers can potentially use a fall-back font when none is provided.
### Fixed
- `TCOD_console_has_mouse_focus` and `TCOD_console_is_active` are now more
reliable with the newer renderers.
## [1.10.8] - 2019-03-01
### Deprecated
- Updated libtcodpy deprecation warning with instructions on how to update to
python-tcod.
## [1.10.7] - 2019-03-01
### Changed
- GCC releases now include debug symbols.
### Fixed
- `SDL2` and `OPENGL2` now support screenshots.
- `TCOD_sys_get_char_size` fixed on the newer renderers.
## [1.10.6] - 2019-02-15
### Changed
- Printing generates more compact layouts.
### Fixed
- Fixed segmentation faults in the newer print functions caused by bad color
codes.
- The `OPENGL` and `GLSL` renders work again in static builds.
- The `SDL2` and `OPENGL2` renders can now large numbers of tiles.
## [1.10.5] - 2019-02-06
### Changed
- The SDL2/OPENGL2 renderers will now auto-detect a custom fonts key-color.
### Fixed
- `TCOD_console_printf_frame` was clearing tiles outside if it's bounds.
- The `TCOD_FONT_LAYOUT_CP437` layout was incorrect.
## [1.10.4] - 2019-02-01
### Fixed
- Fixed regression where mouse wheel events unset mouse coordinates.
## [1.10.3] - 2019-01-19
### Fixed
- Use correct math for tile-based delta in mouse events.
- New renderers now support tile-based mouse coordinates.
- SDL2 renderer will now properly refresh after the window is resized.
- MinGW samples now bundle their own runtimes.
## [1.10.2] - 2018-11-23
### Fixed
- Version numbers were not updated.
## [1.10.1] - 2018-11-23
### Changed
- `RENDERER_OPENGL2` now only needs OpenGL 2.0 to load.
### Fixed
- `FONT_LAYOUT_CP437` constant was missing from libtcodpy.
- Function stubs for `TCOD_console_set_keyboard_repeat` and
`TCOD_console_disable_keyboard_repeat` have been added to the ABI, this
should fix older programs which depended on them existing.
## [1.10.0] - 2018-11-17
### Added
- Added pkg-config for 'libtcod' on AutoTools builds.
- Added `TCOD_FONT_LAYOUT_CP437`.
### Fixed
- `RENDERER_OPENGL2` constant was missing from libtcodpy.
- Fixed crash when assigning to larger code-points.
- Fixed center alignment on printf functions.
- Fixed missing border tiles on printf frame function.
## [1.9.0] - 2018-10-24
### Added
- New renderer: `TCOD_RENDERER_OPENGL2`
- `TCOD_RENDERER_SDL2` and `TCOD_RENDERER_OPENGL2` now have reliable fullscreen
support.
- SCons MSVC releases now include libtcod's `.pdb` file.
## Changed
- `src/vendor` must be included when building libtcod.
- `glad.c` added to vendor directory.
- In GCC builds: non-public symbols are no longer visible by default.
## [1.8.2] - 2018-10-13
### Fixed
- Fixed potential crash when splitting lines in UTF-8 print functions.
- Fixed possible hang in `TCOD_lex_parse_until_token_value`.
## [1.8.1] - 2018-10-11
### Changed
- Updated the compiler used to deploy Windows MinGW builds.
## [1.8.0] - 2018-10-07
### Added
- New `TCOD_MAJOR_VERSION`, `TCOD_MINOR_VERSION`, and `TCOD_PATCHLEVEL`
constants.
- Added UTF-8 print functions for C and C++:
- `TCOD_console_printf`, `TCOD_console_printf_ex`,
`TCOD_console_printf_rect`, and `TCOD_console_printf_rect_ex`.
- `TCOD_console_printf_frame`
- `TCOD_console_get_height_rect_fmt`
- New overrides for `TCODConsole::print` which can take `std::string`.
- `TCODConsole::printf`.
- Added `TCOD_quit` function, this function must be called on exit.
- New renderer: `TCOD_RENDERER_SDL2`
### Changed
- AutoTools now adds version numbers to the libraries it builds.
- lodepng and zlib sources moved into `src/vendor/` folder.
- Bundled zlib library updated from `1.2.8` to `1.2.11`.
- LodePNG updated from `20160501` to `20180611`.
- libtcod C type declarations are stricter.
- libtcod now uses the C99 and C++14 standards.
- In the repository `include/` headers have been moved into `src/`.
- Most headers except for `libtcod.h` and `libtcod.h` have been moved into a
`libtcod/` sub-folder.
- SCons default architecture is now automatic instead of just 32-bit.
- libtcod gui headers now use LIBTCOD_EXPORTS instead of LIBTCOD_GUI_EXPORTS to
determine dllexport/dllimport.
### Deprecated
- All functions replaced by the new UTF-8 functions are deprecated.
- The ctypes implementation of libtcodpy will no longer be maintained, use
python-tcod as a drop-in replacement.
- Deprecated file-system, threading, clipboard, and dynamic library functions.
### Fixed
- `libtcodpy.map_clear`: `transparent` and `walkable` parameters were reversed.
- Resolved build issues on PowerPC platforms.
- Mouse state is now tracked even when mouse events are not asked for.
- libtcod sys event functions no longer crash if the given key pointer is NULL.
- SCons no longer crashes downloading SDL2 for Windows.
### Removed
- Autotools no longer creates `libtcodxx` or `libtcodgui` libraries, C++
programs should link to `libtcod` instead.
## [1.7.0] - 2018-06-12
### Changed
- `TCOD_console_is_active()` now returns keyboard focus, its previous return
value was undefined.
- Load font debug information is now suppressed when NDEBUG is defined.
- Error messages when failing to create an SDL window should be a less vague.
- You no longer need to initialize libtcod before you can print to an
off-screen console.
### Fixed
- Fixed a missing space between a literal and identifier that causes problems
with some C++ compilers.
- Fixed implicit definitions that could potentially crash formatted console
printing functions and image saving functions.
- Fixed including libtcod gui headers. (Fabian Wolff)
- Fixed memory leaks when lexer creation fails. (Fabian Wolff)
- Avoid crashes if the root console has a character code higher than expected.
- Fixed `AttributeError: module 'urllib' has no attribute 'urlretrieve'` when
running SCons builder with Python 3.
- Fixed `UnicodeEncodeError: ordinal not in range(128)` in places where
libtcodpy says it wants an ASCII string.
- libtcodpy now escapes the `%` character on print functions.
- Fixed libtcodpy print functions not supporting Unicode for Python 3.
- Fixed libtcodpy missing definition `TCOD_console_print_utf`.
## [1.6.7] - 2018-05-17
### Changed
- Renamed `libtcod-CHANGELOG.txt` to `CHANGELOG.md`
- SCons builder now outputs `libtcodgui` instead of `libtcod-gui` to match
Autotools behavior.
### Fixed
- REXPaint operations now save/load as little-endian on any platform.
https://bitbucket.org/libtcod/libtcod/issues/91/fix-the-libtcod-types-endian-support
- `TCOD_console_map_ascii_code_to_font` and related functions can now assign
character codes that were not automatically assigned during initialization.
Previously you could only assign codes up to the total number of tiles in the
font.
- Fixed including libtcod from Autotools installs, the `console_rexpaint.h`
header was missing. (James Byrnes)
## [1.6.6] - 2018-04-06
### Added
- Added `libtcod_c.c` and `libtcod.cpp` source files to assist with static
linking.
### Changed
- REXPaint functions now have their own header file: `console_rexpaint.h`
- `TCOD_color_set_HSV` now normalizes bad hue/saturation/value parameters.
### Deprecated
- Non-reentrant line functions `TCOD_line_init` and `TCOD_line_step` are now
deprecated.
- `TCOD_line_mt` is deprecated. `TCOD_line` is the same function with an
unnecessary parameter, and should be preferred.
### Fixed
- `TCOD_line` is now reentrant.
- `FOV_BASIC` (`fov_circular_raycasting`) implementation is now reentrant.
- Fixed `external/pstdint.h` header not being installed correctly by Autotools.
https://bitbucket.org/libtcod/libtcod/issues/121/include-of-external-pstdinth-fails
- Autotools libtools are no longer bundled, these are automatically installed
via `autoreconf -i`
## [1.6.5] - 2018-02-20
### Fixed
- Resolved header issues that were leaving some types and functions undefined. (Kyle Benesch)
- key.c is no longer set when key.vk == TCODK_TEXT, this fixes a regression
which was causing events to be heard twice in the libtcod/Python tutorial. (Kyle Benesch)
- OpenGL renderer alpha blending is now consistent with all other render modes. (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/issues/99/opengl-renderer-looks-poorly-compared-to
## [1.6.4] - 2017-11-27
### Added
- Added support for loading/saving REXPaint files. (Kyle Benesch)
- Added documentation to guide people in upgrading from 1.5.x to 1.6.x (rmtew)
https://bitbucket.org/libtcod/libtcod/issues/88
### Changed
- Upgraded to `stdint.h` source code typing via `pstdint.h` (rmtew)
https://bitbucket.org/libtcod/libtcod/issues/91
- All libtcod headers are now self-contained. (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/issues/93/header-organization
- bool type is now based off of stdbool.h (Kyle Benesch)
- SCons builder defaults to debug builds, now builds with OpenGL, and uses link
time optimization on release builds. (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/issues/92/tcod_renderer_glsl-not-working
- SDL is no longer initialized at module load time. (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/issues/107/sdl_init-on-library-load-libtcod
### Fixed
- Text input events now include correct modifier key values. (Kyle Benesch)
- Fixed touch support compilation, although it is still an experimental option that may change (rmtew)
- Console objects should be safe to create and use before libtcod is fully initialized. (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/issues/17/offline-libtcod
- Fixed TCOD_list_reverse. (Kyle Benesch)
- Fixed simplex noise artifacts when using negative coordinates. (Kyle Benesch)
- Fixed the GLSL and OPENGL renderers on all platforms. (rmtew) (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/issues/92/tcod_renderer_glsl-not-working
- TCOD_image_blit_2x no longer alters a consoles default colors. (Kyle Benesch)
- SDL renderer is only created when using SDL rendering (wump@bitbucket)
https://bitbucket.org/libtcod/libtcod/pull-requests/74/dont-create-sdl-renderer-when-using-opengl
## [1.6.3] - 2017-02-26
### Added
- Added SCons build support (HexDecimal@bitbucket).
https://bitbucket.org/libtcod/libtcod/commits/92c5a1b530049f15d1ed36375b12781554272f17
- Exposed clipboard API to Python (rmtew@bitbucket).
- Added TravisCI integration tests (Kyle Benesch) https://bitbucket.org/libtcod/libtcod/pull-requests/61
- Added .gitattributes and .gitignore files (Kyle Benesch) https://bitbucket.org/libtcod/libtcod/pull-requests/61
### Changed
- Updated restrictive FOV code to match MRPAS v1.2 (mingos@bitbucket)
https://bitbucket.org/libtcod/libtcod/commits/28a19912ac7fef6e68164fb8970230517888c9ff
- Per-platform clipboard get/set code has been removed, and the SDL2 API is used instead (rmtew@bitbucket).
The clipboard encoding is now UTF-8 on all platforms.
https://bitbucket.org/libtcod/libtcod/issues/81/
- Documented and undeprecated TCOD_mouse_get_status() as the state is awkwardly exposed via check/wait event calls anyway (rmtew@bitbucket).
- Switched Python tests to use pytest instead of unittest. (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/pull-requests/61
### Fixed
- TCOD_path_walk now considers negative values to be blocking the path (HexDecimal@bitbucket)
https://bitbucket.org/libtcod/libtcod/commits/fc8c88ec9b5d7b113ba3a7906f526daba81b543c
- Fix key handling in name generator in C sample (reported by Chris Hamons@bitbucket)
https://bitbucket.org/libtcod/libtcod/issues/83/
- Fix for broken SDL callback (reported by grimstain@bitbucket)
https://bitbucket.org/libtcod/libtcod/issues/78/sdl-callback-null-pixels
- Fix for memory leak introduced with the foreground/background image change (Aaron Wise).
https://bitbucket.org/libtcod/libtcod/commits/275e8bd97000599e9d87bfa138fa72c066b1cae7
- Fix for bug in Slider::setFormat() which left a dangling pointer (reported by Kai Kratz@bitbucket)
https://bitbucket.org/libtcod/libtcod/commits/07c1214077d121107c5ad8ee38c589ad677f5e76
- Fix potential wavelet related memory leak in TCOD_noise_delete() (HexDecimal@bitbucket)
https://bitbucket.org/libtcod/libtcod/commits/a03a79814fd734e05e5d72801376b2af6b315373
- Fix libtcodpy return type for TCOD_console_put_char_ex and TCOD_console_put_char (HexDecimal@bitbucket)
https://bitbucket.org/libtcod/libtcod/commits/a03a79814fd734e05e5d72801376b2af6b315373
- Fix libtcodpy arguments for TCOD_heightmap_add_fbm and TCOD_heightmap_scale_fbm (HexDecimal@bitbucket)
https://bitbucket.org/libtcod/libtcod/commits/6f34ffa3d17af39cc274c048ff633be8609998f8
- Fixed creating a libtcodpy pathfinder with a callback would crash on 64-bit Unix systems (Kyle Benesch)
https://bitbucket.org/libtcod/libtcod/pull-requests/61
## [1.6.2] - 2016-12-28
### Added
- doctcod command added to VS2015 solution.
- Python (PTVS) project for samples_py added to VS2015 solution.
- Console foreground and background colors are images.
https://bitbucket.org/libtcod/libtcod/issues/51/console-image-unification
- Python unit tests added (Kyle Benesch).
https://bitbucket.org/libtcod/libtcod/commits/7a66ad5d66832686c0071e3938b85ebad8e7cebb
- Added TCOD_console_get_background_color_image and TCOD_console_get_foreground_color_image API for C++/C/Python.
### Changed
- crash bugs fixed in documentation generation.
- libtcodpy when loading a DLL now explicitly compares the architecture of the Python version uses, to the architecture of the DLL and exits outputting any difference.
- libtcodpy now uses more wrapper functions on Windows to cover ctypes limitations in passing and returning struct values.
- libtcodpy now inlines more ctypes argtypes and restype definitions in order to work better on x64.
- libtcodpy partially rewritten to support Python 3 as best possible and resolve outstanding 64 bit problems.
- samples_py partially rewritten to run under both Python 3 and Python 2.
- Adopted strict prototypes / void in C parameterless functions (Kyle Benesch).
https://bitbucket.org/libtcod/libtcod/commits/5353098a70254b59b740865a875cccf1d6d84c27
- SDL2 supported revision updated to release-2.0.5 AKA changeset 007dfe83abf8.
### Fixed
- C++ TCODParser memory leak fixed.
https://bitbucket.org/libtcod/libtcod/issues/27/tcodparser-memory-leaks
- Frost sample fixed for a non-initialized data structure crash.
### Removed
- Removed SDL1 support.
- Removed C/C++/Python API functions `TCOD_console_set_keyboard_repeat` and
`TCOD_console_disable_keyboard_repeat`. This was SDL1 functionality, and not supported in SDL2.
## [1.6.1] - 2016-09-23
### Changed
- Python libtcodpy is now better at finding DLLs on Windows
https://bitbucket.org/libtcod/libtcod/commits/eda0075
## [1.6.0] - 2016-09-16
### Added
- added support for autotools builds
https://bitbucket.org/libtcod/libtcod/commits/41e1c24
- added support for Visual Studio builds
- added Visual Studio build script that can fetch and build dependencies, the project, and package up the result
- hooked up Visual Studio build script to continuous integration service to run on each commit
- libtcod is now reentrant which allows the window to be resized among other things
https://bitbucket.org/libtcod/libtcod/commits/14bad22
- added new TCODK_TEXT event to cover the SDL2 SDL_TEXTINPUT event.
https://bitbucket.org/libtcod/libtcod/commits/7a8b072
- lmeta and rmeta modifiers have been added to TCOD_key_t
https://bitbucket.org/libtcod/libtcod/commits/e386362
### Changed
- upgraded to SDL2
- upgraded zlib to version 1.2.8
- upgraded lodepng to the 20160501 release
https://bitbucket.org/libtcod/libtcod/commits/60c127e
### Fixed
- fixed compilation warnings in pathing code
https://bitbucket.org/libtcod/libtcod/commits/4045633
- fixed memory leaks in pathing (Paral Zsolt)
https://bitbucket.org/libtcod/libtcod/commits/4c4af80
- map numlock key for SDL2
https://bitbucket.org/libtcod/libtcod/commits/83d481c
- reset the cursor in text field when the text field is reset (cottog)
https://bitbucket.org/libtcod/libtcod/commits/6673e6c
- remove superfluous calls to SDL_PumpEvents
https://bitbucket.org/libtcod/libtcod/commits/1edf96d
- alt-tabbing back to the libtcod window would leave the window blank
https://bitbucket.org/libtcod/libtcod/commits/73fdf51
### Removed
- removed support for mingw builds because no-one could get it to work
## [1.5.2] - 2012-09-07
### Added
- added mid point displacement algorithm to the heightmap toolkit
- added TCODConsole::hasMouseFocus() and TCODConsole::isActive()
- added TCODParser::hasProperty to check if a property is defined when
using the default parser
- added `TCODText::setPos(int x, int y)`
### Fixed
- fixed TCODConsole::waitForKeypress returning for both press and release events (returns only on press)
- fixed dynamic font switching not working
- fixed TCOD_image_blit_rect not working with odd width/height
- fixed TCODK_RWIN/TCODK_LWIN not detected
- fixed TCOD_sys_wait_event not returning on mouse events
- fixed mouse dcx/dcy fields always 0 when the cursor moves slowly
- fixed crash in Python console_map_ascii_codes_to_font
## [1.5.1] - 2012-08-29
### Added
- added support for python3k. The samples run with Python 3.2.3
- added support for colored tiles. Standard font characters MUST only use greyscale colors.
- added native support for .ASC and .APF file (Ascii Paint format)
* TCODConsole::TCODConsole(const char *filename)
* bool TCODConsole::loadAsc(const char *filename)
* bool TCODConsole::saveAsc(const char *filename) const
* bool TCODConsole::loadApf(const char *filename)
* bool TCODConsole::saveApf(const char *filename) const
- added mouse wheel support in TCOD_mouse_t.wheel_up/wheel_down
- added TCODSystem::fileExists function for checking whether a given file exists
- added dice to the TCODRandom toolkit
- added support for dynamic property declaration in the parser
- added TCODList::reverse(), TCODPath::reverse(), TCODDijkstra::reverse()
- added weighted Gaussian distribution RNG
- added Gaussian distribution RNG with no minimum/maximum bounds (using only mean and standard deviance)
- added clipboard support in TCODSystem (on Linux, only X clipboard supported)
- added GLSL and OpenGL(fixed pipeline) renderer (FPS increased 880% on true color sample !!!)
- added libtcod.cfg (allows the player to tweaks libtcod overriding the game presets)
- added more TCOD_CHAR_* constants
- added TCODColor::scaleHSV (saturation and value scaling)
- added TCODColor::shiftHue (hue shifting up and down)
- added a TCODColor constructor for HSV values
- added TCODColor H, S and V separate getters and setters
- added TCODColor::rotate90
- added native Mac OSX support
- added support for quote-less HTML color values in the parser (col=#FFFFFF instead of col="#FFFFFF")
- added color control helpers for C# (TCODConsole.getColorControlString/getRGBColorControlString)
### Changed
- TCOD_console_wait_for_keypress, TCOD_console_check_for_keypress, TCOD_mouse_get_status
replaced with TCOD_sys_check_for_event and TCOD_sys_wait_for_event
- source width and height can be 0 in TCODConsole::blit to blit the whole console
- Some of the parser-related functions now can be chained.
- The RNG API now has less functions that choose the distribution based on the set flags.
- The noise API now has less functions that choose the noise type based on the set flags.
- Console default and cell foreground and background color getters and setters renamed to more intuitive names:
* `TCOD_console_set_background_color` => `TCOD_console_set_default_background`
* `TCOD_console_set_foreground_color` => `TCOD_console_set_default_foreground`
* `TCOD_console_get_background_color` => `TCOD_console_get_default_background`
* `TCOD_console_get_foreground_color` => `TCOD_console_get_default_foreground`
* `TCOD_console_set_back` => `TCOD_console_set_char_background`
* `TCOD_console_set_fore` => `TCOD_console_set_char_foreground`
* `TCOD_console_get_back` => `TCOD_console_get_char_background`
* `TCOD_console_get_fore` => `TCOD_console_get_char_foreground`
* `setBackgroundColor` => `setDefaultBackground`
* `setForegroundColor` => `setDefaultForeground`
* `getBackgroundColor` => `getDefaultBackground`
* `getForegroundColor` => `getDefaultForeground`
* `setBack` => `setCharBackground`
* `setFore` => `setCharForeground`
* `getBack` => `getCharBackground`
* `getFore` => `getCharForeground`
- `TCODConsole::printLeft/Right/Center` replaced by
`TCODConsole::setBackgroundFlag(TCOD_bkgnd_flag_t)`
`TCODConsole::setAlignment(TCOD_alignment_t)`
`TCODConsole::print(int x, int y, const char *fmt, ...)`
`TCODConsole::printEx(int x, int y, TCOD_bkgnd_flag_t bkgnd, TCOD_alignment_t alignment, const char *fmt, ...)`
- added `TCOD_BKGND_DEFAULT` as default value in rect / putChar / hline / vline / setBack
the default background flag for a console is BKGND_NONE
Warning ! That mean the rect/putChar/... functions now default to BKGND_NONE
instead of BKGND_SET, except if you call setBackgroundFlag before using them.
- `TCODConsole::getHeight[Left/Right/Center]Rect` replaced by
`TCODConsole::getHeightRect(int x, int y, int w, int h, const char *fmt, ...);`
(the 3 functions were useless, the height does not depend on the alignment... X( )
- `TCODConsole::initRoot` has an additional renderer parameter:
`static void TCODConsole::initRoot(int w, int h, const char * title, bool fullscreen = false, TCOD_renderer_t renderer=TCOD_RENDERER_SDL);`
Possible values:
- TCOD_RENDERER_GLSL
- TCOD_RENDERER_OPENGL
- TCOD_RENDERER_SDL
- `TCODMap::clear` now sets walkable and transparent status of all cells:
`void TCODMap::clear` (bool transparent = false, bool walkable = false)
`void TCOD_map_clear` (TCOD_map_t map, bool transparent, bool walkable)
map_clear (map, transparent, walkable)
- cmake compilation works on FreeBSD thanks to namor_
- Restrictive FOV algorithm updated to MRPAS v1.1 (faster, better-looking, improved symmetry)
- Gaussian distribution in `TCODRandom` now uses a more precise Box-Muller transform algorithm
- More default values for `printFrame`:
`void printFrame(int x,int y,int w,int h, bool clear=true, TCOD_bkgnd_flag_t flag = TCOD_BKGND_DEFAULT, const char *fmt=NULL, ...)`
- hardened fov module
- extended list of color constants (the old names can produce slightly different colors)
- `TCODMap` memory consumption divided by 4
- now mouse wheel events are properly detected
### Fixed
- fixed namegen crash if generator list is empty
- fixed permissive fov when light_walls is false
- fixed possible crash when clearing an offscreen console before calling initRoot
- fix possible crash when printing a string containing ascii codes > 127
- fixed TCODNamegen returning integers in the Python version
- fixed TCODDijkstra segfault when diagonal movement cost was zero
- fixed setDirty() not working for the last row or column of the console
- fixed Python samples not compiling if numpy installed
- fixed Python TCOD_parser_get_list_property
- fixed TCODDijkstra destructor crash bug
- fixed TCODColor::setHSV bug when using hues below 0 or above 359 grades
- fixed some rare issues in A* pathfinding
- fixed issue in TCODImage::blit2x when blitting only a subregion of the image
- fixed memory leak in TCODImage::save
## [1.5.0] - 2010-02-15
### Added
- added text field toolkit (undocumented)
- added functions for fast Python full console coloring:
- console_fill_foreground(con,r,g,b)
- console_fill_background(con,r,g,b)
r,g,b are 1D arrays of console_width * console_height
- added fast Python rendering sample (Jotaf)
- added TCODConsole::resetCredits() to restart credits animation before it's finished
- added TCODConsole::setDirty(int x, int y, int w,int h) to force libtcod to redraw a part of the console
This might by needed when using the SDL renderer
- added TCODSystem::getCharSize(int *w, int *h) to get the current font's character size
- added name generation module (Mingos)
- added Dijkstra pathfinding (Mingos)
- added approximated gaussian distribution functions in the RNG module
`float TCODRandom::getGaussian(float min, float max)`
- added subcell resolution blitting function TCODImage::blit2x
- added more portable filesystem utilities:
- `static bool TCODSystem::isDirectory(const char *path)`
- `static TCODList<const char *> TCODSystem::getDirectoryContent(const char *path, const char *pattern)`
- added TCODConsole::putCharEx(int x, int y, int c, TCODColor &fore, TCODColor &back) (at last!)
- added waitThread and thread conditions support in (undocumented) threading API
- added unicode support and 4 unicode fonts courtesy of Mingos. Functions with unicode support are :
- static void TCODConsole::mapStringToFont(const wchar_t *s, int fontCharX, int fontCharY);
- void TCODConsole::printLeft(int x, int y, TCOD_bkgnd_flag_t flag, const wchar_t *fmt, ...);
- void TCODConsole::printRight(int x, int y, TCOD_bkgnd_flag_t flag, const wchar_t *fmt, ...);
- void TCODConsole::printCenter(int x, int y, TCOD_bkgnd_flag_t flag, const wchar_t *fmt, ...);
- int TCODConsole::printLeftRect(int x, int y, int w, int h, TCOD_bkgnd_flag_t flag, const wchar_t *fmt, ...);
- int TCODConsole::printRightRect(int x, int y, int w, int h, TCOD_bkgnd_flag_t flag, const wchar_t *fmt, ...);
- int TCODConsole::printCenterRect(int x, int y, int w, int h, TCOD_bkgnd_flag_t flag, const wchar_t *fmt, ...);
- int TCODConsole::getHeightLeftRect(int x, int y, int w, int h, const wchar_t *fmt, ...);
- int TCODConsole::getHeightRightRect(int x, int y, int w, int h, const wchar_t *fmt, ...);
- int TCODConsole::getHeightCenterRect(int x, int y, int w, int h,const wchar_t *fmt, ...);
C versions of the functions have _utf suffixes. Unicode fonts are :
- fonts/consolas_unicode_10x10.png
- fonts/consolas_unicode_12x12.png
- fonts/consolas_unicode_16x16.png
- fonts/consolas_unicode_8x8.png
### Changed
- the random number generator module now support two algorithms (Mingos)
Mersenne twister, used in previous versions of libtcod
Complementary Multiply With Carry, 2 to 3 times faster and has a much better
period. This is the default algorithm.
You can choose the algorithm in the constructor:
```c
typedef enum {
TCOD_RNG_MT,
TCOD_RNG_CMWC
} TCOD_random_algo_t;
```
- TCODRandom() => CMWC, default seed
- TCODRandom(uint32 seed) => CMWC, custom seed
- TCODRandom(TCOD_random_algo_t algo) => default seed, custom algo
- TCODRandom(uint32 seed, TCOD_random_algo_t aldo) => custom algo and seed
- TCODConsole::printFrame now takes an extra argument: TCOD_bkgnd_flag_t
- renamed libraries on Linux to improve portability :
- libtcod++.so => libtcodxx.so
- libtcod-gui.so => libtcodgui.so
- new compilation system with a debug and release version of the library
- makefiles have been moved to a makefiles subdirectory
- libtcod credits now use subcell resolution
### Fixed
- fixed wrong ascii code returned by check/waitForKeypress with AltGr+0-9 combination
- fixed RNG going mad if you delete the default RNG
- fixed wait_for_keypress not working in Python
- now the parser can handle strings/identifiers with unlimited size (previously limited to 256 chars)
- fixed TCODZip module missing from MSVC release
- fixed issue with TCOD_COLCTRL_FORE_RGB and TCOD_COLCTRL_BACK_RGB when using 10 or 37 in rgb values
- fixed issue in color_set_hsv Python wrapper
- fixed bug in console blitting when destination coordinates are outside the destination console
### Removed
- TCODRandom::getIntFromByteArray has been deleted
- removed bitfield from TCOD_key_t and TCOD_mouse_t to ease wrappers writing.
existing working wrappers might be broken, though.
## [1.4.2] - 2009-10-06
### Added
- added possibility to use SDL drawing functions on top of the root console with TCODSystem::registerSDLRenderer
- added Mingos' restrictive precise angle shadow casting fov algorithm as FOV_RESTRICTIVE
- heightmap: added missing `TCOD_heightmap_set_value` function
- new consolas, dejavu, lucida and prestige fonts from Mingos
### Changed
- `TCODConsole::blit` now takes 2 float parameters:
`static void blit(const TCODConsole *src,int xSrc, int ySrc, int wSrc, int hSrc, TCODConsole *dst, int xDst, int yDst, float foreground_alpha=1.0f, float background_alpha=1.0f)`
### Fixed
- fixed R/B inversion in color operations in Python
- fixed a crash when saving a TCODImage before initializing the root console
- fixed a crash when destroying an empty TCODZip (file not found)
- fixed torch effect in C++ sample
- fixed ASCII_IN_ROW flag not working
- fixed path_new_using_function not working in Python wrapper
- fixed alignment issues in `TCOD_console_print_*` with strings containing
ascii codes > 127
- fixed color controls not working with autowrap
- fixed fov post-processing step to handle opaque walkable cells (for example bush)
## [1.4.1] - 2009-03-22
### Added
- added Python wrapper
- added arial, courier fonts courtesy of Mingos
- added some non portable filesystem utilities in TCODSystem :
- bool TCODSystem::createDirectory(const char *path);
- bool TCODSystem::deleteDirectory(const char *path);
- bool TCODSystem::deleteFile(const char *path);
- added multithread utilities in TCODSystem :
- static TCOD_thread_t TCODSystem::newThread(int (*func)(void *), void *data);
- static void TCODSystem::deleteThread(TCOD_thread_t th);
- static TCOD_mutex_t TCODSystem::newMutex();
- static void TCODSystem::mutexIn(TCOD_mutex_t mut);
- static void TCODSystem::mutexOut(TCOD_mutex_t mut);
- static void TCODSystem::deleteMutex(TCOD_mutex_t mut);
- static TCOD_semaphore_t TCODSystem::newSemaphore(int initVal);
- static void TCODSystem::lockSemaphore(TCOD_semaphore_t sem);
- static void TCODSystem::unlockSemaphore(TCOD_semaphore_t sem);
- static void TCODSystem::deleteSemaphore( TCOD_semaphore_t sem);
- added some image utilities :
- void TCODImage::clear(const TCODColor col)
- void TCODImage::invert()
- void TCODImage::hflip()
- void TCODImage::vflip()
- void TCODImage::scale(int neww, int newh)
- void TCODImage::setKeyColor(const TCODColor keyColor)
- int TCODImage::getAlpha(int x,int y) const
- bool TCODImage::isPixelTransparent(int x, int y) const
- can now dynamically modify the content of the font bitmap:
`static void TCODSystem::updateChar(int asciiCode, int fontx, int fonty,const TCODImage *img,int x,int y)`
- added C and Python code generation in the heightmap tool
- added function to calculate the height of a printed string
(with autowrapping) without actually printing it:
- `int TCODConsole::getHeightLeftRect(int x, int y, int w, int h, const char *fmt, ...)`
- `int TCODConsole::getHeightRightRect(int x, int y, int w, int h, const char *fmt, ...)`
- `int TCODConsole::getHeightCenterRect(int x, int y, int w, int h, const char *fmt, ...)`
- parser : now strings properties can be split. The parser concatenates them:
```c
myProperty = "string value can use "
"multi line layout"
```
- parser: added missing `getCharProperty` when using default listener
- heightmap: added missing `TCOD_heightmap_get_value` function
- now support fonts with unlimited number of characters
(was limited to 1024 in 1.4.0)
- added callback-based atomic bresenham function
`static bool TCODLine::line(int xFrom, int yFrom, int xTo, int yTo, TCODLineListener *listener)`
- added `TCODMap::copy` function
- added TCODList fast remove functions (don't preserve the list order)
- `template<class T> void TCODList::removeFast(const T elt)`
- `template<class T> T * TCODList::removeFast(T *elt)`
### Changed
- Default colors have been changed/added.
- `TCODMap::computeFov` changed to support several algorithms:
`void computeFov(int playerX,int playerY, int maxRadius,bool light_walls = true, TCOD_fov_algorithm_t algo = FOV_BASIC)`
available algorithms :
- FOV_BASIC: classic libtcod fov
- FOV_DIAMOND: http://www.geocities.com/temerra/los_rays.html
- FOV_SHADOW: http://roguebasin.roguelikedevelopment.org/index.php?title=FOV_using_recursive_shadowcasting
- FOV_PERMISSIVE: http://roguebasin.roguelikedevelopment.org/index.php?title=Precise_Permissive_Field_of_View
- light_walls: if false, wall cells are not put in the fov
- `setCustomFont` changed:
defines the font number of characters instead of character size.
if not specified, it is deduced from the layout flag
(16x16 for ascii, 32x8 for tcod)
`setCustomFont(const char *fontFile, int flags=TCOD_FONT_LAYOUT_ASCII_INCOL,int nbCharHoriz=0, int nbCharVertic=0)`
The flag values have changed too:
- TCOD_FONT_LAYOUT_ASCII_INCOL=1
- TCOD_FONT_LAYOUT_ASCII_INROW=2
- TCOD_FONT_TYPE_GREYSCALE=4
- TCOD_FONT_TYPE_GRAYSCALE=4
- TCOD_FONT_LAYOUT_TCOD=8
- pathfinding: you don't need to provide coordinates in x,y parameters of
`Path::walk`
- improved double/simple walls special characters in tcod layout fonts
### Fixed
- fixed SDL dependent features not being available before initRoot is called.
If you want to draw on an offscreen console without calling initRoot, you
need to call at least setCustomFont to initialize the font. Else characters won't be rendered.
- fixed standalone credits page erasing previously fps limit
- fixed special characters TCOD_CHAR_DTEE* and TCOD_CHAR_DCROSS not printing correctly
- fixed heightmap tool generated code not compiling
- fixed parser C++ error function not prepending file name & line number to the error message
- fixed memory leak in pathfinding
- fixed fov issue with walkable, non transparent cells
- fixed numerical stability issues with heightmap rain erosion
- fixed calculation error in heightmap kernel transformation function
- fixed TCODConsole::renderCredits being able to render the credits only once
- fixed mouse cx,cy coordinates in "padded" fullscreen modes
- fixed mouse cursor hidden when switching fullscreen
- fixed mouse coordinates when going fullscreen->windowed
## [1.4.0] - 2008-10-16
### Added
- added pathfinding module
- added BSP module
- added heightmap module + heightmap tool
- added compression toolkit
- added possibility to pre-allocate TCODList's memory
- added support for PNG images + antialiased fonts from PNG with alpha channel or greyscale
- added ASCII mapping functions to map an ascii code to any character in your font:
- `static void TCODConsole::mapAsciiCodeToFont(int asciiCode, int fontCharX, int fontCharY);`
- `static void TCODConsole::mapAsciiCodesToFont(int firstAsciiCode, int nbCodes, int fontCharX, int fontCharY);`
- `static void TCODConsole::mapStringToFont(const char *s, int fontCharX, int fontCharY);`
- parser : now strings can contain octal/hexadecimal ascii values
- myStringProperty1 = "embedded hex value : \x80"
- myStringProperty2 = "embedded octal value : \200"
- parser : now can handle list properties.
```c
myStruct {
myProperty = [1, 2, 3]
}
```
to declare: `struct.addListProperty("myProperty",TCOD_TYPE_INT,true);`
to read (default parser): `TCODList<int> prop(parser.getListProperty("myStruct.myProperty", TCOD_TYPE_INT));`
- added color map generator. Interpolate colors from an array of key colors :
`TCODColor::genMap(TCODColor *map, int nbKey, TCODColor const *keyColor, int const *keyIndex)`
- added random generator backup function. You can save the state of a generator
with `TCODRandom *TCODRandom::save()` and restore it with
`void TCODRandom::restore(const TCODRandom *backup)`
- added simplex noise, similar to perlin but faster,
especially in 4 dimensions and has better contrast:
- `TCODNoise::getSimplex`
- `TCODNoise::getFbmSimplex`
- `TCODNoise::getTurbulenceSimplex`
Simplex should be preferred over Perlin for most usages.
- added wavelet noise, similar to perlin, much slower but doesn't blur at high scales. Doesn't work in 4D :
- `TCODNoise::getWavelet`
- `TCODNoise::getFbmWavelet`
- `TCODNoise::getTurbulenceWavelet`
Noise functions relative times:
| |2D|3D|4D|
|:------|-:|-:|-:|
|simplex| 1| 1| 1|
|perlin | 4| 5|17|
|wavelet|32|14| X|
- you can capture a console to an existing image without creating a new image
with `TCODImage::refreshConsole`
- non rectangular offscreen consoles:
you can define a key color on offscreen consoles.
Cells for which background color = key color are not blitted
- added libtcod credits function. You can either call:
`TCODConsole::credits()` to print the credits page at the start of your game
(just after `initRoot`) or
`bool TCODConsole::renderCredits(int x, int y, bool alpha)` to print the
credits on top of one of your existing page (your game menu for example).
Call it until it returns true.
### Changed
- Noise functions renamed:
- `TCODNoise::getNoise` -> `TCODNoise::getPerlin`
- `TCODNoise::getFbm` -> `TCODNoise::getFbmPerlin`
- `TCODNoise::getTurbulence` -> `TCODNoise::getTurbulencePerlin`
- Some special char constants `TCOD_CHAR_x` added/removed
- `setCustomFont` changed:
`setCustomFont(const char *fontFile,int charWidth=8, int charHeight=8, int flags=0)`
flags:
- TCOD_FONT_LAYOUT_ASCII_INROW=1
- TCOD_FONT_TYPE_GREYSCALE=2
- TCOD_FONT_LAYOUT_TCOD=4
- improved `TCODConsole::flush` performances:
frames per second for sample "True colors" (terminal.png font) on my
reference computer (windowed mode):
- libtcod 1.3.2: 130
- libtcod 1.4.0: 300
- `TCODNoise::getTurbulence` is twice faster
- improved mouse click detection. Even with a low framerate, mouse clicks will
always be detected and reported in the `Xbutton_pressed` fields of
`TCOD_mouse_t`
- you don't need anymore to provide values in `TCODLine::step` parameters
### Fixed
- fixed memory leak in image module
- fixed DELETE and INSERT keys not detected
- fixed a rendering bug when using a white background color before any other
background color
## [1.3.2] - 2008-07-14
### Added
- added documentation for the generic container module `TCODList`
### Fixed
- fixed not being able to open and close the root console more than once
- fixed parser not being able to attach a sub-structure to more than one structure
- fixed TCOD_image_from_console not working with root console on C version
- fixed TCODParser::newStruct, addFlag, addProperty handling only static names
- fixed web color parser (#rrggbb) in the parser module
- fixed TCODImage constructor / TCOD_image_new crashing if root console not initialized
- fixed mouse status not updated if the keyboard events are not read with checkForKeypress/waitForKeypress
- fixed fbm, turbulence functions returning NaN for high octaves values
## [1.3.1] - 2008-06-05
### Added
- added default parser listener for basic config files.
- added fields in `TCOD_mouse_t` to easily detect button press events:
- `lbutton_pressed`: left button pressed event
- `rbutton_pressed`: right button pressed event
- `mbutton_pressed`: middle button pressed event
and to get the mouse movement in cell coordinates (instead of pixels)
- added functions to retrieve data from TCODMap
### Changed
- now TCODConsole::putChar/setChar can use ascii code > 255 (ok, it's no more an ascii code, then)
this allows you to use fonts with more than 255 characters.
### Fixed
- fixed const correctness in `TCODConsole::print*Rect` functions
- fixed a bug in fov toolkit if TCODMap width < height
- fixed `TCOD_struct_get_type` returning `TCOD_TYPE_NONE` instead of
`TCOD_TYPE_BOOL` for flags.
## [1.3] - 2008-05-25
### Added
- added mouse support
- added the file parser module
- added TCODColor::setHSV(float h, float s, float v) and TCODColor::getHSV(float *h, float *s, float *v)
- added TCODColor addition and scalar multiplication. All r,g,b values are clamped to [0-255] :
- C++: `color1 = color2 * 3.5f;`
`color1 = color1 + color2;`
- C : `color1 = TCOD_color_multiply_scalar(color2, 3.5f);`
`color1 = TCOD_color_add(color1, color2);`
- added `TCODConsole::setKeyboardRepeat(int initialDelay, int interval)` and
`TCODConsole::disableKeyboardRepeat()`
- added `TCODSystem::getCurrentResolution(int *w, int *h)`
### Changed
- C++ : colors must be initialized by constructor:
- 1.2.2 : `TCODColor mycol={r,g,b};`
- 1.3 : `TCODColor mycol(r,g,b);`
- TCOD_console_check_for_keypress now has a parameter that indicates which events are tracked
- 1.2.2 : `key = TCOD_console_check_for_keypress();`
- 1.3 : `key = TCOD_console_check_for_keypress(TCOD_KEY_PRESSED);`
- now `TCODFov::computeFov` takes a maxRadius parameter.
Use 0 for unlimited range (default)
- the mouse cursor is now automatically hidden when using fullscreen
- fixed closing the window resulting in a fake 'Q' keyboard event
- fixed `TCODConsole::print*` and `TCODConsole::rect` functions crashing when
printing out of the console
- fixed `f` parameter modified when calling fbm and turbulence noise functions.
Now `f` is no more modified.
- fixed wrong ascii code in `TCOD_key_t.c` when pressing Control and a letter
key.
## [1.2.2] - 2008-03-18
### Added
- added helpers for real time games
- `void TCODSystem::setFps(int val)` to limit the number of frames per second.
Use 0 for unlimited fps (default)
- `int TCODSystem::getFps()` to return the number of frames rendered during
the last second
- `float TCODSystem::getLastFrameLength()` to return the length of the last
frame in seconds
- added `TCODImage::clear` to fill an image with a color
### Changed
- `TCODConsole::hline` and `vline` now have a `TCOD_bkgnd_flag_t` parameter
- now the `TCODConsole::print*Rect` functions return the height (number of console lines) of the printed string
### Fixed
- fixed TCODConsole::print*Rect functions not truncating the string if it reaches the bottom of the rectangle
using a rectangle height of 0 means unlimited height
- fixed a color bug when drawing text using the black color (0,0,0)
- fixed TCODConsole::waitForKeypress(true) resulting in Alt/Ctrl/Shift key state not cleared
## [1.2.1] - 2008-03-09
### Added
- added TCODImage::blitRect to easily map an image on a specific part of a console
- added possibility to generate an image from an offscreen console
- added TCODImage::save
- image toolkit now support reading 8bpp bitmap files.
### Changed
- Random number generators now support inverted ranges instead of crashing:
`TCODRandom::getInstance()->getInt(10,2)`
=> return a value between 2 and 10.
### Fixed
- fixed image toolkit replacing the green component by the red one when loading a bitmap from a file
- fixed console print*Rect functions unnecessarily splitting the string in some cases
- on Linux, you don't need to link with SDL anymore when using libtcod/libtcod++
- fixed linker issues with Visual Studio
## [1.2] - 2008-02-26
### Added
- new 'image' toolkit replacing some of the features previously in the 'system' toolkit.
- now windowed mode works even on 16bits desktops
- improved custom font support.
You can now use fonts with characters ordered in rows or columns and with a custom transparent color.
This allows you to use most existing character sets with the doryen library.
Font characters with grayscale are still not supported.
- new time functions:
- `uint32 TCODSystem::getElapsedMilli()`
- `float TCODSystem::getElapsedSeconds()`
- new background blending modes (see the line sample for a demo) :
- TCOD_BKGND_LIGHTEN : newbk = MAX(oldbk,curbk)
- TCOD_BKGND_DARKEN : newbk = MIN(oldbk,curbk)
- TCOD_BKGND_SCREEN : newbk = white - (white - oldbk) * (white - curbk) // inverse of multiply : (1-newbk) = (1-oldbk)*(1-curbk)
- TCOD_BKGND_COLOR_DODGE : newbk = curbk / (white - oldbk)
- TCOD_BKGND_COLOR_BURN : newbk = white - (white - oldbk) / curbk
- TCOD_BKGND_ADD : newbk = oldbk + curbk
- TCOD_BKGND_ADDALPHA(alpha) : newbk = oldbk + alpha * curbk, 0.0<=alpha<=1.0
- TCOD_BKGND_BURN : newbk = oldbk + curbk - white
- TCOD_BKGND_OVERLAY : newbk = curbk <= 0.5 ? 2*curbk*oldbk : white - 2*(white-curbk)*(white-oldbk)
- TCOD_BKGND_ALPHA(alpha) : newbk = (1.0f-alpha)*oldbk + alpha*(curbk-oldbk), 0.0<=alpha<=1.0
- The samples can now use custom bitmap fonts / screen resolution. Use following syntax :
sample_c[pp] [options]
options :
* -fullscreen : start directly in fullscreen mode
* -font <font_filename> (default "terminal.bmp")
* -font-char-size <char_width> <char_height> (default 8 8)
* -font-layout <nb_char_horiz> <nb_char_vertic> (default 16 16)
* -font-in-row : characters in the bitmap are ordered in rows (default : columns)
* -font-key-color <r> <g> <b> : transparent color, r,g,b between 0 and 255. (default 0 0 0)
* -fullscreen-resolution <width> <height> (default 640 400)
### Changed
- headers renamed from `tcodlib.h*` to `libtcod.h*`
- on Linux, the library is split into `libtcod.so` and `libtcod++.so`
allowing C developers to use it without installing g++
- the font name is no more a parameter of `TCODConsole::initRoot`
- `TCODConsole::setBitmapFontSize` renamed to `TCODConsole::setCustomFont`
- `TCODConsole::printFrame` is now a variadic function, like the other text output functions
- some background blending flags have been renamed:
- `TCOD_BKGND_NOBK` replaced by `TCOD_BKGND_NONE`
- `TCOD_BKGND_BK` replaced by `TCOD_BKGND_SET`
- the fov toolkit now uses two properties per cell : `transparent`/`walkable`.
This is necessary to fix a fov issue with window cells (transparent, but not walkable).
`void TCODFov::setTransparent(int x,int y, bool isTransparent)` has been replaced by :
`void TCODFov::setProperties(int x,int y, bool isTransparent, bool isWalkable)`
- improved const correctness, added some default parameter values in the C++ API.
### Fixed
- fixed the window size when using a custom font size
- fixed `TCODK_PRINTSCREEN` key event not detected
- fixed crash in printing functions if the string length was > 255.
Now they can handle strings of any size.
## [1.1] - 2008-01-27
### Added
- added the noise toolkit
- added the field of view toolkit
- added customizable bitmap font size
## [1.0.1] - 2008-01-19
### Added
- added C/C++ samples
### Changed
- `TCODConsole::waitForKeyPress` now has a bool parameter indicating if we
flush the keyboard buffer before waiting.
### Fixed
- fixed a color bug when drawing text using the grey color (196,196,196)
- fixed wrong key codes returned by wait/checkForKeyPress on some keyboard layouts
## [1.0] - 2008-01-05
- Initial release
|