finalize revision 0.032
[SwashRL.git] / docs / changes.txt
blobb0e50d0fe58e7c7ffca86dd32db222e8b5793d1c
1 SwashRL official changelog
3 VERSION 0.32
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.
9   Fixed:
10    - The SDL terminal interface now inverts colors correctly.
12   Added:
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
15      in config.d
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.
22   Changed:
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
28      hard-coded.
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
33      curses interface.
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.
45   Corrections:
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
53   Added:
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).
60   Changed:
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.
66   Fixed:
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
70      the check being cast.
72 VERSION 0.031
73 Finalized 2019-12-21 19:52 CST
75   Changed:
76    - Rooms in the map are now connected randomly.
78 VERSION 0.030-1
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
83  logs:
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.
89 VERSION 0.030
90 Finalized 2019-09-01 19:38 CST
91   SwashRL is now licensed under the BSD Revised License.
93   Changed:
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.
98 VERSION 0.029-1
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.
103 VERSION 0.029
104 Finalized 2019-01-28 17:54 CST
106   Changed:
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)
119   Added:
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
122      equipment screen.
124   Fixed:
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.
132 VERSION 0.028
133 Finalized 2018-11-27 19:58 EST
135   Changed:
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
141      monst.
142    - The special exception to the Apache License 2.0 has been reworded to be
143      more clear and rigorous.
145   Added:
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
148      commit ID.
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.
155   Fixed:
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
163 VERSION 0.027
164 Finalized 2018-08-19 07:19 EST
166   Added:
167    - Mold is now randomly generated and decorates dungeon floors and walls
168    - Players and monsters now bleed when hit in combat
170 VERSION 0.026
171 Finalized 2018-08-19 04:53 EST
173   Changed:
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"
177      message.
179   Added:
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.
184 VERSION 0.025
185 Finalized 2018-08-10 03:29 EST
187   Known bugs:
188    - The curses interface doesn't display "seen" tiles when they leave the
189      field-of-view.
191   Changed:
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
198      have been removed.
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.
207   Added:
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
210      interface.
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
215      default tile size.
217 VERSION 0.024
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
224   details.
226   Windows support is back online.
228   Changed:
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
236      effect.
237    - The "change controls" key has been changed from F12 to '@' to keep it
238      working in SDL.
239    - The test map now only appears if the program is compiled with version
240      "testmap"
242   Added:
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.
252 VERSION 0.023
253 Finalized 2017-12-05 22:30 EST
255   Fixed:
256    - Fixed the missing semicolons that were preventing version 0.022 from
257      compiling.
259 VERSION 0.022
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.
268   Fixed:
269    - Messages are now formatted properly and no longer consist of static
270      strings.
272   Changed:
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.
276 VERSION 0.021
277 Finalized 2017-09-02 02:36 EST
279 Fixed:
280  - Monsters are no longer rendered invisible if USE_FOV is undefined.
282 Changed:
283  - Tiles are now defined as structs rather than abstract bitmaps.
284  - Improvements to the operating system detection code.
286 Added:
287  - Player now has an inventory made up of several body slots and can pick up
288    items.
289  - The inventory screen has been implemented, from which the player can move
290    items around.
291  - Some new items have been added to the test map to test inventory slots.
292    These are still buggy.
294 VERSION 0.020-1
295 Finalized 2017-03-05 21:55 EST
297 Changed:
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.
302 VERSION 0.020
303 Finalized 2017-03-05 17:48 EST
305 Changed:
306  - Running into a wall no longer counts as a turn
307  - Incredibly rudimentary field-of-vision implemented; needs fine-tuning. See
308    todo.txt.
310 Code changes:
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.
319 VERSION 0.019
320 Finalized 2017-02-22 22:04 EST
322 Added:
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
327    mechanisms
329 Changed:
330  - More concise random number generation code; default die is now d6, removed
331    lots of unnecessary functions, changed others.
333 VERSION 0.018
334 Finalized 2017-01-29 22:28 EST
336 Added:
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
340    stupid.
341  - The version command now displays a 'd' if `DEV_RELEASE' is non-zero.
343 Removed:
344  - Monsters no longer blink.
346 Fixed:
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.
353 VERSION 0.017
354 2017-01-22 18:02 EST
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.
363 Added:
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
366    hostile.
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
369    messily.
370  - New player commands:
371     Wait ('.' or '5')
372     Clear Messages (' ')
373     Previous Messages ('P')
375 Fixed:
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.
384 Minor fixes:
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.
389 Known bugs:
390  - The game sometimes skips buffered messages on player death.
392 VERSION 0.0.16
393 Finalized 2017-01-20 23:04 EST
395 Known bugs:
396  - I somehow managed to disable all text effects.
398 Fixed:
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.
402 Minor fixes:
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.
406 VERSION 0.0.15
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.
414 Known bugs:
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.
422 Fixes:
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
425    comments.
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.
430 Minor fixes:
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
437    the C99 standard.
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.
444 VERSION 0.0.14
445 Finalized 2017-01-17 23:07 EST
447 Added:
448  - The game now has a rudimentary status bar and message line.  The map has
449    changed size to accomodate this change.
451 Known bugs:
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."
459 VERSION 0.0.13
460 Finalized 2017-01-17 15:13 EST
462 Minor fixes:
463  - Random number generator has been implemented.  Unlike other random number
464    generators out there, this one is specifically designed to emulate the
465    rolling of dice.
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
472    implemented.
474 VERSION 0.0.12
475 Finalized 2016-12-27 17:14 EST
477 Minor fixes:
478  - Monsters now collide with each other rather than stacking
479  - The version number is now displayed upon a press of the 'v' key
481 VERSION 0.0.11
482 Finalized 2015-10-04 19:59 EST
484 Bugfixes:
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
487    from compiling.
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.
493 Minor fixes:
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.
500 Added:
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