3.5 Common Lisp terrain generator ================================= cl-rebonoise (1) is a Common Lisp implementation of the Simplex/Perlin noise approach described in Amit Patel's 'Making maps with noise functions' (2). +#%#+++++++++++++++++++%+--=++++++==--+#%%#*+++*+%#*=-----------=----- #**+++++++++++++++++++#*##=-=====--=++##**#%%++*+*%%*+*#*+#*+--------= +==++++++++++++++++++++=+*+#=----=*++++====++++=+==+=+*+++##%+==-----+ ++++++++++++++++=++++++++==+#=--+#++++++++++++++++++++==++==+%@*------ +=+=++++++++++=+#==++++++++*#+--#%+++++++++++++++++++++++++++++*#+---- %*+++++++++++++#%%%+=+++++=**----*+=++++++++++++++++++++++++++=+%+---- =*%@#=++++++++%@%#%*+++++++#=----%%*==+++++++++++++++++++++++=+**----- +#+*#*++++++++*%+=##*++++++%@%==-#@@##+++++++++++++++++++++==#%+--=--- %++=+++++++++++#@@#%*=++++++*%@%*=@#**+++++++++++++++++++++**%+-===--- ++++++++++====+*@%#++==+++++==**##*+==++++++++++++++++++=+%+========-- +++++++++*###**++#@@%#*+=+++++===+=+++++++++++++++++++=+**+-=++++=---- ++++++++=*#%*-----=+*#%#*+++++++++++++++++++++++=++++=**=-=++==+++=--= +++++++++==#*#+--------+=#*=++++++++++++++++++++*+==+##--==++++======+ +++++++++++=+%@=---------+@*=+++++++++++++++=#*+%*+*##-=-=====-------= +++++++++++++=+#%#=====-=+*+++++++++++++++++++=+#++*+##=----=+=-----== ++++++++++++++=++**+*****+=+++++++++++++++++++++=++==**:----=#*-----== +++++++++++++++++==+===+++++++++++++++++++++==+++==+**#==----------=++ ++++++++++++++++++++++++++++++++++++++++===+**++*#*%@@@+=-----==---=== =+++++++++++++++==++++++++++++++++++++++#***+====+==**#=---=+=++------ *+=+++++++++++++#%%+==++++=+++++++++++++*#=--=====-------===++=+=---*# +**+==++++++++++*#++**+=++*+++++++++++++=#=-=+++++====-===+++++++=--+@ ---#*+++++++++++===%@@%***+=*@#=++++++++++*=-++++=++=--=++==+++=+===== -++=#@++++++++++++++#%*=-==--*#*+++++++++++*+-==++++==+==+++++++++==== +##+*++++++++++++++=+*=--=+=--=%+++++++++++=#+---=====----==---==--==- +==++=+++++++++++++++#+-====--+%+++++++++++++#**=-----=****+=+*#++++== ++++++++++++++==+++=##:---==-+%++++++++++++++++%*-#==#***+++***###+++* +++++++++++=#@#*=#*+%%++=----+*#++++++++++++++++*%@###=+=+++======++== +===+++++++=#%%@#*%%%++**++*%*#@*=+++++++++++++=*%%@@*++++++++++++++++ *%**@@*=+++++==+*+++=++=++#%@*-=*%+=++++++++++++++++*+++++++++++++++=+ +%#+#*++++++++++=+++++++++==%#---+#*=++++++++++++++==+++++++++++=+++*+ +++===+++++++++++++++++++++**----++##*%%%%+++++++++++++++++++++++#*#@@ +++++++++++++++++++++++++++%%+---++%%+@@@%##+++++++++++++++++++%%=--=% +++++++++++++++++++++++++++%#+-----*#%%%++++++++++++++++++++++*+-----= +++++++++++++++++++++++++++##=------*%++=++++++++++++++++++++%*=----*# ++++++++=*#+++++++++++++++#+*=-----=%#+++++++++++++++++++++=*%%%===+%* Generated terrain. Includes primitives and also helper functions, e.g.: (grid-to-file 500 500 "./examples/img/7-biome2.png" :coefs '((1 6) (2 11) (4 8) (18 2) ) :power 1.45 :offset 166 :biomes t) Amit's page has a wealth of resources on game-related topics, from an implementation perspective, and I've been following it for years. 3.5.1 Why I'm interested ------------------------ Part of this is because one of my long-term projects is to recreate a turn-based, play-by-(e)mail game that I was addicted to decades ago (3), a project I keep coming back to only to get derailed in building more 'infrastructure' instead of actual code: my commits to BKNR, a Common Lisp in-memory datastore (4) where part of this, and this library another. While I end up getting side-tracked, one of this days I will piece together all the side quests and make that game available. Well, that's the plan, anyway. ---------- Footnotes ---------- (1) cl-rebonoise (https://github.com/fsmunoz/cl-rebonoise) (2) Amit Patel's 'Making maps with noise functions' (https://www.redblobgames.com/maps/terrain-from-noise/) (3) It was very a local phenomenon called 'Idade das Trevas' ('Dark Ages'), and was very popular in the small-but-connected world of strategy games enthusiasts in the 90s. (4) BKNR, a Common Lisp in-memory datastore (https://github.com/hanshuebner/bknr-datastore)