Commit Graph

227 Commits

Author SHA1 Message Date
Eevee (Evelyn Woods)
323ed3ee18 Refactor to using cells with fixed slots
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.
2021-01-03 17:19:27 -07:00
Eevee (Evelyn Woods)
cff756597c Fix a few places where two tiles on the same layer could coexist in a cell 2021-01-03 15:18:53 -07:00
Eevee (Evelyn Woods)
fe7731efe7 Fix minor issues: ghosts don't affect popwalls, voodoo tiles shouldn't crash, on_bump is unused 2021-01-03 14:06:41 -07:00
Eevee (Evelyn Woods)
d1646532d5 Draw the countdown frames for the time bomb, and improve its artwork 2021-01-03 13:20:28 -07:00
Eevee (Evelyn Woods)
0e1bd91075 Add a bunch more sound effects 2021-01-03 13:07:15 -07:00
Eevee (Evelyn Woods)
b08750696e Implement replay-compatible blob transmogrifying 2021-01-02 19:50:03 -07:00
Eevee (Evelyn Woods)
ed6a98392d Fix the fix for bowling balls destroying players 2021-01-02 17:42:39 -07:00
Eevee (Evelyn Woods)
6c2602246e Allow rovers to enter popwalls and fake walls 2021-01-02 17:16:27 -07:00
Eevee (Evelyn Woods)
c9bcc92bdf Prevent ghosts from toggling swivels 2021-01-02 16:59:20 -07:00
Eevee (Evelyn Woods)
6d519cfa0a Handle a player blowing themselves up with dynamite 2021-01-02 12:23:53 -07:00
Eevee (Evelyn Woods)
69d62f8266 Fix collision masks for dynamite and bowling balls 2021-01-02 12:19:52 -07:00
Eevee (Evelyn Woods)
e277a1363e Add a transmogrify sparkle 2021-01-01 21:27:10 -07:00
Eevee (Evelyn Woods)
a41baee3fc Fix this fix to player fixing whatever 2021-01-01 20:18:03 -07:00
Eevee (Evelyn Woods)
2673f7f9f8 Don't switch players when a non-active player exits 2021-01-01 20:10:00 -07:00
Eevee (Evelyn Woods)
d77b25c7c1 Wildly guess about how blob transmogrification might use the PRNG 2021-01-01 20:09:44 -07:00
Eevee (Evelyn Woods)
b9a311a18c Merge thin walls into a single tile; split "overlay" layer into correct CC2 parts 2020-12-29 19:29:22 -07:00
Eevee (Evelyn Woods)
1c5f63b61b Add a new experimental tile: sand 2020-12-29 17:08:51 -07:00
Eevee (Evelyn Woods)
be769b7dc8 Clean up doppelganger collision; monsters block doppelgangers, but players and dopps don't block each other 2020-12-29 11:34:51 -07:00
Eevee (Evelyn Woods)
63f09283ea Make actors explode when starting the level on a bomb 2020-12-29 07:21:18 -07:00
Eevee (Evelyn Woods)
f54edf8692 Fix the way force floors alter actors' movement when flipping under CC2 rules 2020-12-28 15:03:25 -07:00
Eevee (Evelyn Woods)
f6f83a45f1 Add a teleport flash 2020-12-28 14:21:28 -07:00
Eevee (Evelyn Woods)
1e79704f70 Add more experimental tiles: gates and a skeleton key (also some tileset touchups) 2020-12-28 14:00:47 -07:00
Eevee (Evelyn Woods)
dee46b77df Fix black buttons to /always/ separate horizontal and vertical wires 2020-12-28 06:53:19 -07:00
Eevee (Evelyn Woods)
d10cba7935 Make bowling balls not detonate if bumped by an actor who can't enter the cell 2020-12-27 09:33:02 -07:00
Eevee (Evelyn Woods)
8211da6cc3 Make gravel and dirt also block doppelganger Cerise 2020-12-27 07:28:38 -07:00
Eevee (Evelyn Woods)
4e5b2f02d9 Make yellow tanks remember a yellow button press made while they were sliding 2020-12-27 07:20:33 -07:00
Eevee (Evelyn Woods)
934a2ec1fa Switch railroad tracks when an actor with the RR sign makes a legal move 2020-12-27 07:08:23 -07:00
Eevee (Evelyn Woods)
f798bd2c9c Move blobs' slime-spreading to happen instantly, not on arrival (and fix some typos) 2020-12-27 06:17:52 -07:00
Eevee (Evelyn Woods)
6470575a7b Populate movement_cooldown for lit dynamite; guard against NaNs; check for moving blocks in bump mode 2020-12-27 05:41:03 -07:00
Eevee (Evelyn Woods)
c7815ba841 Move teleporter overriding to decision time; treat teleporting as a kind of slide; decouple speed from sliding 2020-12-27 05:40:06 -07:00
Eevee (Evelyn Woods)
059a523347 Make ghosts erase fire even if they just got the boots from the same cell 2020-12-26 04:23:23 -07:00
Eevee (Evelyn Woods)
30b4b89a95 Change traps to not eject their contents when opened by wire 2020-12-26 03:59:21 -07:00
Eevee (Evelyn Woods)
a45a0138b9 Fix flipping force floors with something on them
Using `this` here doesn't work because the type just changed!
2020-12-26 03:58:40 -07:00
Eevee (Evelyn Woods)
0500518537 Move sliding back to arrive time, but force floor bonking to movement time 2020-12-26 03:15:00 -07:00
Eevee (Evelyn Woods)
0bb3f78a33 Give flame jets their own mini-pass 2020-12-26 02:03:39 -07:00
Eevee (Evelyn Woods)
a0b34217b4 Implement the goofy CC2 "open trap" tile 2020-12-24 09:44:29 -07:00
Eevee (Evelyn Woods)
7b54f88981 Let dynamite blow up even wired floor 2020-12-24 09:20:14 -07:00
Eevee (Evelyn Woods)
d3067173d6 Don't search for an exit direction from the red teleporter you entered 2020-12-24 08:01:43 -07:00
Eevee (Evelyn Woods)
afe68e1b20 Fix fire to not kill ghosts, again 2020-12-24 07:57:18 -07:00
Eevee (Evelyn Woods)
1727df4e38 Allow ghosts to pass through chip sockets at any time 2020-12-24 07:08:12 -07:00
Eevee (Evelyn Woods)
effa166c67 Prevent bestowal of red keys 2020-12-24 07:06:04 -07:00
Eevee (Evelyn Woods)
0e1e577281 Allow doppelgangers to also erase animations 2020-12-24 07:03:26 -07:00
Eevee (Evelyn Woods)
d567a2553e Disallow pulling unpushable blocks; play a sound on bowling ball collision 2020-12-24 06:55:50 -07:00
Eevee (Evelyn Woods)
1a7dc3e737 Implement a couple more compat flags and fix some typos with the dialog 2020-12-24 06:30:22 -07:00
Eevee (Evelyn Woods)
756a563135 Add a (working!) compatibility dialog, and a ruleset dropdown to the bulk tester 2020-12-24 01:51:27 -07:00
Eevee (Evelyn Woods)
2381bd38b9 Add compat switches for using the CC2 timing and update order
Other gameplay changes/fixes that crept in:

- Ghosts no longer pick up red keys

- Doppelgangers now read their movement directly from players, so no
  intermediate variables are necessary

- Spring mining is no longer possible

- Push recursion is detected and prevented

- Bowling balls will also blow up anything that runs into them
2020-12-23 04:30:10 -07:00
Eevee (Evelyn Woods)
1aa406fc7b Move sliding effects to decision time 2020-12-21 03:50:03 -07:00
Eevee (Evelyn Woods)
42dd4b9ce6 Make ghosts with fire boots erase fire and blobs not move between canopies 2020-12-21 00:21:32 -07:00
Eevee (Evelyn Woods)
151f66a0fb Make blobs spread slime onto floor 2020-12-21 00:05:12 -07:00
Eevee (Evelyn Woods)
99af6025ee Fix ice blocks to play an animation when destroyed by fire 2020-12-19 19:50:20 -07:00