- On small screens, the top two headers (with the pack + level names)
are now removed; instead the pack and level name are shown when
starting each level, and the buttons from those headers are moved into
a pause menu.
- The options, compat, and level browser dialogs were all reworked to
fit better on narrow screens.
- The level overlay has a more consistent layout and tries harder to not
draw in the middle, where the player generally is (except that the
mobile pause menu goes there, but oh well).
- The score tally at the end of a level is now less of a small table and
more of... more numbers, I guess?
- Links to the music source and author now open in a new window to
reduce risk of accidentally clicking them and losing your progress.
- A few obituaries were shortened, and several more were added.
- The game ending screen is now accessible on a touchscreen (oops).
- The pause and rewind buttons visually indicate when you're in that
mode, suggesting you can hit them again to switch to normal play.
- Touch controls are now relative to the player and only apply within
the game viewport.
- Disabled buttons look a bit less janky.
Still some work to do on this, but it's a pretty solid start.
- `Tileset.animation_slowdown` is gone!
- Actors are now free to animate every move or every two moves, and have
been configured to do so appropriately. This fixes the appearance of
blobs, most noticeably. (Also fixes #36.)
- Actors that are always animated in CC2 are now always animated in LL.
- Lilypads/turtles now bob randomly. More randomly than CC2, even.
- Players no longer appear to be swimming when stepping off of lilypads.
- Invisible walls no longer temporarily reveal themselves when you have
the x-ray glasses (secret eye).
- There's a new option for using the CC2 animation timing, though god
knows why you would want to.
This simplifies the renderer by having movement cooldowns only work one
way, and thus removes the jank from Steam rendering.
This commit also applies cooldowns for animations at decision time, as
Lynx does, which eliminates a weird special case from their spawning.
Also, Lexy mode now explicitly does not allow an actor to get cooled
twice in one tic. However, this change does make clone machines no
longer be aligned with the thing that pressed the button to clone them,
which is unfortunate.
- Added the active player background
- Added bomb fuses (though LL doesn't use them)
- Added CC2-style double-size blob and walker (though LL doesn't use them)
- Added the rover's directional overlay
- Added custom push animations
- Added custom bouncing heart animations
- Added a puff when opening a door or socket, or revealing a fake floor
- Fixed the rover's animations being a bit mixed up
- Fixed player walk animations occasionally being glitchy
- Touched up the fake floor x-ray tile
- Touched up the canopy x-ray tile
- Touched up the purple ball's shadows
- Touched up the transmogrifier and transmogrify flash
This better matches CC2 behavior and also makes some very common
operations, like grabbing a cell's actor or terrain, way faster.
It also allows me to efficiently implement CC2's layer order when
checking for collisions; thin walls are checked before terrain, and
actors only afterwards. The upshot is that bowling balls no longer
destroy stuff on the other side of a thin wall!
I also did some minor optimizing, mostly by turning loops over an entire
cell's contents into checks for a single layer; Chromium now performs a
bulk test about 30% faster.
Downsides of this change:
- All kinds of stuff may have broken!
- It'll be a little difficult to ever emulate MSCC's curious behavior
when stacking terrain on top of items or other terrain. But not
impossible.
- It'll be far more difficult to emulate buggy Lynx (or maybe it's just
Tile World?) behavior where some combination of cloners and teleports
allow a ton of monsters to accumulate in a few cells. I guess I
wasn't planning on doing that anyway.
Mostly style nits, but also:
- Renamed some stuff in anticipation of removing GameEnded.
- Actor decisions are independent, so there's no need to do most of them
in the first part of a tic and the player in the second part; they can
all happen together in the second part.
- waiting_for_input was merged into turn_based, which I think makes it
easier to follow what's going on between tics. Although I just
realized it introduces a bug, so, better fix that next.
- The canvas didn't need to know if we were waiting or not if we just
force the tic offset to 1 while waiting. This also fixed some slight
jitter with force floors.