1 SwashRL official changelog
4 Finalized 2020-09-11 17:28 CDT
6 Save files from version 0.031 Christmas Update and earlier will are not
7 compatible with this or future versions of SwashRL.
10 - The SDL terminal interface now inverts colors correctly.
13 - The OpenDyslexic Mono font, used to create a more readable interface for
14 dyslexic users, has been added. It is activated by the DYSLEXIA option
16 - Debug builds can now access a color test screen by passing in
17 --test-colors or --test-color in the command line.
18 - Many many new color pairs have been defined. Most of them are not
19 currently in use but many are reserved for planned features to be
20 included in later versions of SwashRL.
23 - Default fonts for the SDL terminal interface are now defined in an enum
24 named TileSet, which stores structs containing the filepath to a font
25 file and the ideal height and weight for that font.
26 - Whether or not the message line and status bar use a bolder font is now
27 determined by a configuration setting in config.d rather than being
29 - Substantial changes have been made to the way colors are stored. SDL
30 colors and curses color codes are now saved in a `Color` class, and color
31 pairs are defined in a `Color_Pair` class. `Color_Pair` objects also
32 specify whether the color pair should be boldened and/or reversed in the
34 - Tiles, items, and monsters now store an enum of type `Colors` in order to
35 instruct display functions on what color pair to use. Saved files also
36 save and load these enums rather than taking in the full color data.
37 - While wearing the festive hat, the player is now displayed in white-on-
38 red rather than black-on-red.
39 - The player character is now orange in the SDL terminal interface and is
40 bright white in the curses interface. The reason for the difference is
41 that the closest thing to orange that curses normally supports is "bright
42 red," which is not suitable on most terminal color schemes, so instead a
43 traditional color is used.
46 - The changelog for the Version 0.032 Christmas Update stated that the
47 player would be greeted on October and listed the date as 10-31. In
48 fact, the game refers to this holiday as Halloween.
50 VERSION 0.031 Christmas Update
51 Finalized 2019-12-21 23:02 CST
54 - The player will now receive a free "festive hat" item if they start a new
55 game during the month of December.
56 - The player will now receive appropriate season's greetings on New Year's
57 Eve/Day (12-31 to 01-01), Hanami (04-08), October (10-31), and Christmas
58 Eve/Day (12-24 to 12-25).
61 - The function which draws the player in the curses and SDL terminal
62 interfaces will now draw them in the color of the "festive hat" if they
63 are wearing one, except the colors will be inverted in order to better
64 highlight the player's position.
67 - A bug which caused items to fit into inappropriate equipment slots has
68 been fixed. The bug was caused by the item's equipment flag being
69 cast to a boolean before being checked, rather than the result of
73 Finalized 2019-12-21 19:52 CST
76 - Rooms in the map are now connected randomly.
79 Finalized 2019-09-01 16:53 CST
80 A minor release correcting an error made while copying and pasting the
81 license notice into the repository and the source code files within. An
82 explanation for this error can be found within this snippet from the git
85 When I copied and pasted the BSD 3-clause license I neglected to check
86 if any alterations had been made to the warranty and liability
87 disclaimer. As it happens there were, so I have to fix that now.
90 Finalized 2019-09-01 19:38 CST
91 SwashRL is now licensed under the BSD Revised License.
94 - New map generation algorithm, as well as a generic generate_new_map
95 function which can be used later on as a function which will allow us to
96 choose or randomly select a map generation algorithm.
99 Finalized 2019-01-29 13:10 CST
100 A minor release correcting small errors in the documentation from version
101 0.029 and moving some of the code around in iomain.d for consistency.
104 Finalized 2019-01-28 17:54 CST
107 - Numerous improvements to the inventory management code
108 - The inventory screen (the "bag") and the equipment screen are now clearly
109 separated in the code base
110 - The drawing and control functions for the equipment and inventory screens
111 are now clearly separated
112 - The inventory screen now exits immediately if the inventory is empty or
113 no further transactions are possible.
114 - Instructions given on the equipment screen now clearly tell the player
115 how to interact with their equipment slots and change depending on what
116 function the player is currently performing (i.e. whether they're
117 "grabbing" or "swapping"/"moving" items)
120 - New "equipment key," e by default, to get to the equipment screen. The
121 inventory key now functions as a shortcut to get to the "bag" in the
125 - Garbage output on the message line at the start of the program has been
126 fixed. The message line will now be blank at the beginning of the game.
128 Known Bugs or Oversights:
129 - Oversight: Taking items out of the inventory and placing them in the
130 hands does not cost any turns.
133 Finalized 2018-11-27 19:58 EST
136 - The --help message and version number disclosure message now state the
137 name of the executable, rather than simply SwashRL, to make it easier to
138 change the name of the program later.
139 - Mold and blood are now visible when field-of-vision is turned off.
140 - The player no longer has their own struct, and is instead defined as a
142 - The special exception to the Apache License 2.0 has been reworded to be
143 more clear and rigorous.
146 - If INCLUDE_COMMIT is true at compile time, the version number output by
147 the 'v' key and the --help command line argument will include the current
149 - Added a NAME flag in global.d so that source modders can change the name
150 of the game super easily.
151 - Cheat modes: type --dqd in the command line for godmode, --spispopd for
152 noclip, --esm to instantly kill all monsters, and/or --eoa to see the
153 whole map. Noclip also reveals the whole map.
156 - The test map no longer causes an error by attempting to grow mold when
157 the mold flag is turned off.
158 - iocurses.d no longer generates errors due to undeclared "format" calls
159 - The curses interface now uses the correct colors
160 - The -S (SDL mode) command-line argument has been changed to -m (short for
161 "mode") in order to fix the broken -s ("load save") command-line argument
164 Finalized 2018-08-19 07:19 EST
167 - Mold is now randomly generated and decorates dungeon floors and walls
168 - Players and monsters now bleed when hit in combat
171 Finalized 2018-08-19 04:53 EST
174 - The "quit" command now prompts for confirmation before exiting.
175 - Pressing the "close window" button in the SDL terminal interface now
176 causes the program to quit immediately, without a "See you later"
180 - The ability to save and load in maps has been implemented.
181 - A command line argument for loading saved maps has been added.
182 - A "Save" command has been added.
185 Finalized 2018-08-10 03:29 EST
188 - The curses interface doesn't display "seen" tiles when they leave the
192 - The map is now displayed in such a way that map tiles which have already
193 been seen are drawn in the normal display functions. This allows the
194 player to fill out the map by exploring. Items and monsters are only
195 displayed if they are currently in the player's line-of-sight.
196 - After extensive testing, it has been determined that the current map
197 generation code does not produce errors, so the annoying debug messages
199 - The test map is now available for debug builds, rather than requiring a
200 special "testmap" version, and can be accessed by running the game with
201 command-line argument --test-map
202 - Functions which might cause the program to quit immediately, such as SDL
203 initialization or keymapping, have been moved to an earlier place in the
204 program so that the player doesn't have to wait for the SDL interface to
205 initialize before the program gives an error message.
208 - Color support. Color is supported by both the curses and SDL interfaces.
209 - Configuration options to determine the font and tile size in the SDL
211 - Configuration settings to determine the font and character size.
212 - Bold version of the DejaVu Sans Mono font, as on option for the user.
213 - Messages, such as the message line and status bar, are now printed using
214 the Bold version of DejaVu Sans Mono to make them more clear on the small
218 Finalized 2018-08-05 02:23 EST
220 The name of the game has been changed from Spelunk! to SwashRL to avoid
221 confusion with the popular indie platformer Spelunky.
223 The game is now licensed under the Apache License 2.0. See README.MD for
226 Windows support is back online.
229 - Display functions are now placed in a class which can be swapped out to
230 change the display method
231 - Key mappings are now stored in a hashmap, and functions used to generate
232 such hashmaps are added to allow source divers to add their own keymaps.
233 - The message buffer is now a linked list, allowing for a dynamically sized
234 buffer and some better underlying source code.
235 - The USE_BLINK configuration option has been removed due to not having any
237 - The "change controls" key has been changed from F12 to '@' to keep it
239 - The test map now only appears if the program is compiled with version
243 - SDL support, with SDL being the default display method
244 - Command line arguments have been added which allow the user to choose a
245 display method at runtime
246 - Multiple configurations which allow dub to build the program with or
247 without curses or SDL support
248 - A detailed help screen now appears when the user types '?'. The previous
249 "help" prompt new tells the user how to reach this screen.
250 - Rudimentary map gen algorithm.
253 Finalized 2017-12-05 22:30 EST
256 - Fixed the missing semicolons that were preventing version 0.022 from
260 Finalized 2017-12-05 21:45 EST
262 With version 0.022, the source code was rewritten from C to D in order to
263 unlock better functionality. Unfortunately this broke support for PDCurses,
264 rendering this version of the code unable to run on Windows. An effort was
265 made to fix this but due to a computer failure the code was lost. Windows
266 support has been temporarily postponed.
269 - Messages are now formatted properly and no longer consist of static
273 - The system the code is being compiled on now auto-detects and imports
274 some modules according to what system "version" is being compiled.
277 Finalized 2017-09-02 02:36 EST
280 - Monsters are no longer rendered invisible if USE_FOV is undefined.
283 - Tiles are now defined as structs rather than abstract bitmaps.
284 - Improvements to the operating system detection code.
287 - Player now has an inventory made up of several body slots and can pick up
289 - The inventory screen has been implemented, from which the player can move
291 - Some new items have been added to the test map to test inventory slots.
292 These are still buggy.
295 Finalized 2017-03-05 21:55 EST
298 - Field of vision code has been swapped to the libtcod implementation of the
299 recursive shadowcasting algorithm I was trying to implement. See
300 3rdparty.txt for details.
303 Finalized 2017-03-05 17:48 EST
306 - Running into a wall no longer counts as a turn
307 - Incredibly rudimentary field-of-vision implemented; needs fine-tuning. See
311 - The code now detects automatically if it is being compiled on Windows (or,
312 begrudgingly, cygwin) (courtesy of Elronnd)
313 - Tiles are now bitmasks rather than integer flags, with each bit determining
314 something about the tile's behavior. Colission detection has been modified
315 to use these bitmasks.
316 - Whether or not a tile's colors are reversed is now determined by a bit
317 TILE_INVERT rather than whether or not the tile is a wall.
320 Finalized 2017-02-22 22:04 EST
323 - Capability to switch between two sets of movement controls by pressing F12:
324 first one is standard hjklyubn, second one is "alternate" hjkluinm,
325 designed for people who often transition between typing and playing.
326 - Further rewrites to key-handling code to handle a variety of control
330 - More concise random number generation code; default die is now d6, removed
331 lots of unnecessary functions, changed others.
334 Finalized 2017-01-29 22:28 EST
337 - Rudimentary items. The current implementation is flimsy because it
338 requires that the game read the object's symbol as '\0' in order to
339 determine that there is no item here. This is because pointers in C are
341 - The version command now displays a 'd' if `DEV_RELEASE' is non-zero.
344 - Monsters no longer blink.
347 - Message formatting now sort of works. The fix involves a kludge in which
348 the message is output directly to the screen using `mvprintw' and then
349 scanned into a buffer using `mvinch', which is then passed to the message
350 buffer. Messages will be truncated if they contain more than three spaces
351 in a row and are limited to 80 characters when using this method.
356 New version numbering system R.N is now being used, wherein R is the release
357 number and N is the three-digit revision number.
359 I have given up on getting formatted messages to work. It was between not
360 having a message buffer or using "It attacks you" instead of "the %s attacks
361 you," and I chose to keep the message buffer. We can figure this out later.
364 - Experimental feature in which monsters blink (if USE_BLINK is defined). In
365 future, the blink effect will be used only for monsters who are actively
367 - The capability for certain actions, such as displaying help and the version
368 number command, to not count as a move has been implemented, albeit rather
370 - New player commands:
373 Previous Messages ('P')
376 - Ironed out the last issues in the message buffer. Because it was bumping
377 messages backwards, only odd-numbered messages were being queued properly.
378 The changelog note indicating that the message buffer was fully functional
379 in 0.0.16 was in error.
380 - Re-enabled special effects in text. The nature of the bug is still unknown
381 to me, but I believe it is because I chose to use a macro named ANY_CURSES,
382 which might have been used by pdcurses or ncurses without my knowledge.
385 - Code which had been included in version 0.0.16 for a non-curses version of
386 the game has been fully disabled. It will be re-enabled later when
387 non-curses display has been implemented.
390 - The game sometimes skips buffered messages on player death.
393 Finalized 2017-01-20 23:04 EST
396 - I somehow managed to disable all text effects.
399 - The message buffer is now fully functional. At the end of every turn, the
400 game will show you every message that it has generated one at a time.
403 - The map is now stored statically in anticipation of code rewrites that will
404 need to happen for non-curses versions of the game in the future.
407 Finalized 2017-01-20 20:41 EST
409 The name FORRNIF was changed to Spelunk! on version 0.0.15 as the plan for the
410 game changed. FORRNIF will return later. If you have access to the source
411 code and are wondering why the name FORRNIF pops up in places, it's because
412 the name changed at this point during development.
415 - The message buffer is still broken, still for reasons unknown. Fixes have
416 been deferred to version 0.0.16 so as not to lose the compliance changes
417 made in this version.
418 - Because of difficulty getting strings to format properly with the new
419 message buffer functions, all messages seen in the game are hard-coded.
420 These fixes have again been deferred to 0.0.16.
423 - All source code comments now use "block comments" rather than line comments
424 in order to be compliant with early versions of C which do not allow line
426 - Source code has been reworked to be fully compliant with C89. Luckily this
427 took minimal effort. It has been verified by me that the code works as
428 intended when compiling under C89, C99, or C11.
431 - The status bar has been moved to the top of the screen so that it may be
432 manipulated at the same time as the message line on more rudimentary
433 systems. This is because of road bumps encountered in the process of
434 implementing the message buffer.
435 - Some code has been added to allow use of data types introduced in C99, such
436 as booleans and standardized explicit-size integers, if you compile with
438 - Additional code has been added to allow the program to recognize if it is
439 being compiled with the C95 or C11 standards, but no code has been
440 implemented as yet which uses these checks and gcc does not recognize C95.
441 - The game will now refuse to compile with ncurses for Windows, as ncurses
442 does not support Windows.
445 Finalized 2017-01-17 23:07 EST
448 - The game now has a rudimentary status bar and message line. The map has
449 changed size to accomodate this change.
452 - Some of the game's "move" functions have hard-coded values that draw
453 sections of the screen. Since the map has been resized, these now give
454 inappropriate screen coordinates and will erroneously draw or fail to draw
455 the player in the correct place or reposition the cursor to the wrong spot.
456 - Some of the message lines require an unreasonable amount of key presses to
457 clear the screen, which may result in players accidentally "resting."
460 Finalized 2017-01-17 15:13 EST
463 - Random number generator has been implemented. Unlike other random number
464 generators out there, this one is specifically designed to emulate the
466 - Monster hit points are now determined by "hit dice," and they now store
467 their own "attack dice," which determine how hard they hit.
468 - Your hit points are now determined by "hit dice," and you now store your
469 own "attack dice," which determine how hard you hit.
470 - Monster and player attack rolls have now been implemented; starting HP and
471 attack strength are now random. Crits and botches have not yet been
475 Finalized 2016-12-27 17:14 EST
478 - Monsters now collide with each other rather than stacking
479 - The version number is now displayed upon a press of the 'v' key
482 Finalized 2015-10-04 19:59 EST
485 - Fixed an attrocious error in the movement code which attempted to gather
486 tile data from monsters rather than the map. This prevented version 0.0.10
488 - Fixed a bug causing monsters not to display because the array size rather
489 than the monster index was being incremented in the display code. This had
490 previously not been noticed in versions where only one monster was present
491 in the testing arena.
494 - Altered monster AI code so that it is handled by the map. This puts maps
495 in charge of the monsters so that individual monsters do not have to be
496 pulled from the map data in order to be instructed to make their move.
497 - Added the ability to simply remove a monster from map data so that it is no
498 longer present after being slain.
501 - Added a batch file, compwin.bat, which will automatically compile FORRNIF
502 for Windows and place it in the bin directory. This was for my own
503 convenience as the gcc command required to compile is curiously specific and
504 I kept forgetting the order of operations.
506 VERSION 0.0.10 was finalized on 2015-09-04 at 17:13 EST
507 VERSION 0.0.9 was finalized on 2015-09-04 at 12:13 EST
508 VERSION 0.0.8 was finalized on 2015-09-03 at 21:43 EST
509 VERSION 0.0.7 was finalized on 2015-09-02 at 10:23 EST
510 VERSION 0.0.6 was finalized on 2015-08-30 at 19:36 EST
511 VERSION 0.0.5 was finalized on 2015-08-29 at 17:58 EST
512 VERSION 0.0.4 was finalized on 2015-08-30 at 14:44 EST
513 VERSION 0.0.3 was finalized on 2015-08-24 at 21:29 EST
514 VERSION 0.0.2 was finalized on 2015-08-24 at 20:14 EST
515 VERSION 0.0.1 was finalized on 2015-08-24 at 14:10 EST
516 VERSION 0.0.0 was finalized on 2015-08-24 at 12:31 EST