Commit Graph

21 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)
1b48c291c9 Implement the pgchip clone block ice cloning hack 2021-01-01 17:30:50 -07:00
Eevee (Evelyn Woods)
aac1e09c72 Add support for pgchip's magic number and ice block encoding 2021-01-01 17:11:11 -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)
411005eaa6 Editor: Stub out support for actually saving levels 2020-12-03 15:40:44 -07:00
Eevee (Evelyn Woods)
edbe32c148 Add support for drag/drop, dir upload, C2G, AND lazy level loading! 2020-10-21 20:47:07 -06:00
Eevee (Evelyn Woods)
9b873764fb Shim around several compat issues that affect CCLP levels
- CCLP1 #81 requires pushing blocks off of blue walls, which is
  impossible in CC2 but allowed in TW Lynx (unclear if this is a lynx
  behavior or a tw bug)

- CCLP1 #89 has a tank start on a recessed wall and drive off of it,
  expecting the recessed wall to be left alone, but under CC2 rules it
  becomes a wall; such walls are now automatically converted to a new
  tile, the "doubly recessed wall", which restores the expected behavior
  without changing how recessed walls work in general

- CCLP4 #135 expects pressing a blue button to not affect blue tanks
  that are currently in mid-slide

In addition, the behavior of blue buttons now matches the Lynx/Steam
behavior: the press is stored as a flag and queued until the tank is
next able to move.
2020-10-01 03:08:25 -06:00
Eevee (Evelyn Woods)
f4363b8fda Rewrite how connections work
- Teleporters now connect on the fly, rather than having fixed
  connections (important because dynamite can destroy teleporters!)

- If custom connections are present, red and brown buttons ONLY use
  those, rather than falling back to CC2 connection rules

- Multiple brown buttons connected to the same trap should now work
  correctly
2020-09-30 02:11:17 -06:00
Eevee (Evelyn Woods)
7a6370c9e9 Fix spurious floors in parsed CCL files 2020-09-25 19:09:24 -06:00
Eevee (Evelyn Woods)
26f9e917a8 Support the remaining invalid tile, which slipped into CCLXP2 2020-09-25 04:51:59 -06:00
Eevee (Evelyn Woods)
537e011f2a Track scores, including your total score for a pack 2020-09-25 03:47:18 -06:00
Eevee (Evelyn Woods)
fcbd2b17be Fix dirt block direction in DAT; remove clone block, which serves no purpose for us 2020-09-18 22:22:38 -06:00
Eevee (Evelyn Woods)
529b87ab23 Attempt to support some invalid MSCC tiles 2020-09-16 01:51:38 -06:00
Eevee (Evelyn Woods)
fed52c42ab Update CCL parser to also use tile templates containing types 2020-09-15 22:48:59 -06:00
Eevee (Evelyn Woods)
b26820d99b Fix revealing the void under a block hiding an item in CC1 2020-09-12 20:58:28 -06:00
Eevee (Evelyn Woods)
1cc631c27e Load custom trap/cloner connections from CC1 .DAT levels 2020-09-01 09:48:17 -06:00
Eevee (Evelyn Woods)
eb2dd7a4a4 Implement clone machine! 2020-09-01 01:31:42 -06:00
Eevee (Evelyn Woods)
050c4e0322 Fix missing floor tiles in DAT levels 2020-08-29 00:25:17 -06:00
Eevee (Evelyn Woods)
bbfa0a6e8f Split out CC2 tile bytes; stub out enough for Lesson 1 to load; show inventory; implement misc bits 2020-08-28 07:01:28 -06:00
Eevee (Evelyn Woods)
0dd190fc5a Finish CC1 parser; show hints; improve ice 2020-08-28 05:24:25 -06:00
Eevee (Evelyn Woods)
3084ca7b49 Initial commit: a game that plays through some of CCLP1 2020-08-28 04:02:03 -06:00