summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.CHANGELOG1393
-rw-r--r--.SRCINFO41
-rw-r--r--PKGBUILD159
-rw-r--r--lix.desktop8
4 files changed, 1485 insertions, 116 deletions
diff --git a/.CHANGELOG b/.CHANGELOG
index af15a8ee690a..fb3642a2253a 100644
--- a/.CHANGELOG
+++ b/.CHANGELOG
@@ -1,6 +1,1391 @@
Version history
===============
+0.10.19
+-------
+
+2024-01-30
+
+Fix #480: The networked game wouldn't start even though everybody was ready.
+The bug was: When a new player joined a room, the existing ready players
+became unready only on the server, not on each client. Now, the server and
+the clients agree that, after a new joiner, everybody becomes unready.
+The fix is client-side and doesn't affect physics. If the server starts
+the game at all, all 0.10.x clients start playing regardless of this fix.
+
+Add Eggs in One Basket, a new multiplayer map by geoo for 3-8 players.
+
+Add Hopscotch, a new miniature by geoo.
+
+Fix entrance order in the 6-player version of Rescue Ranger Trolls.
+
+Remove Cascade Squared 6p and 8p according to Flopsy's recommendation.
+
+Remove a zealous assertion that prevented you from re-entering the options
+menu after you've accidentally set an overly tall resolution, e.g., 300x800,
+when you ran a debug build of Lix.
+
+Update Allegro DLLs to 5.2.9.0 for the Windows 64-bit release.
+
+Rewrite the Windows 32-bit build notes. Offer DLLs/LIBs for building 32-bit
+Windows Lix and for linking with lld-link. (Both DMD and LDC now link with
+lld-link, not with Optlink. I still recommend everybody to choose 64-bit Lix.)
+
+
+
+0.10.18
+-------
+
+2024-01-05
+
+Solobattle: From the singleplayer browser, you can start a multiplayer map
+and you will control all teams (= all colors). Spawn order and timings will
+be as if you played the map with its intended number of players. Hover the
+mouse cursor over lix of different colors to see other teams' skill panels.
+
+Prevent accidental cutting of replays: To cut, you must click where no lix
+are on the map. It's not enough anymore to click on left-facing lix
+while you filter for right-facing lix (via rightward directional select).
+
+In singleplayer, after you nuke, the skill panel shows your remaining skills
+even though you can't assign them anymore. In multiplayer, after you nuke,
+you see zero leftover skills to make it clear that you cannot assign.
+
+When you observe a multiplayer battle, all of your skill buttons are
+unchosen (not highlit). You still can't switch teams, which would be nice.
+
+Hide the Windows command line console when you run Lix after you've built
+Lix from source with DMD. Reason: Newer DMD versions link with lld-link,
+not with optlink, and need different linker flags.
+
+Add over 60 of Flopsy's new multiplayer maps. Remove over 70 weaker maps
+by Flopsy according to Flopsy's own choice.
+
+Fix a backroute in Continuum Hypothesis (lemforum Hopeless).
+
+Fix player counts for Group Therapy and for One for Me, One for You.
+
+Update Catalan translations, thanks to Rampoina.
+
+
+
+0.10.17
+-------
+
+2023-11-21
+
+Reword the lix-identifying panel text when you hover the cursor over a lix.
+Before, when one lix platformed with 9 bricks left, and two lix walked past,
+it read "3 Platformers [9]". Now, it reads: "Lix #7 is platforming [9] + 2 lix"
+
+Remove "(RCF)" from the lix-identifying panel text for the permanent abilities:
+runners, climbers, floaters. We already show permanent abilities directly on
+the main map as little icons above the lix.
+
+Translate skill names. In English, a builder produces the lix-identifying
+panel text "Lix #13 is building [9]", which translates to the German text
+"Lix #13 baut [9]".
+
+Translate keyboard key names. E.g., in German, if you bind the Insert key, the
+keybinding button will read "Einfg". Before, it read "Insert" even in German.
+
+Reword the in-game tooltip "Replaying. To play, click into air."
+to "Replaying. Click to play from here."
+
+Don't show the tooltip "Rewind time or quit" after the single player has nuked.
+In this case, he wants to exit to menu, not rewind.
+
+Don't show tooltips in multiplayer. This works around bug #473: When you have
+both tooltips and the big score board, the tooltips don't erase the score board
+from screen properly. Until we solve the root cause of those drawing/undrawing
+races, let's hide tooltips altogether in multiplayer.
+
+
+
+0.10.16
+-------
+
+2023-10-07
+
+Physics: Fix a bug with walkers in overlapping blocker fields that appears
+only in Lix versions 0.10.13, 0.10.14, and 0.10.15. The bug was: Trap a walker
+between two overlapping blockers on a slope, observe the walker bop up and
+down (0.10.13 through 0.10.15) instead of staying fixed on its height
+(0.10.12 and earlier). This bug triggered an assertion failure in debugging
+builds. This fix reverts the walker behavior to 0.10.12 and earlier.
+
+Fix a crash in the editor: When you copy-pasted a tile on a torus map,
+resulting in an offset copy that went beyond the torus seam, then moved the
+resulting tile, Lix crashed. Now, copy-pasting wraps coordinates correctly.
+
+Enlarge number displays for large resolutions, e.g., 1920x1080. Now, numbers
+won't be abbreviated anymore. The bug was, e.g., that the tweaker displayed
+a four-digit tick count of "...4" instead of "1234".
+
+
+
+0.10.15
+-------
+
+2023-08-30
+
+Fix a performance bug: In insert mode (i.e., by default, when the tweaker was
+open), new assignments would always recompute all physics since the beginning,
+even if nothing needed recomputation. Now, we recompute only as necessary.
+
+Fix #448: Prevent tumblers from repeatedly crying "Ouch" when they're trapped
+in a permanent flinger.
+
+Add user option: Allow blurry zoom. It's on by default. If you deactivate
+this, you force Lix to use only crisp integer zoom factors (1x, 2x, 3x, ...)
+that won't always fit the level to the screen size.
+
+Re-label the tweaker's "<", ">" buttons with "−" and "+". Reason:
+These buttons move assignments to a different tick, not left or right.
+
+Narrow the tweaker to fit more level on the screen.
+
+Allow .mp3 in the music/ directory. This works out of the box on Windows.
+On Linux or Mac, you must build Allegro 5 with the MiniMP3 library to hear
+the .mp3 files that you put in music/.
+
+
+
+0.10.14
+-------
+
+2023-08-14
+
+Hardcode Ctrl+V to paste the copy buffer of the operating system into Lix's
+currently focused text-typing field. You still can't copy text from Lix.
+
+Pre-fill the level author field with your username when you choose
+Create Level in the singleplayer browser.
+
+
+
+0.10.13
+-------
+
+2023-08-08
+
+The tooltip for replaying (click to play) is now at the top of the screen,
+in the top-right corner. Hovering-sensitive toolips are still at the bottom.
+
+Rename Phyu (number of physics updates since the start of play) to Tick
+throughout UI and translations.
+
+Fix reading memory outside of array bounds during the option menu's sound
+previewing. All writes were inbounds, therefore I doubt that this bug has
+ever crashed anybody's Lix.
+
+Fix compilation errors with DMD 2.105.0.
+
+Upgrade the Allegro 5 D bindings to fix compiler warnings from DMD 2.104.0.
+
+Refactor the Walker skill to function without saving and resetting position
+and encounters, and to avoid unnecessary physics map reads. Replay
+verification runs 2 % faster now. All replays in the proof collection appear
+to pass with identical timings as before, that is sufficient proof to me that
+I didn't change physics.
+
+Align the lix' struct to 64-byte boundaries. Replay verification runs another
+1 % faster now.
+
+The physics map stores bytes, not 16-bit integers. Transpose the physics map
+to storing columns, not rows. This appers to neither improve nor worsen
+performance.
+
+Move code for the lix and for the skill hierarchy into src/physics/.
+
+
+
+0.10.12
+-------
+
+2023-06-19
+
+Fix #375: Changing sound/music in the options menu will immediately play an
+example sound or the menu music at the new volume setting. You don't have to
+exit the options menu anymore to test.
+
+Fix #466: When the next level is unplayable, e.g., it lacks hatches, you
+can't run it from the next-level menu. Before, you could, and Lix crashed.
+
+Added four boolean user options: With/without the tweaker, should air clicks
+cancel the replay, and should new assignments insert or cut the replay?
+Without the tweaker, the default remains that both air clicks and new
+assignments cancel the replay. With the tweaker, by default, air clicks do
+nothing and new assignments insert.
+
+During play, the tooltip line is separate from the panel's info bar. Tooltips
+appear over the play area and have a darkened background. I hope that new
+players can now see easily: "Replaying. To play yourself, click into air."
+
+Removed the zoom button from game and editor. Everybody zooms with the mouse
+wheel, and the zoom button would zoom into the mouse cursor on the panel, thus
+oddly fixing a point on the map outside the camera. For now, the game's
+restart button is wider to cover the area of the old zoom button.
+
+Revert mouse trapping to how it was in Lix 0.10.7 and earlier: We trap the
+mouse already on mouseover when the Lix window is active.
+
+Remove the steel tile matt/8x8. This tile had no nub, had no crossed metal
+bars, and looked like geoo's concrete blocks which are earth. Remove it with
+no replacement. We'll look separately at all levels that used it.
+
+Won't Get Fooled Again: Replace important 8x8 steel with a nice-looking tile
+group to make a steel staircase. Physics stay exactly the same.
+
+All Aboard the Pain Train: Remove purely decorative 8x8 steel.
+
+Sympathy for the Lix, Race to the Depths: Remove these multiplayer levels
+with 8x8 steel. Sympathy relied on other players' mistakes. Race was too hard.
+
+Removed an undocumented feature: You could place a file gain.txt into
+music/ to change the volume of tracks.
+
+Fixed compiler warnings from DMD 2.104.0: Change "in ref" to "in".
+
+
+
+0.10.11
+-------
+
+2023-06-04
+
+Offer a user option to choose the splat ruler's snapping distance.
+Set this option to 0 to deactivate snapping altogether.
+
+Make Lix compile again with D compilers older than DMD v2.102.0 from 2023-02.
+In 0.10.10, I silently relied on a compiler bugfix that correctly allows
+indexing associative arrays during @nogc; this needs DMD v2.102.0 or newer.
+
+
+
+0.10.10
+-------
+
+2023-05-27
+
+Fix #452: The search for the next unsolved level works again for when
+the next unsolved level is not the next level. Before, from 0.10.6 through
+0.10.9, the end-of-singleplayer screen showed only the next level.
+
+Fix tooltips: When you hovered over a platformer or builder, the tooltip would
+always instruct you to queue, even if you had, e.g., miner selected in the
+skillbar. Now, the tooltip to queue appears only for the same selected skill.
+
+Tweaker lines have white text when you hover over the corresponding lix.
+
+When you erase an assignment via the tweaker, the tweaker will also erase
+all assignments to the same lix in the same or a future physics update.
+
+Add Kingshadow's Rescue Reduction, a new multiplayer map for 3 through 8
+players that combines Rescue Rangers Double Team with Downward Reduction.
+
+
+
+0.10.9
+------
+
+2023-05-01
+
+Fix radio buttons: It was possible to select multiple radio buttons by
+clicking the squares, not the labels. Now, only one button is ever active.
+
+Add the 6 singleplayer levels from Lemmings Forums's Level Design Contest 27
+by me and geoo in misc/contests/2023/: Bumper Cave, Inside Your Router,
+Pommes Schranke, Rhizome, Hanabi, The Last Shall Be First.
+
+Add Catalan translation of the Lix user interface.
+Thanks for the translation, Rampoina!
+
+Reduced the filesize of the SVG icon data/images/lix_logo.svg from 3.4 MB
+to 30 KB. It looks practically the same. Thanks for re-tracing, Rampoina!
+
+Allow longer description in the level editor's topology menu for wrap options.
+Paint the size warning (level too large can crash 32-bit Lix) in red, possibly
+overlapping the descriptions of the wrap checkboxes when both the description
+and the warning texts are long.
+
+Clarify "Alt+Tab is fast" in the options menu. Now the tooltip says:
+"Switching windows (e.g., with Alt+Tab) works quickly."
+
+
+
+0.10.8
+------
+
+2023-04-15
+
+Don't re-trap the mouse cursor on mere mouseover after the mouse cursor has
+left Lix. To re-trap, you must now click into Lix.
+
+Added one singleplayer level, Cache Lines, in misc/simon/.
+
+Link to the Fedora Lix package by Marcin Zajączkowski on Lix's main readme.
+Thank you for packaging Lix for Fedora!
+
+Switch documentation from HTTP to HTTPS weblinks wherever possible.
+Thanks for the patch, Marcin!
+
+Fixed the new compilation warnings from DMD 2.103.0: Deprecation: alias this
+for classes/interfaces is deprecated. Now, Lix compiles without warnings
+again, even with DMD 2.103.0.
+
+
+
+0.10.7
+------
+
+2023-03-25
+
+Fix #451: In the connection picker of the networking screen, the 3D outlines
+of the buttons for IP address and ports were sometimes mispainted. Now, the
+buttons are drawn correctly.
+
+Radio button options, e.g., for screen mode, show a tooltip per possible choice
+instead of a catch-all tooltip for the entire option.
+
+Don't play music during player name entry on a fresh installation before
+reaching the main menu. Play music only when we enter the main menu.
+The music might be too loud or unexpected, and it's more obvious how to
+exit from the main menu than from the player name entry screen.
+
+Replace "No" with "Cancel" in two dialog boxes: Really delete this level?
+Delete, Cancel. Really overwrite this level? Overwrite, Cancel.
+
+Explain the command-line switches for screen modes in the main readme.
+
+When you run Lix's unittests (`$ dub test`), the tests will scan all installed
+languages in `./data/transl/` and print missing and unnecessary translations.
+to stdout. Such translation issues do not abort or fail the unittests.
+As before, Lix logs during play the missing and unnecessary translation lines
+for your chosen language in the log file `./user/log.txt`.
+
+Use handwritten recoloring code from magic pink to alpha transparency instead
+of the Allegro 5 recoloring function, in hopes of avoiding #431: Magic pink
+won't become transparent on macOS. I doubt that this fixes #431.
+
+
+
+0.10.6
+------
+
+2023-02-04
+
+Fix #453: Added a separate resolution user option (two integers) for hardware
+fullscreen. Now, you can specify a windowed resolution and a hardware
+resolution separately from each other. Before, the same setting applied
+to both windowed mode and hardware fullscreen.
+
+Fix a backroute in Come on Down to My Place, in lemforum.
+
+Fix a backroute in Spin Me Around, in miniatures.
+
+Re-order miniatures for difficulty: Uprank Diodes and The Bottomless Closet.
+
+Added Shed of Presents, a multiplayer map for 2p and 6p.
+
+music/minim-mobius/meadow-sunrise.ogg: Removed wrongly looped initial segment.
+Before, the song started, then restarted after 2 seconds.
+
+Work around a Linux-only bug in Allegro 5.2.8: Software fullscreen failed
+to deduce the desktop resolution. Lix now passes the hardware fullscreen
+resolution user option to Allegro even when entering a software fullscreen.
+Without the bug, Allegro ingores the passed resolution and deduce the desktop
+resolution, but with the bug, you can now achieve the right resolution.
+The user option tooltip still claims that software fullscreen ignores the
+resolution user options because this bug is Linux-only, it's already fixed,
+and the bugfix will ship with the next stable Allegro 5 release.
+
+
+
+0.10.5
+------
+
+2023-01-22
+
+The replay tweaker shows little skill icons instead of the first three letters
+of the assigned skill. This also allowed the tweaker to become narrower.
+
+Whenever you assign one of the following skills with or without directional
+force, the replay will always record a directionally forced assignment:
+Walker, jumper, batter, builder, platformer, basher, miner. Holding
+directional force for these skills is now merely a filter while you hover over
+multiple lix. As before, unless you hold directional force, the replay will
+record unforced assignments of: Permanent abilities, imploder, exploder,
+blocker, digger.
+
+Right-clicking now takes you back to the level browser from the
+end-of-singleplayer screen or from the find-replay-for-level screen.
+
+Redraw matt/underworld/Lava.W.png: The lava's top is now a wobbling surface,
+not a straight line. Physics remain identical.
+
+Lemforum prettiness: Tower of Babel: Corrected lighting on top blocks.
+Added lower layer to central bridge to avoid bridge looking cut off.
+Can't Reach It, Under the Rainbow, The Ring of Fnargl: Add/move stacked lava
+because of the above change to matt/underworld/Lava.W.png.
+
+Removed the spare platformer in One-Way Road to make it easier for Lovely.
+
+Lemforum backroute fixes: Division of Labor: Add extra steel block in the
+central wall, add little triangle at the top of the diagonal shaft.
+Chasm: Add steel in the center. Theresa Falls Up the Stairs: Add second hatch.
+Wait Why is There a Tree: Add a third notch to the top half of the pillar.
+The Last Laugh: Surround the right-hand exit with steel to force solutions
+that use the left-hand exit.
+
+
+
+0.10.4
+------
+
+2023-01-09
+
+Replay insert mode is a new user option. By default, this is off. When it's
+off, assignments during replay cut the replay, then add the assignment, as
+they have always done. If checked, assignments cut only the future of the same
+lix: All assignments to that same lix, and nukes. The replay will keep
+assignments to different lix. You must check this in the options and then it's
+on permanently during play. You can't toggle it during play even though
+that would be useful. Click air to cancel the global future as usual.
+
+The replay tweaker will show nuke actions as "Nuke" in the line. Before, it
+tried to interpret the line as an invalid skill line and showed "Not", the
+first three letters of "Nothing".
+
+Loading a savestate always restores the savestate's replay, unless its past is
+equal to your replay's past and its future is a subset of your replay's
+future. Before, loading a savestate didn't restore the savestate's replay if
+its past was equal to your replay's past, regardless of future, and that made
+it harder to treat the savestating functionality as a stash for one replay.
+
+Radio-button options show a filled circle in the chosen box, not a checkmark.
+
+When you haven't bound a hotkey to one of the functionalities of a two-task
+button such as fast-forward, the button still showed a slash "/" at the start
+or end of its hotkey reminder. Now, the slash only appears when both functions
+have hotkeys.
+
+Fixed backroutes in lemforum: Alien Invasion: Thinner starting platform. All
+Aboard the Pain Train: Reduce steel in the central block. Down Among the Dead
+Lix: Move one platform near the bottom, it still allows my backroute from
+2022-12-22. The Circular Ruins: Lower block below the half-column. 6 Gaps, 5
+Builders: Single builders can't cross two gaps anymore and you must stretch.
+Down Among the Dead Lix: Fix a backroute by moving a lower platform right
+and making it smaller for style. The Hotel in Hell: Expose the top-left
+squisher. Add laser beam to prevent building over that squisher.
+
+Improved lemforum levels: Recycling Plant: Removed a single leaf to reduce
+precision when using the flinging gadget. Put Your Lix on Ice: Final miner
+stops more easily by herself. Climb to Freedom: Added a climbable segment to
+the rightmost climber-turning obstacle to show that climbing is a permanent
+skill. This is a Stickup: Moved steel to reduce precision in initial crowd
+control. Minimalism, 100% Built by Lixes: Removed some of the unused empty
+space. Theresa Falls Up the Stairs: Corrected the lighting of the top-right
+steel. Alien Abduction: Match graphical style of the fixed Alien Invasion.
+
+Reordered lemforum levels: Upranked Ferry Tale and You'll Get Over It from
+Lovely to Quirky. Downranked 6 Gaps, 5 Builders and Time to Change the Road
+from Quirky to Lovely. Reordered several levels within Quirky.
+
+
+
+0.10.3
+------
+
+2022-12-21
+
+Fix #428: Update the next-level cache after solving. Before, there was the
+following bug: Have three unsolved singleplayer levels -- A, B, and C -- in
+this order. Enter A, exit to level browser, solve B, then solve A. Lix would
+then offer B as unsolved, even though you've solved B. Now, the end-of-level
+screen correctly offers B as solved and C as next unsolved level.
+
+The end-of-singleplayer screen, when you choose to play the previous level
+that you've just played, starts that previous level with your replay playing.
+You can view your solution again or fix your attempt. (To avoid the replay,
+interrupt it immediately when it starts playing, or instead start the previous
+level from the singleplayer browser.)
+
+Fix a backroute in mobius's Five for Fighting in lemforum/Vicious.
+
+In lemforum/Lovely: Diamond Dash: Replace imploders and blockers with walkers.
+The Borderland: Raise save requirement from 30/60 to 40/60 to require saving
+lix from both hatches. Reorder Climb to Freedom earlier to avoid two
+successive snow levels. Reorder Beneath the Lab to after Solar Eclipse.
+
+
+
+0.10.2
+------
+
+2022-12-13
+
+Fix #440: Replays load/save handicap. Old replays contain no handicap
+information. Newly created replays will have handicap information and also
+load and play it back correctly.
+
+Fix #386: Allow to scroll to the very right edge even when the replay tweaker
+is open. The bug was: Open the replay tweaker. You were not able to scroll all
+the way to the right side of the map. You had to zoom out to see the entire
+map, or zoom in deeply enough to make the tweaker obscure less of the level.
+This was because the map only anticipated the normal panel on the screen, not
+the tweaker. The map expected to be able to draw all the way to the right edge
+of the screen. Now, even while the tweaker is open, you can scroll such that
+the right end of the map is visible to the left of the tweaker.
+
+Fix how the tweaker was appearing for a single frame on level start. This bug
+has been in Lix for 4 years, but we never realized it because the old tweaker
+didn't re-focus cameras when showing/hiding. Now, the tweaker starts hidden.
+
+Backroute fixes to lemforum levels: Cornerstone, The Last Laugh,
+Tinker Tailor Soldier Lix, Ferry Tale.
+
+Clarify and beautify some more lemforum levels: Compression Method 2, Tapestry,
+To Destroy Is to Construct, Narbacular Drop, The Road Goes Ever On (and both
+of its repeats). Renamed mobius's Conundrum to Get Behind Me, Satan.
+
+Add Everybody Wins, a multiplayer map by geoo for 4 through 8 players.
+
+End-of-level screen says on its bottom button: Back to Level Browser.
+Before, we had: Back to the Browser. That wasn't clear. Not everybody
+considers the browser a browser.
+
+Removed pre-2018 options/trophy format support. If you're updating from Lix
+versions older than 5 years, you'll have to reconfigure your hotkeys.
+
+
+
+0.10.1
+------
+
+2022-11-27
+
+The replay browser shows the filename of the currently selected replay in the
+nameplate below the preview, in addition to the existing fields (level name,
+player, pointed-to level). If the replay filename is too long, e.g., because
+you run Lix in a tall (= non-widescreen) resolution, the nameplate shows only
+the hinder part. This way, you'll see both the frontal part of the filename
+in the file picker on the left-hand side and the hinder part of the filename
+in the nameplate on the right-hand side.
+
+Added button to flip tiles vertically in the editor, in addition to the
+existing button that mirrors horizontally. No hotkey is bound by default
+to the vertical flip. You may assign a hotkey yourself.
+
+Hotkey reminders in button corners appear in lighter text than before,
+but still slightly darker than regular text.
+
+In the options menu, moved some menu hotkey options further right on the
+screen, to not overlap with the menu color pickers' description texts
+on tall (= non-widescreen) resolutions.
+
+In geoo's multiplayer map Ghetto Party, replaced imploders with exploders.
+This is funnier and stays true to the original two-player Ghetto Wars.
+
+Pruned empty space around Segmentation Fault in lemforum/Daunting.
+
+
+
+0.10.0
+------
+
+2022-10-23
+
+The server allows 0.9 and 0.10 in separate rooms. Decide with your friends
+whether and when to update as a group to Lix 0.10.
+
+Both 0.9 and 0.10 players can chat with each other in the server's lobby. The
+0.10 client will see both 0.9 and 0.10 rooms, and print a console error when
+you attempt to join a 0.9 room. Since 0.9 has no such functionality, the
+server will not show 0.10 rooms to 0.9 players at all; instead, the server
+will write a chat message to those 0.9 players in the lobby if any 0.10 rooms
+exist, suggesting to update to 0.10.
+
+Renamed the server executable from server to lixserv.
+
+Added handicap for multiplayer games. If you're too strong for your group,
+consider to click the handicap icon with the unbalanced scales in the game
+room. You can choose fewer initial lix, fewer skills, a spawn delay, fewer
+points per lix saved, or any combination of these four handicap types.
+
+Fix #265: Allow simultaneous exiting. When you're playing a race map and reach
+the exit at the same time as one or more different teams, all teams will score.
+Before, only the red team would score.
+
+Fix #311: Top and bottom of maps are hollow. Terrain checks beyond those edges
+will not behave as if the edge row's terrain extended infinitely. Now, only the
+left and right edges of the level extend terrain in this way, not all four
+edges. Staircases built to the deadly ceiling will kill the builder as before,
+but now all following walkers will also leave the level and die.
+
+Adapted the singleplayer levels Cry for Me, Baywatch, and Walking in a Winter
+Wonderland to work well with the hollow ceiling.
+
+Allow ability assignments (climber, floater, runner) to blockers. For now,
+these assignments have low priority; we can raise the priority after
+playtesting as a UI change without changing physics.
+
+Fix blocker dancing: Now, walkers (and other non-blockers) don't move when
+they're both in a left-forcing blocker field and in a (different blocker's)
+right-forcing blocker field. Before, walkers would move sideways through the
+fields, turning each phyu. This looked like dancing.
+
+Fix #266: Grant batters extra backwards range against blockers. We keep
+forward batter range vs. blockers as in 0.9, even though it's a lot of forward
+range so the batter sprite needn't overlap the blocker to still bat the
+blocker. Nobody has complained so far, and it's nice to bat blockers without
+awkward precision. We keep the batter range against other activities.
+
+Half-fixed #397: The faller's distance in pixels fallen will not overflow
+the 32-bit int anymore. I didn't fix the overflow for physics updates yet, you
+can still play longer than what fits into the 32-bit int that counts physics
+updates (4.5 years at normal speed, or 46 days at turbo-fast-forward).
+
+Moved the frogs' trigger areas downward by 1 pixel, so that the coordinates
+are divisble by 2. No levels broke from this, not even Las Ranas Hermanas.
+
+Fix #410: Removed spike at top of both matt/beach/04 tiles (day and night).
+Before, both tiles had identical masks; now, both tiles still have identical
+masks, although the mask is different than before. There is no odd prong
+at the top right of those tiles anymore.
+
+Fix #414: Fixed transparency/air pixels in earth.png from the Oriental set.
+The top row of pixels was not fully transparent (that would be 0 % alpha);
+it had an estimated 5 % alpha. Lix treats that as solid. Walkers were walking
+over solid, nearly invisible pixels. Now, earth.png has full transparency
+above the earth. No levels broke from this change.
+
+Fixed #322: Don't wrap during tile group construction: Now, when you load a
+tile group on a small torus map, Lix will construct the group without wrongly
+wrapping the group's elements before grouping. Only when Lix has fully
+constructed the group tile, Lix will insert the group into the torus level.
+
+
+
+0.9.48
+------
+
+2022-10-15
+
+Don't cap level search results at 18, but show all results. Downside: Now, I
+expect the search to be slow when you enter the first one-two letters. We'll
+see what is worse and can still improve the search in the future.
+
+Always return to lobby after playing multiplayer with a single tribe, even
+when that tribe hasn't fulfilled the hidden save requirement from
+singleplayer. Lix has never properly supported 1-tribe multiplayer, but Lix
+has never explicitly disallowed it either.
+
+The connection picker in the networking menu will now connect when you press
+the generic Okay hotkey, in addition to the networking menu hotkey.
+
+Fixed option dialog's help text for the username option: All translations
+explained ./data/user/yourname.txt, which is out of use since 2017. Now,
+all translations explain ./user/options.sdl, the correct save file.
+
+Added FreeDesktop resources in ./data/desktop/ by Matthias Mailänder. Thanks!
+I don't know yet where to put such resources (that aren't needed directly by
+Lix while Lix is running) in the future; ./data/ is catch-all for now.
+
+
+0.9.47
+------
+
+2022-08-11
+
+Add Swedish translation of the Lix user interface by Sanchez. Thanks!
+
+Fix #387: Update skill panel on tweak. Now, after shifting a skill assignment
+forward or backward by a single frame in the replay tweaker, the skill panel
+updates all skill buttons' counts accordingly. This matters when some skills
+assignments have become illegal in the now-edited replay.
+
+
+
+0.9.46
+------
+
+2022-06-25
+
+Added geoo's new multiplayer maps, including the two asymmetric maps
+Uphill Battle and Ivory Tower. Updated some of geoo's maps:
+Fixed the drop straight into exit pit in Rescue Ranger Trolls.
+Added block to default version of Ghetto Party. Minor other changes.
+
+Added Kingshadow's new multiplayer levels. Updated Kingshadow's levels, e.g.,
+added a missing trap to Straight & Curved 4p.
+
+Prevent infinite fallers at the sides of Flopsy's Rescue Plan 5p by
+narrowing the map horizontally to the existing terrain.
+
+Renamed my old 2p map Rescue Rangers to Fry-Day to avoid a name collision with
+the popular maps Rescue Ranger Trolls and Rescue Rangers Double Team.
+
+Fix #434: Always topology-wrap newly inserted pieces in the editor to avoid
+running into some strict assertions in a debug build. There should have been
+no bug here in release builds. Improved some assertion texts.
+
+
+
+0.9.45
+------
+
+2022-05-21
+
+Added many multiplayer levels by Flopsy, including Krypton Factor race.
+
+Added multiplayer levels by Kingshadow: Straight & Curved,
+Marble Puzzle League, Spiral Spyfall, The Ascending Lix Scenario,
+Tricky Breakthrough.
+
+Added tags ($TAG lines in levels) to several maps by Flopsy.
+
+Fix lagging client in a 10-hour netgame. This was an esoteric bug that never
+surfaced in normal usage. When the same networking game (not netplay session
+or server run, but really individual game; what happens after you click
+"ready" in the lobby) ran for over 10 hours, the client would stop
+updating at the normal speed of 15 physics updates per second, and instead run
+at 10 frames per second.
+
+Make Lix compile with the newly released DMD 2.100.0.
+
+Mention FreeGameDev IRC channel #lix in the main readme. QuakeNet #lix
+is still the development channel. I still recommend QuakeNet #lix to find
+players, with FreeGameDev #lix as an alternative.
+
+
+
+0.9.44
+------
+
+2022-03-03
+
+Fix a memory-corrupting bug when sending chat messages.
+I introduced this bug in 0.9.43.
+
+Fix #432: Don't resave watched multiplayer replays. The bug was: After the
+replay, we entered the end-of-singleplayer dialog, and this dialog always
+re-saved the watched replay as a new multiplayer replay. Now, we directly
+return to the replay browser. The end-of-singleplayer dialog doesn't appear
+and doesn't save a duplicate.
+
+
+
+0.9.43
+------
+
+2022-03-29
+
+Fix server-side permutation bug: In 0.9.42, the server re-rolled the
+permutation of starting points for every player. This desynched the maps --
+unless you were only playing 2-player on perfectly symmetrical maps and never
+used directional force.
+
+Don't send up to 300 nullbytes on short chat packets, send only the necessary
+bytes. Keep max chat length at 300 UTF-8 code units.
+
+In the lobby, sort the list of players. First criterion: Players sort higher
+than observers. Second criterion: Red sorts higher than orange, yellow, ...
+Third criterion: Within each color, sort by player name. Ready/unready doesn't
+affect sorting. It's easier now to see which/how many colors are in use, but
+I'll leave open github issue #407: Color buttons in lobby, show current usage.
+
+Disable the expensive level-drawing unittest that also didn't clean up
+its file in ./export/.
+
+macOS: Rely on pkg-config according to Allegro's documentation here:
+https://github.com/liballeg/allegro5/blob/master/README_pkgconfig.txt
+Before, on macOS ARM64, ld didn't find the Allegro libs even with pkg-confic
+installed; see github issue #430.
+
+Remove obsolete build documentation ./doc/build/allegro5.txt and
+cross-reference more clearly between other files in ./doc/build/.
+
+
+
+0.9.42
+------
+
+2022-02-25
+
+Don't focus the IP address entry field in the lobby when you select "connect
+to somebody else". The focusing led to a bug that is now fixed: The field
+would even be unhidden and focused whenever the lobby window reappeared after
+a game, when you were already connected and in a room.
+
+Alleviated enet versioning mismatch: derelict-enet offers D bindings only for
+enet 1.3.15, but the binaries of enet 1.3.16 or the current enet 1.3.17 have
+differently-sized struct ENetPeer. Now, the Lix server computes the struct
+size at runtime, allowing to run with all enet binaries >= 1.3.13.
+
+Fixed a theoretically possible, although unlikely, memory leak in networking.
+
+Fixed a linker warning about max!(int, int). Now, Lix's code itself generates
+zero warnings again.
+
+Refactored the server-side networking code. Rooms carry their own logic. This
+will help in the future to support version restrictions per room.
+
+Fixed DMD 64-bit build on all operating systems by avoiding obscure usercode
+that crashes DMD.
+
+Linux build notes: Added workaround for LDC running out of stack space. You
+can raise the stack size in the current shell with: ulimit -s 16384
+
+Windows 32-bit build notes: Added DLL download for LDC-compatible 32-bit
+libraries.
+
+Removed note from April 2020 in the readme about compilers before LDC 1.21;
+compilers that old aren't prevalent anymore.
+
+
+
+0.9.41
+------
+
+2022-01-06
+
+Support tags in level files to help organize the multiplayer levels. Levels
+can contain zero or more tags, one per line. Edit tags with a text editor; we
+can work towards better editing support in Lix itself in the future. Example:
+$TAG mytag
+
+The editor loads and saves tags, but doesn't yet display them anywhere and
+doesn't offer to edit them. The level browsers don't print tags anywhere
+either yet.
+
+The level search (in the singleplayer or multiplayer browser) will find
+tags, but you have to enter the exact tag completely. Half-words that
+appear inside tags do not find that tag. (I'm not yet sure if this behavior
+is best; we can change it.)
+
+
+
+0.9.40
+------
+
+2021-12-13
+
+Added configurable hotkeys to play next levels from the end-of-singleplayer
+screen. Default is F1 to replay the same level, Space to play the next level,
+F to play the next unsolved level. There is no default hotkey to save the
+replay manually; you can configure it.
+
+Hotkey reminders on buttons are printed in slightly darker text. They're
+still brighter than the button itself, but darker than the main button text.
+
+Fix #417: The editor shows all teams per gadget. Example: 4 players A, B, C, D
+and the map has 2 exits. Before 0.9.40, the editor printed on the exits: A, B.
+Now, the editor print on the exits the outcome of distributing the 4 players
+round-robin to the exits: AC, BD.
+
+Clarify tile group names in the documentation doc/formats/level.txt: Groups
+can have any name, not necessarily only a number. Since I don't have support
+in the program for copying tile groups between levels, you can at least rename
+the groups in one level, e.g, by search-and-replace, then copy-paste them into
+the second level, and have no name clashes.
+
+Fixed exits order in Tunnel of Love 6p. There were 7 exits in a 6-player map,
+leading to apparent removal of a necessary exit in play. Now it has 6 exits.
+
+Added new multiplayer maps by Flopsy: The Lix and the Saboteurs 4p, 6p, 8p.
+
+Clarify documentation on tile groups in doc/format/level.txt: Tile groups
+can have any names. When you copy tile groups by hand between levels, you
+can first rename them with text replacement.
+
+Allow warnings when building Lix. This circumvents a warning in Phobos that
+would otherwise abort the build: Duplicate symbol for max!(int, int).max,
+_D3std9algorithm10comparison__T3maxTiTiZQjFNaNbNiNfiiZi.
+
+
+
+0.9.39
+------
+
+2021-10-12
+
+Added a dedicated end-of-singleplayer screen to show stats of the finished
+attempt, to offer the immediate next level, and to offer the next unsolved
+level in case the player has already solved the immediate next level.
+
+Darkened the labels "by" and "Goal:" in front of level nameplates in
+the browser and in the end-of-level screen. They're now darker than the
+normal text color. Title, author and goal stand out better in their normal
+text color now.
+
+Re-added 3 levels -- Fill the Floor, Interval Training, Chaos Theory --
+to single/clam/Outtakes. Fill the Floor and Interval Training originally
+needed variable spawn intervals during play; now, they employ floaters and
+runners at fixed spawn intervals. Chaos Theory originally needed the nuke
+to solve; now, it employs manually assigned exploders to fling.
+
+Updated the Lix source code to comply with the future meaning of the "in"
+keyword. Updated Lix for package optional 1.3.0 instead of 0.6.3.
+
+
+
+0.9.38
+------
+
+2021-06-27
+
+Windowed mode at 1280x720 is now the default on running Lix for the very first
+time. Before, the default was software fullscreen a.k.a. fullscreen window.
+
+Smaller widescreen resolutions such at 1280x720 that would barely fail to pick
+2x for the skill panel icons (instead of the tiny 1x) will get slightly higher
+panel to accomodate the better-looking 2x skill icons.
+
+Adjusted text vertical offset to vertically center text on buttons better at
+1280x720. 1280x800 is still okay, text is now slightly too high here. The text
+positioning is already full of hacks and compromises, anything better either
+needs more hacks or a clean do-over. I feel like a 90's website designer.
+
+The main menu preserves the background's aspect ratio. To fill a screen that
+is not 4:3, it crops the background's sides.
+
+Revenge of the Giant Crab (2p): Added decoration, walkers 10->30, overtime
+30->90 seconds.
+
+Fix #424: Always show the level title in the lobby under the graphical preview,
+even when we return from a netgame.
+
+Fix #423: De-duplicate the multiplayer level tree, as reported by Dullstar.
+I had extra copies of Along the Fabrics of Your Clothing in the 8p directory.
+
+Updated Allegro DLLs to Allegro 5.2.7.1. You can check what Lix uses at
+runtime with Lix's command-line argument: --allgero-version
+
+I build the 32-bit Windows release with LDC, not with DMD. LDC generates
+faster-running machine code, exactly what we want for a release version. Tell
+me in case you run into any problems. (64-bit Windows release has always been
+built with LDC and it still is.)
+
+During compilation, Lix prints target architecture, OS, and compiler.
+
+Fix deprecations for DMD 2.097.0: In the source code, the "body" keyword is
+finally deprecated. Converted the entire codebase to the "do" keyword in front
+of function bodies. Added "static import std.stdio;" to access std.stdio.File
+in Lix's file.filename.base.
+
+Documentation: src/icon/readme.txt has CRLF line endings, to be readable in
+Windows Notepad. (Documentation should have CRLF endings, code should have LF
+endings.) Removed note in the 32-bit DMD Windows build notes about NuGet libs,
+DMD 32-bit doesn't play well with them.
+
+The build documentation points to new archives (lix-dlls-libs-dmd32.zip,
+lix-dlls-libs-ldc32.zip, lix-dlls-libs-win64.zip) because the .lib files
+can be incompatible between compilers.
+
+
+
+0.9.37
+------
+
+2021-05-17
+
+Added new maps from the multiplayer level contest. Thanks,
+Dominator_101, Dullstar, Flopsy, geoo, IchoTolot, WillLem!
+Includes Dominator_101's Rescue Rangers Double Team.
+
+Fixed flickering mouse cursor in the dialog that aborts a networking game.
+Before, when you hovered over a lix in the background of the dialog, the
+cursor would osciallte between open and closed. Now, the cursor stays closed
+because you can't assign to lix during the dialog.
+
+Partly address #234: When you resize the map in the editor, the editor will
+zoom out as far as it can to show you the entire map. It's still disorienting
+to resize maps with large empty areas.
+
+Fix: When you verified a directory containing 0 replays in the GUI verifier,
+the GUI verifier didn't print the line that you can now click to exit. Now
+it prints that line.
+
+In the main menu, below the version number, print name of operating system and
+32/64-bit for which the running version is built.
+
+The debugging build's user options defaults show the phyus/FPS. This only
+matters when you run a debugging build without a user option file
+user/options.sdl. The normal release build defaults to not showing phyus/FPS
+until you enable it in the options menu.
+
+In dub.json, removed obsolete architecture restriction for Windows builds
+with LDC.
+
+The Windows 64-bit build notes point to LDC's multilib release instead of to
+the pure 64-bit release. You can use LDC's installer or LDC's 7z download. The
+main difference is that LDC's lib/ dir is now called lib64/. Updated
+https://www.lixgame.com/dow/lix-dlls-libs-win64.zip with the new directory name
+lib64/ instead of lib/.
+
+Documented the level format in doc/formats/level.txt. Documented in the
+Windows build notes doc/build/win*.txt where to get Allegro binaries from
+NuGet.
+
+
+
+0.9.36
+------
+
+2021-02-24
+
+Add a whopping 66 multiplayer maps by Flopsy, including Perfect Situation.
+
+Fix #413: The new-level button in the editor will now ask for data loss
+before clearing the map and clearing the undo buffer. You can click Save,
+Discard, or Cancel.
+
+Reword the grid tooltip in the editor to clarify that it will affect future
+moves; it will have no immediate effect on the current selection.
+Before: "Grid 2: Rounds tiles' coordinates to multiples of 2."
+Now: "Grid 2: Tiles will move in steps of 2 pixels."
+Thanks to WillLem for feedback and wording.
+
+Support a hidden option (not in the options menu) that allows you to suppress
+the editor's offset of copypasted tiles; this is (16,16) by default.
+(Hidden options are hacks; for the long term, I need to visualize the copying
+in place.) For now, to suppress the offset, put in your user/options.sdl:
+editorCopiedTilesOffset 0
+
+Mouse speed on Linux defaults to 10, not 20. This produces better results
+on my machine when (fast movement frees mouse) is off, the default on Linux.
+I haven't examined the speed on other systems yet.
+
+Update the build docs in doc/build/ about minimum compiler versions.
+
+In the doc/formats/ directory, document replay pointing, terrain lines in
+levels, groups in levels.
+
+
+
+0.9.35
+------
+
+2020-12-24
+
+Undo/redo feature: The editor allows full undo and redo. Everything that is
+visible in the editor's level display is undoable: Tile moves, z-reorderings,
+additions, deletions, copying, rotations, mirroring, darkening, and changing
+the level's height, width, wrappings, and background color. Pressing the
+button to create a new level clears the undo history. Changing the level's
+name, lix, save requirement, player count, or skillset isn't undoable, but
+doesn't clear the undo history either; you can still undo earlier things.
+This undo/redo feature has been in development for 7 months.
+
+Fix #406: The camera rounds correctly to determine the mouse coordinates
+in the level. Before, with deep zoom, the mouse seemed to select things
+1 pixel too far right and 1 pixel too far down.
+
+Fix #405: The editor reinitializes its camera when the level's torus wrapping
+changes. This prevents graphical leftovers.
+
+Fixed compilation errors that appeared with DMD 2.094.2.
+
+Added build notes for a 64-bit Windows build with DMD. I encourage to use LDC
+instead of DMD for release builds, but it's good to have more options.
+
+
+
+0.9.34
+------
+
+2020-10-11
+
+lemforum: Backroute fixes for 6 levels, mainly due to Wibble's backroutes:
+Bipolar Maniac, initial lix 10->11, floaters 5->6.
+Las Ranas Hermanas, raise frogs.
+Triangle Inequality, eliminiate trivializing backroute.
+One Lix Showdown, likely functional but slightly unelegant fix.
+Some Like to Run, faster spawn interval, needs checking.
+Skulls, Sludge and Steel - possible fix, needs checking.
+(No fixes yet for Duality and Dream the impossible Dream.)
+
+Fix #404: The 64-bit Windows enet.dll crashed on hosting a networking game.
+Now, I ship a new 64-bit enet.dll, version 1.3.12, that fixes the crash
+on Windows, even though it still crashes in Wine.
+
+Support 32-bit Windows again: I publish 32-bit Windows binaries in the github
+releases and added linker flags for the 32-bit Windows DMD build in dub.json.
+
+Updated D source libraries in dub.json: derelict-enet 4.1.0 -> 4.2.0,
+taggedalgebraic 0.11.12 -> 0.11.18. This should have no visible effects.
+
+Credit minim in doc/thanks.txt for upscaling the GUI icons to 150%, 200%, 300%
+of the C++ Lix icons for 640x480 = 100%. minim worked on these icons in 2016.
+
+Remove doc/oldwish.txt, it has become outdated. The text is preserved at:
+https://www.lemmingsforums.net/index.php?topic=5132.0
+Let's file issues on github instead.
+
+
+
+0.9.33
+------
+
+2020-08-09
+
+Fix #402: With more than 18 assignments, the tweaker doesn't mispaint the
+line for current physics update over the tape recorder buttons anymore.
+
+Fix #401: The tweaker erases the lines properly when two assignments change
+order from tweaking. This fixes a mispainting of assignment lines.
+
+Fix #385: Before, with 18 or more assignments, the completely filled tweaker
+always hid the assignments that came last in the replay. Now, the tweaker
+hides assignments that are far away from the current physics update. Now, to
+view early assignments, rewind the game. To see late assignments, forward the
+game.
+
+
+
+0.9.32
+------
+
+2020-08-01
+
+Distribution: Lix has an openSUSE package for easy installation on openSUSE
+Linux, thanks to Martin H.! This is our third Linux packaging after Debian and
+Arch. Updated Lix's readme and documentation.
+
+Added Raymanni's crab trap at images/raymanni/crab.T.txt. There is an example
+level, Crab Nightmare, in levels/misc/simon/crabnightmare.txt.
+
+Added Thirteen Little Skills (version 2), a level contest entry by Proxima.
+
+Every Lix for Herself (lemforum Lovely): Quicken the spawn interval, to
+make it nicer to assign floaters to lix from the leftmost hatch.
+
+Multiplayer: Pressing twice the end-game key (Esc by default) doesn't
+exit the match, but rather opens and cancels the exit-match dialog.
+This avoids accidental exiting. To exit the match via keyboard,
+press Esc, then the key to delete files/lose data.
+
+Replay tweaker: Add an extra line for the currently-shown physics update.
+
+Remove the unnecessary translatable string optionShowButtonHotkeys. Button
+hotkeys are always shown, there is no option to disable that; this option was
+removed in Lix 0.9.30. This removes the leftover language field, so that
+data/language/*.txt doesn't warn on loading a language.
+
+Code: Fix deprecations according to DMD 2.093: Annotate ref-returning
+functions with return
+
+
+
+0.9.31
+------
+
+2020-04-23
+
+Compiling yourself: On Windows, Lix requires LDC 1.21.0, LDC or newer to
+compile out of the box. For LDC 1.20.1 or older, in Lix's dub.json file, you
+must first change all appearances of "-entry:wmainCRTStartup"
+with "-entry:mainCRTStartup".
+See doc/build/win64.txt, section "Old LDC versions" for details.
+
+Compiling yourself: Increased version of dependency sdlang-d: 0.10.4 -> 0.10.6,
+so that Lix still compiles with older versions of DMD, with the current stable
+DMD 2.091.0, and with even newer versions.
+
+Fix #394: The editor now sorts tilesets alphabetically by the shown directory,
+which is its second-level-nested directory in images/.
+Old order: forest/, occult/, abstract/, construction/, ..., because forest and
+occult were in images/amanda/ and abstract, construction were in images/geoo/.
+New order: abstract/, beach/, bricks/, carnival/, construction/, ..., forest/,
+..., occult/, ..., irrespective of the unshown author's name.
+
+Fixed a backroute in Ifo Island. The building at the bottom takes longer now.
+
+
+
+0.9.30
+------
+
+2019-12-28
+
+Fix #339: Imploder animation: Now, purple stars and vortexes circle around the
+center, then get sucked into the center. The old animation was too slow
+and subtle.
+
+Fix #388: Oblivion sound was too noisy and high-pitched. Replaced this
+sound effect with meow-like voice acting that is not shrill.
+
+lemforum: ccexplore fixed a backroute in Brickout.
+
+Always print hotkeys on buttons' lower-right corner. Removed user option that
+toggled whether hotkeys would be printed on buttons.
+
+Code: Remove body encounters from physics implementation; these happened at
+(foot - 4), (foot - 8), (foot - 12). Always check foot encounters instead.
+Before, only fire hazards checked for body encounters. Draw larger trigger
+area (in the editor) for fire to compensate. No changes to file formats. No
+changes to physics.
+
+Multiplayer maps: Added Down with Frogs by Flopsy.
+Added remake of Humps (2-player map from 2010) using Lix's earth terrain.
+Removed endless falls at the side of Honeypots.
+
+
+
+0.9.29
+------
+
+2019-07-18
+
+Observers in a networking game begin zoomed out; they see the entire map
+without any extra input.
+
+In multiplayer, there are no more black boxes on the score graph after a nuke.
+The black boxes obscured the bars of low-scoring players. The black boxes were
+a hack solution before we had the nice score board when you mouse over the
+score graph. Now, to see who nuked, mouse over the score graph.
+
+Partially fix #385: The replay tweaker displays only the first 18 plies
+(= assignments or nukes) instead of painting the 19th, 20th, ... ply over the
+remainder of the panel. In the long run, the tweaker needs a scrollbar.
+
+The tweaker explains itself with short text while it has no plies to show yet.
+This is better than presenting the tweaker as a completely blank GUI widget.
+
+Fix #327: After you save a replay manually from the replay browser, the browser
+reloads the directory and immediately shows the newly saved file.
+
+Fix: The splat ruler draws properly again when the mouse is on the map (i.e.,
+off the panel). 0.9.28 had a bug where the ruler would only draw while the
+mouse was on the panel instead of on the land.
+
+Fix: In multiplayer battles, you can zoom again, even though there is no
+GUI button to zoom. By default, zoom is bound to the mouse wheel.
+
+Fix #317: In a deeply nested directory hierarchy, the browsers' breadcrumb
+navigation condenses some higher-level directories into a single button.
+The top-level directory keeps its exclusive button at the very left.
+
+Removed a default keybinding duplication: Highlight goals and splat ruler were
+both bound to Tab. Now, only the splat ruler is bound to Tab, highlight goals
+has no default hotkey.
+
+
+
+0.9.28
+------
+
+2019-07-07
+
+Replay tweaker: A new feature for singleplayer puzzle solving. To open the
+replay tweaker, click the filmstrip button in the panel. The tweaker allows
+you to move and delete assignments deep in the replay without erasing
+any other assignments. The tweaker is not perfect yet: I'm sure we'll find
+many ways to improve it.
+
+Added 22 singleplayer levels from various level design contests. They are in
+levels/single/misc/contests/. All levels are proven solvable. Some proofs may
+be backroutes. For Key to the Sacred Kingdom, I chose its version 9, the
+miniature, but extended it with decoration from its big version 7. Adapted
+Long Division to 0.9 physics, it's fairer now and less nasty.
+
+Fix #364: If the enet DLL is missing, the networking lobby prints an error
+message to its console. Before, the game would crash from an uncaught
+exception.
+
+Code: Fix deprecations for dmd 2.087.0: Don't initialize immutable variables
+in thread-local static this(), instead initialize them in shared static this().
+Lix should now compile warning-free.
+
+
+
+0.9.27
+------
+
+2019-05-20
+
+Fixed a backroute in The Bottomless Closet, a miniature by geoo.
+
+Fix #379: The editor avoids cloning tiles outside of the map. Usually, the
+editor moves freshly-cloned tiles down-right by (16, 16). Sometimes, this
+would move tiles out of the map. New behavior: If a cloned tile would move out
+of the map, or even very close to the edge (= undercutting a safety margin of
+16 pixels), all cloned tiles are moved up-left by (16, 16) instead. If neither
+offset keeps all tiles on the map, we move down-right by (16, 16) and accept
+that some are outside. In torus directions, tiles are always on the map within
+the safety margin.
+
+Fix #380: While you change the background color in the editor's map dialog,
+the level behind the dialog previews your chosen color in real time. When
+you press OK, the color stays; when you press Cancel, the color reverts.
+
+Code: Fixed deprecations, now Lix compiles warning-free on dmd 2.086.0.
+
+Code: Removed module constructors and moved construction of user options
+into al_run_main. We hope to troubleshoot a segfault on macOS with this,
+github issue #381. Renamed DisplayTryMode to ScreenChoice.
+
+
+
+0.9.26
+------
+
+2019-04-24
+
+Added 24 singleplayer levels in misc/lemforum-outtakes. These levels were
+once part of out flagship pack lemforum, but have been taken out over time.
+They're all proven solvable with 0.9 physics.
+
+Fixed #301: Separated the ping-exit functionality from show-splat-ruler.
+In multiplayer, there are now two buttons. Both have much clearer icons
+(an exit with beams, a ruler) instead of the generic cool shades.
+
+Fixed #293: Savestate icon, don't use floppy disk (means: write file).
+Now, the icon to save state is a flag, and the icon to load state is
+a flag with an arrow pointing towards it. Once a savestate exists,
+the load icon (default hotkey F2) is to the left of the save icon
+(default hotkey F3), to have their default hotkeys (F2, F3) in ascending
+order. (Before, load appeared to the right of save).
+
+Renamed the level folder "Community Collab Project" to "Collab"
+for concise breadcrumb navigation captions, preventing abbreviation.
+
+Attributed correct authors (Rubix/Simon, Simon/Wuzzy) on two tutorials.
+
+Rewrote screen options functions, to rule out a possible source of a crash
+on macOS (no more try-return-catch, always return outside of try/catch).
+See issue #381: macOS 10.14: Black screen then crash.
+
+Rewrote internal graphics code to get already-cached images more efficiently.
+
+
+
+0.9.25
+------
+
+2019-02-04
+
+Added 44 singleplayer levels in levels/single/misc: 17 miniatures by Simon and
+geoo, 13 levels by mobius (originally called leftovers and non-tutorials), 10
+levels by Nessy, 4 non-miniatures by Simon. These levels were released around
+2017 and 2018 on Lemmings Forums and are now part of the main download.
+
+Added 15 tutorials for basic skill usage. A new Lix installation will still
+highlight Any Way You Want as first level, not the tutorials.
+
+Eased the 2-player multiplayer map Anything Can Work: Removed buzzsaws, added
+terrain to allow a downwards route without preparatory platforming above exits.
+
+Fixed deprecations (silent conversion from size_t to int in loop indices)
+to allow a warning-free building with the current compiler DMD 2.084.
+
+Refactored code for clarity: Alcol constructors -> al_map_rgba_f, magic
+numbers in EffectManager -> enums. Split ScoreBoard into two classes and
+moved to the GUI code, to decouple from gameplay.
+
+
+
0.9.24
------
@@ -734,7 +2119,7 @@ remaining players started a game. Still needs field testing.
2017-11-18
-Music: Download http://www.lixgame.com/dow/lix-music.zip and extract
+Music: Download https://www.lixgame.com/dow/lix-music.zip and extract
into your Lix root dir. You can create additional subfolders in ./music/
and put your own tracks inside -- ideally as .ogg, .mod, .xm, .it, or .s3m.
Lix will play a random track per level.
@@ -1037,7 +2422,7 @@ Right", which is almost too long but still fits well.
Removed lemforum/wip-0.7/ and images/geoo/construction/chain1.png, the
now-obsolete tile because its size doesn't conform to multiples of 8.
-[url=http://www.lixgame.com/etc/unused-levels-0.7.zip]Download unused levels
+[url=https://www.lixgame.com/etc/unused-levels-0.7.zip]Download unused levels
and chain1[/url].
Removed simon/wood/ tileset. I've replaced these tiles with Matt's wooden
@@ -1553,7 +2938,7 @@ fitting the level's width or height to screen.
2017-03-02
Fewer zooms are considered similar. This addresses Nepster's concerns:
-http://www.lemmingsforums.net/index.php?topic=3128.msg63116#msg63116
+https://www.lemmingsforums.net/index.php?topic=3128.msg63116#msg63116
Fix #169: I validate all user files for good UTF-8 before calling Phobos.
@@ -2138,7 +3523,7 @@ to mouse clicks on the checkbox itself.
Physics change: We don't check for physics near the eye, which would have
depended on the spritesheet. Instead we check at (foot) + (0, y), where
y is 0, -4, -8, and -12. This check is independent from the current lix job.
-Rationale: http://www.lemmingsforums.net/index.php?topic=2678
+Rationale: https://www.lemmingsforums.net/index.php?topic=2678
0.2.49
------
diff --git a/.SRCINFO b/.SRCINFO
index 23d181f452ad..22f37eb01a02 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,38 +1,32 @@
pkgbase = lix
pkgdesc = An action-puzzle game inspired by Lemmings
- pkgver = 0.9.24
+ pkgver = 0.10.19
pkgrel = 1
- url = http://www.lixgame.com/
+ url = https://www.lixgame.com/
changelog = .CHANGELOG
arch = i686
arch = x86_64
license = custom:CC0
makedepends = git
- makedepends = ldc
+ makedepends = d-compiler
makedepends = dub
depends = allegro
depends = enet
depends = hicolor-icon-theme
- depends = liblphobos
- source = lix::git+https://github.com/SimonN/LixD.git#tag=v0.9.24
- source = lix-music-1.zip::http://www.lixgame.com/dow/lix-music.zip
- source = lix.desktop
- source = allegro::git+https://github.com/SiegeLord/DAllegro5.git#tag=v4.0.4+5.2.0
- source = bolts::git+https://github.com/aliak00/bolts.git#tag=v0.7.1
- source = derelict-enet::git+https://github.com/DerelictOrg/DerelictENet.git#tag=v4.1.0
- source = derelict-util::git+https://github.com/DerelictOrg/DerelictUtil.git#tag=v3.0.0-beta.2
- source = enumap::git+https://github.com/rcorre/enumap.git#tag=v0.4.2
- source = libinputvisitor::git+https://github.com/Abscissa/libInputVisitor.git#tag=v1.2.2
- source = optional::git+https://github.com/aliak00/optional.git#tag=v0.6.3
- source = sdlang-d::git+https://github.com/Abscissa/SDLang-D.git#tag=v0.10.4
- source = silly::git+https://github.com/ohdatboi/silly.git#tag=v0.8.0
- source = taggedalgebraic::git+https://github.com/s-ludwig/taggedalgebraic.git#tag=v0.10.12
- source = unit-threaded::git+https://github.com/atilaneves/unit-threaded.git#tag=v0.7.52
- sha512sums = SKIP
- sha512sums = 37349c98b739ea43c25137dd03865f1c9c41eec91e5edc109afd9d50ce3871bd0c7f63c3f3599a47bb4ef52f5bfd14e034010de0ac2aec5a9c0c83eaf0b89425
- sha512sums = 375b1439d9398371a3f58a92bfc0901b86bd89140aae431c7d9405bd2fb36ebcdb22b2686fea72d88b23a4ab94b138b4d742d8fd2965d8ec0542d2f8f64ed0c2
- sha512sums = SKIP
- sha512sums = SKIP
+ depends = d-runtime
+ source = lix-0.10.19.src.tar.gz::https://github.com/SimonN/LixD/archive/v0.10.19.tar.gz
+ source = lix-music-1.1.zip::https://www.lixgame.com/dow/lix-music.zip
+ source = lix-allegro::git+https://github.com/SiegeLord/DAllegro5.git#tag=v4.0.6+5.2.0
+ source = lix-bolts::git+https://github.com/aliak00/bolts.git#tag=v1.3.1
+ source = lix-derelict-enet::git+https://github.com/DerelictOrg/DerelictENet.git#tag=v4.2.0
+ source = lix-derelict-util::git+https://github.com/DerelictOrg/DerelictUtil.git#tag=v3.0.0-beta.2
+ source = lix-enumap::git+https://github.com/rcorre/enumap.git#tag=v0.4.2
+ source = lix-optional::git+https://github.com/aliak00/optional.git#tag=v1.3.0
+ source = lix-sdlang-d::git+https://github.com/Abscissa/SDLang-D.git#tag=v0.10.6
+ source = lix-taggedalgebraic::git+https://github.com/s-ludwig/taggedalgebraic.git#tag=v0.11.22
+ source = lix-unit-threaded::git+https://github.com/atilaneves/unit-threaded.git#tag=v0.7.55
+ sha512sums = 9be21c7ff96bd1a3c3d623a8e83fbfed156b239387bdc8c55e47b1b7004d9cbb053ff652ec241b1721fe899dd3da21befde2da459ca41c98d8106b66bef1c365
+ sha512sums = 280fd25a479ac8dd24475b014234270a12ab34edca7fb2f7ce4b768259111b1e7626d3ba37ac13d810f0653d23d7c9f212776e94d2c0b31a0de580864771ce9f
sha512sums = SKIP
sha512sums = SKIP
sha512sums = SKIP
@@ -44,4 +38,3 @@ pkgbase = lix
sha512sums = SKIP
pkgname = lix
-
diff --git a/PKGBUILD b/PKGBUILD
index 12cbc3c1fc0b..3b549a5829dd 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,54 +1,51 @@
# Maintainer: Lucki <https://aur.archlinux.org/account/Lucki>
# Contributor: Carl Reinke <mindless2112 gmail com>
+# shellcheck shell=bash
+# shellcheck disable=SC2034,SC2154
+
+# TODO: Warning Package at path '/build/lix/src/lix-unit-threaded/' should be under '/build/lix/src/lix-unit-threaded/$VERSION/lix-unit-threaded'
+# Warning The package will no longer be detected starting from v1.42.0
pkgname=lix
-pkgver=0.9.24
+pkgver=0.10.19
pkgrel=1
changelog=.CHANGELOG
-source=("${pkgname}::git+https://github.com/SimonN/LixD.git#tag=v${pkgver}")
-sha512sums=('SKIP')
+source=("$pkgname-$pkgver.src.tar.gz::https://github.com/SimonN/LixD/archive/v$pkgver.tar.gz"
+ "$pkgname-music-1.1.zip::https://www.lixgame.com/dow/lix-music.zip")
+sha512sums=('9be21c7ff96bd1a3c3d623a8e83fbfed156b239387bdc8c55e47b1b7004d9cbb053ff652ec241b1721fe899dd3da21befde2da459ca41c98d8106b66bef1c365'
+ '280fd25a479ac8dd24475b014234270a12ab34edca7fb2f7ce4b768259111b1e7626d3ba37ac13d810f0653d23d7c9f212776e94d2c0b31a0de580864771ce9f')
-_pkgname=${pkgname}
-# template start; name=lix; version=1.4;
+_gitname=LixD
pkgdesc="An action-puzzle game inspired by Lemmings"
arch=('i686' 'x86_64')
-url="http://www.lixgame.com/"
+url="https://www.lixgame.com/"
license=('custom:CC0')
-depends=('allegro' 'enet' 'hicolor-icon-theme' 'liblphobos')
-makedepends=('git' 'ldc' 'dub')
-_dubv=( "4.0.4+5.2.0" # allegro
- "0.7.1" # bolts
- "4.1.0" # derelict-enet
+depends=('allegro' 'enet' 'hicolor-icon-theme' 'd-runtime')
+makedepends=('git' 'd-compiler' 'dub')
+_dubv=( "4.0.6+5.2.0" # allegro
+ "1.3.1" # bolts
+ "4.2.0" # derelict-enet
"3.0.0-beta.2" # derelict-util
"0.4.2" # enumap
- "1.2.2" # libinputvisitor
- "0.6.3" # optional
- "0.10.4" # sdlang-d
- "0.8.0" # silly
- "0.10.12" # taggedalgebraic
- "0.7.52" # unit-threaded
+ "1.3.0" # optional
+ "0.10.6" # sdlang-d
+ "0.11.22" # taggedalgebraic
+ "0.7.55" # unit-threaded
)
-
# let makepkg handle dub packages
-# https://wiki.archlinux.org/index.php/VCS_package_guidelines#Git_Submodules
-source+=( "${_pkgname}-music-1.zip::http://www.lixgame.com/dow/lix-music.zip"
- "${_pkgname}.desktop"
- )
-sha512sums+=( '37349c98b739ea43c25137dd03865f1c9c41eec91e5edc109afd9d50ce3871bd0c7f63c3f3599a47bb4ef52f5bfd14e034010de0ac2aec5a9c0c83eaf0b89425'
- '375b1439d9398371a3f58a92bfc0901b86bd89140aae431c7d9405bd2fb36ebcdb22b2686fea72d88b23a4ab94b138b4d742d8fd2965d8ec0542d2f8f64ed0c2'
- )
-source+=( "allegro::git+https://github.com/SiegeLord/DAllegro5.git#tag=v${_dubv[0]}"
- "bolts::git+https://github.com/aliak00/bolts.git#tag=v${_dubv[1]}"
- "derelict-enet::git+https://github.com/DerelictOrg/DerelictENet.git#tag=v${_dubv[2]}"
- "derelict-util::git+https://github.com/DerelictOrg/DerelictUtil.git#tag=v${_dubv[3]}"
- "enumap::git+https://github.com/rcorre/enumap.git#tag=v${_dubv[4]}"
- "libinputvisitor::git+https://github.com/Abscissa/libInputVisitor.git#tag=v${_dubv[5]}"
- "optional::git+https://github.com/aliak00/optional.git#tag=v${_dubv[6]}"
- "sdlang-d::git+https://github.com/Abscissa/SDLang-D.git#tag=v${_dubv[7]}"
- "silly::git+https://github.com/ohdatboi/silly.git#tag=v${_dubv[8]}"
- "taggedalgebraic::git+https://github.com/s-ludwig/taggedalgebraic.git#tag=v${_dubv[9]}"
- "unit-threaded::git+https://github.com/atilaneves/unit-threaded.git#tag=v${_dubv[10]}"
+# These have to be git clones, otherwise dub isn't able to pick them up with the correct version later on
+# no git, no version field, assumed ~master
+# https://dub.pm/commandline.html#add-path
+source+=( "$pkgname-allegro::git+https://github.com/SiegeLord/DAllegro5.git#tag=v${_dubv[0]}"
+ "$pkgname-bolts::git+https://github.com/aliak00/bolts.git#tag=v${_dubv[1]}"
+ "$pkgname-derelict-enet::git+https://github.com/DerelictOrg/DerelictENet.git#tag=v${_dubv[2]}"
+ "$pkgname-derelict-util::git+https://github.com/DerelictOrg/DerelictUtil.git#tag=v${_dubv[3]}"
+ "$pkgname-enumap::git+https://github.com/rcorre/enumap.git#tag=v${_dubv[4]}"
+ "$pkgname-optional::git+https://github.com/aliak00/optional.git#tag=v${_dubv[5]}"
+ "$pkgname-sdlang-d::git+https://github.com/Abscissa/SDLang-D.git#tag=v${_dubv[6]}"
+ "$pkgname-taggedalgebraic::git+https://github.com/s-ludwig/taggedalgebraic.git#tag=v${_dubv[7]}"
+ "$pkgname-unit-threaded::git+https://github.com/atilaneves/unit-threaded.git#tag=v${_dubv[8]}"
)
sha512sums+=( 'SKIP'
'SKIP'
@@ -59,107 +56,110 @@ sha512sums+=( 'SKIP'
'SKIP'
'SKIP'
'SKIP'
- 'SKIP'
- 'SKIP'
- )
+ )
-_build()
-{
- cd "${srcdir}/${_pkgname}" || exit
+_build() {
_r=0
- # add local dependencies to search path
- dub add-path "${srcdir}"
+ # 2022.02.26
+ # 15:22 <@SimonN> It's possible that it's already enough to raise the stack size in the current shell: ulimit -s 16384
+ # 15:22 <@SimonN> See also: https://github.com/ldc-developers/ldc/issues/3913
+ # 15:26 <@SimonN> Yes, very high chance that the following will fix/workaround: Execute "ulimit -s 16384" in the same shell that will then run dub. I.e., we double the stack size, assuming "ulimit -s" printed 8192 before; it does that for me in new shells.
+ ulimit -s 16384
- # ensure with --cache=local dub stays outside the users home directory
- dub $@ --cache=local || _r="$?"
+ # add local dependencies to search path
+ dub add-path "$srcdir"
+
+ dub "$@" \
+ `# ensure dub stays outside the users home directory:` \
+ --cache=local \
+ `# Runs multiple compiler instances in parallel, if possible:` \
+ --parallel \
+ `# Forces a recompilation even if the target is up to date:` \
+ --force \
+ `# force FHS compatibility:` \
+ --build=releaseXDG \
+ `# Save result code for later when failed:` \
+ || _r="$?"
# remove local dependencies from search path so dub won't find them
# later again
- dub remove-path "${srcdir}"
+ dub remove-path "$srcdir"
# removes any cached metadata like the list of available packages
# and their latest version
dub clean-caches
- if [[ "${_r}" != 0 ]]
- then
+ if [[ "$_r" != 0 ]]; then
# dub failed so we also fail after we removed the local dependencies
- return "${_r}"
+ return "$_r"
fi
}
-build()
-{
- cd "${srcdir}/${_pkgname}" || exit
-
- # force FHS compatibility with 'releaseXDG'
- _build build --force --build=releaseXDG
+build() {
+ cd "$_gitname-$pkgver" || exit 1
+ _build build
}
-check()
-{
- cd "${srcdir}/${_pkgname}" || exit
- _build test --parallel
+check() {
+ cd "$_gitname-$pkgver" || exit 1
+ _build test
}
-package()
-{
- cd "${srcdir}" || exit
+package() {
+ cd "$_gitname-$pkgver" || exit 1
# install application entry
install -Dm644 \
`# SRCFILE:` \
- "${_pkgname}.desktop" \
+ "data/desktop/com.lixgame.Lix.desktop" \
`# DSTFILE:` \
- "${pkgdir}/usr/share/applications/${_pkgname}.desktop"
-
- cd "${_pkgname}" || exit
+ "$pkgdir/usr/share/applications/$pkgname.desktop"
# install application entry icon
install -Dm644 \
`# SRCFILE:` \
- "data/images/${_pkgname}_logo.svg" \
+ "data/images/${pkgname}_logo.svg" \
`# DSTFILE:` \
- "${pkgdir}/usr/share/icons/hicolor/scalable/apps/${_pkgname}.svg"
+ "$pkgdir/usr/share/icons/hicolor/scalable/apps/$pkgname.svg"
# install license text
install -Dm644 \
`# SRCFILE:` \
"doc/copying.txt" \
`# DSTFILE:` \
- "${pkgdir}/usr/share/licenses/${_pkgname}/COPYING"
+ "$pkgdir/usr/share/licenses/$pkgname/COPYING"
# install man page
install -Dm644 \
`# SRCFILE:` \
"doc/lix.6" \
`# DSTFILE:` \
- "${pkgdir}/usr/share/man/man6/lix.6"
+ "$pkgdir/usr/share/man/man6/lix.6"
# install binary
install -Dm755 \
`# SRCFILE:` \
- "bin/${_pkgname}" \
+ "bin/$pkgname" \
`# DSTFILE:` \
- "${pkgdir}/usr/bin/${_pkgname}"
+ "$pkgdir/usr/bin/$pkgname"
# remove unimportant files
# https://raw.githubusercontent.com/SimonN/LixD/master/doc/build/package.txt
- rm -r "${srcdir}/${_pkgname}/doc/build"
+ rm -r "doc/build"
# https://lists.archlinux.org/pipermail/aur-general/2011-November/016777.html
# make directories
mkdir -p \
- "${pkgdir}/usr/share/${_pkgname}" \
- "${pkgdir}/usr/share/doc/${_pkgname}"
+ "$pkgdir/usr/share/$pkgname" \
+ "$pkgdir/usr/share/doc/$pkgname"
# copy documentary
cp -dpr --no-preserve=ownership \
`# SRCFILES:` \
"doc/." \
`# DSTDIR:` \
- "${pkgdir}/usr/share/doc/${_pkgname}/"
+ "$pkgdir/usr/share/doc/$pkgname/"
# copy game files
cp -dpr --no-preserve=ownership \
@@ -167,8 +167,7 @@ package()
"data" \
"images" \
"levels" \
- "${srcdir}/music" \
+ "$srcdir/music" \
`# DSTDIR:` \
- "${pkgdir}/usr/share/${_pkgname}"
+ "$pkgdir/usr/share/$pkgname"
}
-# template end;
diff --git a/lix.desktop b/lix.desktop
deleted file mode 100644
index 748937dbf72d..000000000000
--- a/lix.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Lix
-Comment=An action-puzzle game inspired by Lemmings
-Exec=lix
-Icon=lix
-Categories=Game;ActionGame;
-Keywords=game;lemmings;