Please create an account or Login! Have fun!
C2M: Difference between revisions
(→Tile specification: thieves were backwards) |
(→REPL / PRPL section: Make C2M solution input delay documentation clearer) |
||
(6 intermediate revisions by 4 users not shown) | |||
Line 176: | Line 176: | ||
!Tile | !Tile | ||
!Additional data, if any | !Additional data, if any | ||
!Modifier | |||
|- | |- | ||
|0x1 | |0x1 | ||
|[[Floor]] | |[[Floor]] | ||
| | | | ||
| Wires | |||
|- | |- | ||
|0x2 | |0x2 | ||
|[[Wall]] | |[[Wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x3 | |0x3 | ||
|[[Ice]] | |[[Ice]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x4 | |0x4 | ||
|[[Ice]] corner ''(SW)'' | |[[Ice]] corner ''(SW)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x5 | |0x5 | ||
|[[Ice]] corner ''(NW)'' | |[[Ice]] corner ''(NW)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x6 | |0x6 | ||
|[[Ice]] corner ''(NE)'' | |[[Ice]] corner ''(NE)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x7 | |0x7 | ||
|[[Ice]] corner ''(SE)'' | |[[Ice]] corner ''(SE)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x8 | |0x8 | ||
|[[Water]] | |[[Water]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x9 | |0x9 | ||
|[[Fire]] | |[[Fire]] | ||
| | |||
| | | | ||
|- | |- | ||
|0xa | |0xa | ||
|[[Force floor]] ''(N)'' | |[[Force floor]] ''(N)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0xb | |0xb | ||
|[[Force floor]] ''(E)'' | |[[Force floor]] ''(E)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0xc | |0xc | ||
|[[Force floor]] ''(S)'' | |[[Force floor]] ''(S)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0xd | |0xd | ||
|[[Force floor]] ''(W)'' | |[[Force floor]] ''(W)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0xe | |0xe | ||
|Green [[toggle wall]] | |Green [[toggle wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0xf | |0xf | ||
|Green [[Toggle wall|toggle floor]] | |Green [[Toggle wall|toggle floor]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 240: | Line 256: | ||
|[[Red teleport]] | |[[Red teleport]] | ||
| | | | ||
| Wires | |||
|- | |- | ||
|0x11 | |0x11 | ||
|[[Blue teleport]] | |[[Blue teleport]] | ||
| | | | ||
| Wires | |||
|- | |- | ||
|0x12 | |0x12 | ||
|[[Yellow teleport]] | |[[Yellow teleport]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x13 | |0x13 | ||
|[[Green teleport]] | |[[Green teleport]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x14 | |0x14 | ||
|[[Exit]] | |[[Exit]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x15 | |0x15 | ||
|[[Slime]] | |[[Slime]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 264: | Line 286: | ||
|[[Chip]] ''(the hero)'' | |[[Chip]] ''(the hero)'' | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x17 | |0x17 | ||
|[[Dirt block]] | |[[Dirt block]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x18 | |0x18 | ||
|[[Walker]] | |[[Walker]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x19 | |0x19 | ||
|[[Glider|Ship]] | |[[Glider|Ship]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x1a | |0x1a | ||
|[[Ice block]] | |[[Ice block]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x1b | |0x1b | ||
|[[Thin wall]] ''( | |[[Thin wall]] ''(S) (used in CC1 levels)'' | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x1c | |0x1c | ||
|[[Thin wall]] ''( | |[[Thin wall]] ''(E) (used in CC1 levels)'' | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x1d | |0x1d | ||
|[[Thin wall]] ''(SE) (used in CC1 levels)'' | |[[Thin wall]] ''(SE) (used in CC1 levels)'' | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x1e | |0x1e | ||
|[[Gravel]] | |[[Gravel]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x1f | |0x1f | ||
|[[Green button]] | |[[Green button]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x20 | |0x20 | ||
|[[Blue button]] | |[[Blue button]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 308: | Line 341: | ||
|[[Tank|Blue tank]] | |[[Tank|Blue tank]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x22 | |0x22 | ||
|[[Red door]] | |[[Red door]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x23 | |0x23 | ||
|[[Blue door]] | |[[Blue door]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x24 | |0x24 | ||
|[[Yellow door]] | |[[Yellow door]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x25 | |0x25 | ||
|[[Green door]] | |[[Green door]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 328: | Line 366: | ||
|[[Red key]] | |[[Red key]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x27 | |0x27 | ||
|[[Blue key]] | |[[Blue key]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x28 | |0x28 | ||
|[[Yellow key]] | |[[Yellow key]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x29 | |0x29 | ||
|[[Green key]] | |[[Green key]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x2a | |0x2a | ||
|[[Computer chip|IC Chip]] | |[[Computer chip|IC Chip]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x2b | |0x2b | ||
|Extra [[Computer chip|IC Chip]] | |Extra [[Computer chip|IC Chip]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x2c | |0x2c | ||
|[[Socket|Chip socket]] | |[[Socket|Chip socket]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x2d | |0x2d | ||
|[[Recessed wall|Pop-up wall]] | |[[Recessed wall|Pop-up wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x2e | |0x2e | ||
|[[Appearing wall]] | |[[Appearing wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x2f | |0x2f | ||
|[[Invisible wall]] | |[[Invisible wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x30 | |0x30 | ||
|Solid [[blue wall]] | |Solid [[blue wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x31 | |0x31 | ||
|False [[blue wall]] | |False [[blue wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x32 | |0x32 | ||
|[[Dirt]] | |[[Dirt]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 380: | Line 431: | ||
|[[Bug|Ant]] | |[[Bug|Ant]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x34 | |0x34 | ||
|[[Paramecium|Centipede]] | |[[Paramecium|Centipede]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x35 | |0x35 | ||
|[[Ball|Purple ball]] | |[[Ball|Purple ball]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x36 | |0x36 | ||
|[[Blob]] | |[[Blob]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x37 | |0x37 | ||
|[[Teeth|Angry teeth]] | |[[Teeth|Angry teeth]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x38 | |0x38 | ||
|[[Fireball|Fire box]] | |[[Fireball|Fire box]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x39 | |0x39 | ||
|[[Red button]] | |[[Red button]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x3a | |0x3a | ||
|[[Brown button]] | |[[Brown button]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 412: | Line 471: | ||
|[[Ice skates|Cleats]] | |[[Ice skates|Cleats]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x3c | |0x3c | ||
|[[Suction boots]] | |[[Suction boots]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x3d | |0x3d | ||
|[[Fire boots]] | |[[Fire boots]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x3e | |0x3e | ||
|[[Flippers]] | |[[Flippers]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x3f | |0x3f | ||
|Tool [[thief]] | |Tool [[thief]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 432: | Line 496: | ||
|[[Bomb|Cherry bomb]] | |[[Bomb|Cherry bomb]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x41 | |0x41 | ||
|Open [[trap]] ''(unused in main levels)'' | |Open [[trap]] ''(unused in main levels)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x42 | |0x42 | ||
|[[Trap]] | |[[Trap]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 444: | Line 511: | ||
|[[Clone machine]] ''(used in CC1 levels)'' | |[[Clone machine]] ''(used in CC1 levels)'' | ||
| | | | ||
| Clone direction (?) | |||
|- | |- | ||
|0x44 | |0x44 | ||
|[[Clone machine]] | |[[Clone machine]] | ||
| | | | ||
| Clone direction | |||
|- | |- | ||
|0x45 | |0x45 | ||
|[[Hint|Clue]] | |[[Hint|Clue]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x46 | |0x46 | ||
|[[Force floor]] ''(random)'' | |[[Force floor]] ''(random)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x47 | |0x47 | ||
|[[Gray button]] | |[[Gray button]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x48 | |0x48 | ||
|[[Swivel door]] ''(SW)'' | |[[Swivel door]] ''(SW)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x49 | |0x49 | ||
|[[Swivel door]] ''(NW)'' | |[[Swivel door]] ''(NW)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x4a | |0x4a | ||
|[[Swivel door]] ''(NE)'' | |[[Swivel door]] ''(NE)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x4b | |0x4b | ||
|[[Swivel door]] ''(SE)'' | |[[Swivel door]] ''(SE)'' | ||
| | |||
| | | | ||
|- | |- | ||
Line 480: | Line 556: | ||
|[[Time bonus]] | |[[Time bonus]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x4d | |0x4d | ||
|[[Stopwatch]] | |[[Stopwatch]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x4e | |0x4e | ||
|[[Transmogrifier]] | |[[Transmogrifier]] | ||
| | | | ||
| Wires | |||
|- | |- | ||
|0x4f | |0x4f | ||
|[[Railroad track]] | |[[Railroad track]] | ||
| | | | ||
| Tracks (see below) | |||
|- | |- | ||
|0x50 | |0x50 | ||
|[[Steel wall]] | |[[Steel wall]] | ||
| | | | ||
| Wires | |||
|- | |- | ||
|0x51 | |0x51 | ||
|[[Time bomb]] | |[[Time bomb]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x52 | |0x52 | ||
|[[Helmet]] | |[[Helmet]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x53 | |0x53 | ||
|''(Unused)'' | |''(Unused)'' | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x54 | |0x54 | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x55 | |0x55 | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
Line 520: | Line 606: | ||
|[[Melinda]] | |[[Melinda]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x57 | |0x57 | ||
|[[Teeth|Timid teeth]] | |[[Teeth|Timid teeth]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x58 | |0x58 | ||
|Explosion animation ''(unused in main levels)'' | |Explosion animation ''(unused in main levels)'' | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x59 | |0x59 | ||
|[[Hiking boots]] | |[[Hiking boots]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x5a | |0x5a | ||
|[[Gender-only sign|Male-only sign]] | |[[Gender-only sign|Male-only sign]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x5b | |0x5b | ||
|[[Gender-only sign|Female-only sign]] | |[[Gender-only sign|Female-only sign]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x5c | |0x5c | ||
|[[ | |[[Wire#Gates|Logic gate]] | ||
| | | | ||
|Gate type and direction (see below) | |||
|- | |- | ||
|0x5d | |0x5d | ||
|''(Unused)'' | |''(Unused)'' | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x5e | |0x5e | ||
| | |[[Pink button]] | ||
| | | | ||
|Wires | |||
|- | |- | ||
|0x5f | |0x5f | ||
|[[Flame jet]] ''(OFF)'' | |[[Flame jet]] ''(OFF)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x60 | |0x60 | ||
|[[Flame jet]] ''(ON)'' | |[[Flame jet]] ''(ON)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x61 | |0x61 | ||
|[[Orange button]] | |[[Orange button]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 568: | Line 666: | ||
|[[Lightning bolt]] | |[[Lightning bolt]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x63 | |0x63 | ||
|[[Yellow tank]] | |[[Yellow tank]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x64 | |0x64 | ||
|[[Yellow tank button]] | |[[Yellow tank button]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 580: | Line 681: | ||
|[[Mirror Chip]] | |[[Mirror Chip]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x66 | |0x66 | ||
|[[Mirror Melinda]] | |[[Mirror Melinda]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x67 | |0x67 | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
Line 592: | Line 696: | ||
|[[Bowling ball]] | |[[Bowling ball]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x69 | |0x69 | ||
|[[Rover]] | |[[Rover]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x6a | |0x6a | ||
|[[Time penalty]] | |[[Time penalty]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x6b | |0x6b | ||
|[[Custom tile|Custom floor]] | |[[Custom tile|Custom floor]] | ||
| | | | ||
|Style (see below) | |||
|- | |- | ||
|0x6c | |0x6c | ||
|(Unused) | |(Unused) | ||
| | |||
| | | | ||
|- | |- | ||
Line 612: | Line 721: | ||
|[[Thin wall]] / [[Canopy]] | |[[Thin wall]] / [[Canopy]] | ||
|Panel/Canopy bitmask ''(see below)'', Tile Specification for lower layer | |Panel/Canopy bitmask ''(see below)'', Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x6e | |0x6e | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
Line 620: | Line 731: | ||
|[[Railroad sign]] | |[[Railroad sign]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x70 | |0x70 | ||
|[[Custom tile|Custom wall]] | |[[Custom tile|Custom wall]] | ||
| | | | ||
|Style (see below) | |||
|- | |- | ||
|0x71 | |0x71 | ||
|[[Letter tile]] ''(space)'' | |[[Letter tile]] ''(space)'' | ||
| | | | ||
|Glyph type (see below) | |||
|- | |- | ||
|0x72 | |0x72 | ||
|[[Switch door|Purple toggle | |[[Switch door|Purple toggle floor]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x73 | |0x73 | ||
|[[Switch door|Purple toggle | |[[Switch door|Purple toggle wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x74 | |0x74 | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
|0x75 | |0x75 | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
Line 648: | Line 766: | ||
|8-bit Modifier ''(see Modifier section below)'' | |8-bit Modifier ''(see Modifier section below)'' | ||
|1 modifier byte, Tile Specification for affected tile | |1 modifier byte, Tile Specification for affected tile | ||
|N/A | |||
|- | |- | ||
|0x77 | |0x77 | ||
|16-bit Modifier ''(see Modifier section below)'' | |16-bit Modifier ''(see Modifier section below)'' | ||
|2 modifier bytes, Tile Specification for affected tile | |2 modifier bytes, Tile Specification for affected tile | ||
|N/A | |||
|- | |- | ||
|0x78 | |0x78 | ||
|32-bit Modifier ''(see Modifier section below)'' | |32-bit Modifier ''(see Modifier section below)'' | ||
|4 modifier bytes, Tile Specification for affected tile | |4 modifier bytes, Tile Specification for affected tile | ||
|N/A | |||
|- | |- | ||
|0x79 | |0x79 | ||
|''(Unused)'' | |''(Unused)'' | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x7a | |0x7a | ||
|10 point [[Bonus flag|flag]] | |10 point [[Bonus flag|flag]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x7b | |0x7b | ||
|100 point [[Bonus flag|flag]] | |100 point [[Bonus flag|flag]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x7c | |0x7c | ||
|1000 point [[Bonus flag|flag]] | |1000 point [[Bonus flag|flag]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x7d | |0x7d | ||
|Solid [[green wall]] | |Solid [[green wall]] | ||
| | |||
| | | | ||
|- | |- | ||
|0x7e | |0x7e | ||
|False [[green wall]] | |False [[green wall]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 684: | Line 811: | ||
|[[No sign|Not allowed marker]] | |[[No sign|Not allowed marker]] | ||
|Modifies tools/keys. Tile Specification for lower layer | |Modifies tools/keys. Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x80 | |0x80 | ||
|2x points [[Bonus flag|flag]] | |2x points [[Bonus flag|flag]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x81 | |0x81 | ||
|[[Directional block]] | |[[Directional block]] | ||
|Direction byte, Directional Arrows Bitmask, Tile Specification for lower layer | |Direction byte, Directional Arrows Bitmask, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x82 | |0x82 | ||
|[[Floor mimic]] | |[[Floor mimic]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x83 | |0x83 | ||
|[[Green bomb]] | |[[Green bomb]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x84 | |0x84 | ||
|[[Green chip]] | |[[Green chip]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x85 | |0x85 | ||
|''(Unused)'' | |''(Unused)'' | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x86 | |0x86 | ||
|''(Unused)'' | |''(Unused)'' | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x87 | |0x87 | ||
|[[Black button]] | |[[Black button]] | ||
| | | | ||
|Wires | |||
|- | |- | ||
|0x88 | |0x88 | ||
|[[Switch|ON/OFF switch]] ''(OFF)'' | |[[Switch|ON/OFF switch]] ''(OFF)'' | ||
| | | | ||
|Wires | |||
|- | |- | ||
|0x89 | |0x89 | ||
|[[Switch|ON/OFF switch]] ''(ON)'' | |[[Switch|ON/OFF switch]] ''(ON)'' | ||
| | | | ||
|Wires | |||
|- | |- | ||
|0x8a | |0x8a | ||
|[[Key thief]] | |[[Key thief]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 732: | Line 871: | ||
|[[Ghost]] | |[[Ghost]] | ||
|Direction byte, Tile Specification for lower layer | |Direction byte, Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x8c | |0x8c | ||
|[[Steel foil]] | |[[Steel foil]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x8d | |0x8d | ||
|[[Turtle]] | |[[Turtle]] | ||
| | |||
| | | | ||
|- | |- | ||
Line 744: | Line 886: | ||
|[[Secret eye]] | |[[Secret eye]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x8f | |0x8f | ||
|[[Bribe|Thief bribe]] | |[[Bribe|Thief bribe]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x90 | |0x90 | ||
|[[Speed boots]] | |[[Speed boots]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|- | |- | ||
|0x91 | |0x91 | ||
|''(Unused)'' | |''(Unused)'' | ||
| | |||
| | | | ||
|- | |- | ||
Line 760: | Line 906: | ||
|[[Hook]] | |[[Hook]] | ||
|Tile Specification for lower layer | |Tile Specification for lower layer | ||
| | |||
|} | |} | ||
Line 824: | Line 971: | ||
==== Tile modifiers ==== | ==== Tile modifiers ==== | ||
The modifier "tiles" (0x76, 0x77, 0x78) affect the tile specification that they carry in their additional data. The meaning of the modifier value depends on the type of tile they affect. | The modifier "tiles" (0x76, 0x77, 0x78) affect the tile specification that they carry in their additional data. The meaning of the modifier value depends on the type of tile they affect. | ||
The size of the modifier is irrelevant, and modifiers default to zero. That is, if a tile is expecting a 16-bit modifier but the high byte is zero, an 8-bit modifier works as well. If a tile is expecting an 8-bit modifier which is zero, the modifier may be omitted entirely. | |||
==== Wire modifier ==== | ==== Wire modifier ==== | ||
Line 950: | Line 1,099: | ||
==== Track modifier ==== | ==== Track modifier ==== | ||
This is | This is a 16-bit modifier that affects the [[railroad track]] tile. The low byte specifies which tracks exist; any number of bits can be combined: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
!Bitmask | !Bitmask | ||
Line 977: | Line 1,126: | ||
|} | |} | ||
The high | The high byte is comprised of two nybbles. The lower nybble specifies which track is active. For tiles with a track switch, the active track is the only one that can be used; the others are shown in red. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
!Value | !Value | ||
!Meaning | !Meaning | ||
|- | |- | ||
| | |0x000 | ||
|NE track is active | |NE track is active | ||
|- | |- | ||
Line 1,000: | Line 1,149: | ||
|Vertical track is active | |Vertical track is active | ||
|} | |} | ||
The upper nybble is the tile's initial "entered" direction. When an actor starts the level already on top of this tile, it's treated as though it entered by moving in this direction. (If there are no tracks corresponding to that direction, the actor will be unable to move.) | |||
=== REPL / PRPL section === | === REPL / PRPL section === | ||
Line 1,029: | Line 1,180: | ||
|- | |- | ||
|1 | |1 | ||
|Number of frames | |Number of frames to wait before inputting the new input. The last input is still held while the new input is pending. Always <= 0xfc. Larger delays are specified via multiple input changes | ||
|- | |- | ||
|1 | |1 | ||
Line 1,063: | Line 1,214: | ||
|- | |- | ||
|0x80 | |0x80 | ||
|If set, this input is for player 2 in a split-screen game | |If set, this input is for player 2 in a split-screen game <!-- doesn't work? --> | ||
|} | |} | ||
Latest revision as of 14:55, 15 May 2021
A C2M file (having the extension .c2m) is the file format which Chip's Challenge 2 individual levels are stored in.
The file is a binary file consisting of several sections one after the other, terminated by the END section. Each section begins with a section header, which is followed by the section's data.
All data in the file is little-endian.
Format[edit]
Section header[edit]
Bytes | Content |
---|---|
4 | Four character code identifying the section, see table below. Codes shorter than 4 characters (such as "END") are padded with spaces (making "END " in this case). |
4 | The length of the section's data |
Section types[edit]
Section ID | Content Type | Content |
---|---|---|
CC2M | Null-terminated string | The file's version. The latest version is "7", but ranges from "3" to "7" in the levels supplied with CC2. |
LOCK | Null-terminated string | Usually "Custom version for Chuck Sommerville", optional. Seems to be ignored |
TITL | Null-terminated string | Level title |
AUTH | Null-terminated string | Level author, optional |
VERS | Null-terminated string | Version of the CC2 editor which created this level, optional |
CLUE | Null-terminated string | Level clue (Only one allowed, but see below [1]) |
NOTE | Null-terminated string | Plain text comments ([1]) |
OPTN | See OPTN section table below | Various level options |
MAP / PACK | See MAP section table below | The level's map. A MAP section is not packed, a PACK section is. |
KEY | 16 bytes | Unknown, seems not required |
REPL / PRPL | See REPL section table below | Solution replay, optional. A REPL section is not packed; a PRPL section is. |
RDNY | No content (length is 0) | The presence of this section makes the level read-only so it can't be edited in the level editor. |
END | No content (length is 0) | Signifies end of file |
OPTN section[edit]
The size of the section can differ between file versions (and even between files with the same file version). Data beyond the size of the section is not read. (E.g. if the section size is 3, only the time and the view are stored.)
Bytes | Content |
---|---|
2 | Time |
1 | 0 - 10x10 view, 1 - 9x9 view, 2 - split view |
1 | 0 - no solution exists / solution not verified, 1 - a solution exists (in a REPL / PRPL section) and it works |
1 | 0 - show map in editor, 1 - hide it |
1 | 0 - map is editable, 1 - map is readonly |
16 | MD5 hash of the contents of the REPL section, or unpacked PRPL section. |
1 | "Hide Logic" option |
1 | "CC1 Boots" option |
1 | Blobs behavior: 0 - deterministic, 1 - 4 patterns, 2 - extra random |
Section packing[edit]
The PACK and PRPL sections contain compressed versions of the MAP and REPL sections respectively. The compression scheme is as follows:
Bytes | Content |
---|---|
2 | Number of bytes in the uncompressed list. |
Varies | A sequence of blocks which can each be either a Data Block or a Back-Reference Block.
The sequence continues until it covers all bytes in the uncompressed list. |
Data block[edit]
When encountered during decompression, the data block's N bytes of data are added to the list..
Bytes | Content |
---|---|
1 | The length of the data (N), must be between 0x00 to 0x7f (else, this is not a Data Block) |
N | N bytes of data. |
Back-reference block[edit]
When encountered during decompression, COUNT bytes are copied from position (CURRENT - OFFSET) in the list to position CURRENT in the list. (Where CURRENT is the current position in the list, while COUNT and OFFSET are defined below)
Note that COUNT can be larger than OFFSET, allowing arbitrary pattern repetition to be efficiently encoded.
Bytes | Content |
---|---|
1 | 0x80 + The number of items this block decodes to (COUNT). Must be between 0x80 to 0xff (else, this is not a Back-Reference Block) |
1 | The offset from the current position in the list (OFFSET) |
MAP / PACK section[edit]
This section contains the map data. If this is a PACK section, it must be unpacked using the above compression scheme first. The contents of this section is as follows:
Bytes | Content |
---|---|
1 | The level's width (W) |
1 | The level's height (H) |
Varies | A sequence of tile specifications for each tile in the level, arranged in left-to-right, top-to-bottom order. |
Tile specification[edit]
The tile specification consists of 1 or more bytes. The first byte is always the tile value, decoded as follows:
Value | Tile | Additional data, if any | Modifier |
---|---|---|---|
0x1 | Floor | Wires | |
0x2 | Wall | ||
0x3 | Ice | ||
0x4 | Ice corner (SW) | ||
0x5 | Ice corner (NW) | ||
0x6 | Ice corner (NE) | ||
0x7 | Ice corner (SE) | ||
0x8 | Water | ||
0x9 | Fire | ||
0xa | Force floor (N) | ||
0xb | Force floor (E) | ||
0xc | Force floor (S) | ||
0xd | Force floor (W) | ||
0xe | Green toggle wall | ||
0xf | Green toggle floor | ||
0x10 | Red teleport | Wires | |
0x11 | Blue teleport | Wires | |
0x12 | Yellow teleport | ||
0x13 | Green teleport | ||
0x14 | Exit | ||
0x15 | Slime | ||
0x16 | Chip (the hero) | Direction byte, Tile Specification for lower layer | |
0x17 | Dirt block | Direction byte, Tile Specification for lower layer | |
0x18 | Walker | Direction byte, Tile Specification for lower layer | |
0x19 | Ship | Direction byte, Tile Specification for lower layer | |
0x1a | Ice block | Direction byte, Tile Specification for lower layer | |
0x1b | Thin wall (S) (used in CC1 levels) | Tile Specification for lower layer | |
0x1c | Thin wall (E) (used in CC1 levels) | Tile Specification for lower layer | |
0x1d | Thin wall (SE) (used in CC1 levels) | Tile Specification for lower layer | |
0x1e | Gravel | ||
0x1f | Green button | ||
0x20 | Blue button | ||
0x21 | Blue tank | Direction byte, Tile Specification for lower layer | |
0x22 | Red door | ||
0x23 | Blue door | ||
0x24 | Yellow door | ||
0x25 | Green door | ||
0x26 | Red key | Tile Specification for lower layer | |
0x27 | Blue key | Tile Specification for lower layer | |
0x28 | Yellow key | Tile Specification for lower layer | |
0x29 | Green key | Tile Specification for lower layer | |
0x2a | IC Chip | Tile Specification for lower layer | |
0x2b | Extra IC Chip | Tile Specification for lower layer | |
0x2c | Chip socket | ||
0x2d | Pop-up wall | ||
0x2e | Appearing wall | ||
0x2f | Invisible wall | ||
0x30 | Solid blue wall | ||
0x31 | False blue wall | ||
0x32 | Dirt | ||
0x33 | Ant | Direction byte, Tile Specification for lower layer | |
0x34 | Centipede | Direction byte, Tile Specification for lower layer | |
0x35 | Purple ball | Direction byte, Tile Specification for lower layer | |
0x36 | Blob | Direction byte, Tile Specification for lower layer | |
0x37 | Angry teeth | Direction byte, Tile Specification for lower layer | |
0x38 | Fire box | Direction byte, Tile Specification for lower layer | |
0x39 | Red button | ||
0x3a | Brown button | ||
0x3b | Cleats | Tile Specification for lower layer | |
0x3c | Suction boots | Tile Specification for lower layer | |
0x3d | Fire boots | Tile Specification for lower layer | |
0x3e | Flippers | Tile Specification for lower layer | |
0x3f | Tool thief | ||
0x40 | Cherry bomb | Tile Specification for lower layer | |
0x41 | Open trap (unused in main levels) | ||
0x42 | Trap | ||
0x43 | Clone machine (used in CC1 levels) | Clone direction (?) | |
0x44 | Clone machine | Clone direction | |
0x45 | Clue | ||
0x46 | Force floor (random) | ||
0x47 | Gray button | ||
0x48 | Swivel door (SW) | ||
0x49 | Swivel door (NW) | ||
0x4a | Swivel door (NE) | ||
0x4b | Swivel door (SE) | ||
0x4c | Time bonus | Tile Specification for lower layer | |
0x4d | Stopwatch | Tile Specification for lower layer | |
0x4e | Transmogrifier | Wires | |
0x4f | Railroad track | Tracks (see below) | |
0x50 | Steel wall | Wires | |
0x51 | Time bomb | Tile Specification for lower layer | |
0x52 | Helmet | Tile Specification for lower layer | |
0x53 | (Unused) | Direction byte, Tile Specification for lower layer | |
0x54 | (Unused) | ||
0x55 | (Unused) | ||
0x56 | Melinda | Direction byte, Tile Specification for lower layer | |
0x57 | Timid teeth | Direction byte, Tile Specification for lower layer | |
0x58 | Explosion animation (unused in main levels) | Direction byte, Tile Specification for lower layer | |
0x59 | Hiking boots | Tile Specification for lower layer | |
0x5a | Male-only sign | ||
0x5b | Female-only sign | ||
0x5c | Logic gate | Gate type and direction (see below) | |
0x5d | (Unused) | Direction byte, Tile Specification for lower layer | |
0x5e | Pink button | Wires | |
0x5f | Flame jet (OFF) | ||
0x60 | Flame jet (ON) | ||
0x61 | Orange button | ||
0x62 | Lightning bolt | Tile Specification for lower layer | |
0x63 | Yellow tank | Direction byte, Tile Specification for lower layer | |
0x64 | Yellow tank button | ||
0x65 | Mirror Chip | Direction byte, Tile Specification for lower layer | |
0x66 | Mirror Melinda | Direction byte, Tile Specification for lower layer | |
0x67 | (Unused) | ||
0x68 | Bowling ball | Tile Specification for lower layer | |
0x69 | Rover | Direction byte, Tile Specification for lower layer | |
0x6a | Time penalty | Tile Specification for lower layer | |
0x6b | Custom floor | Style (see below) | |
0x6c | (Unused) | ||
0x6d | Thin wall / Canopy | Panel/Canopy bitmask (see below), Tile Specification for lower layer | |
0x6e | (Unused) | ||
0x6f | Railroad sign | Tile Specification for lower layer | |
0x70 | Custom wall | Style (see below) | |
0x71 | Letter tile (space) | Glyph type (see below) | |
0x72 | Purple toggle floor | ||
0x73 | Purple toggle wall | ||
0x74 | (Unused) | ||
0x75 | (Unused) | ||
0x76 | 8-bit Modifier (see Modifier section below) | 1 modifier byte, Tile Specification for affected tile | N/A |
0x77 | 16-bit Modifier (see Modifier section below) | 2 modifier bytes, Tile Specification for affected tile | N/A |
0x78 | 32-bit Modifier (see Modifier section below) | 4 modifier bytes, Tile Specification for affected tile | N/A |
0x79 | (Unused) | Direction byte, Tile Specification for lower layer | |
0x7a | 10 point flag | Tile Specification for lower layer | |
0x7b | 100 point flag | Tile Specification for lower layer | |
0x7c | 1000 point flag | Tile Specification for lower layer | |
0x7d | Solid green wall | ||
0x7e | False green wall | ||
0x7f | Not allowed marker | Modifies tools/keys. Tile Specification for lower layer | |
0x80 | 2x points flag | Tile Specification for lower layer | |
0x81 | Directional block | Direction byte, Directional Arrows Bitmask, Tile Specification for lower layer | |
0x82 | Floor mimic | Direction byte, Tile Specification for lower layer | |
0x83 | Green bomb | Tile Specification for lower layer | |
0x84 | Green chip | Tile Specification for lower layer | |
0x85 | (Unused) | Tile Specification for lower layer | |
0x86 | (Unused) | Tile Specification for lower layer | |
0x87 | Black button | Wires | |
0x88 | ON/OFF switch (OFF) | Wires | |
0x89 | ON/OFF switch (ON) | Wires | |
0x8a | Key thief | ||
0x8b | Ghost | Direction byte, Tile Specification for lower layer | |
0x8c | Steel foil | Tile Specification for lower layer | |
0x8d | Turtle | ||
0x8e | Secret eye | Tile Specification for lower layer | |
0x8f | Thief bribe | Tile Specification for lower layer | |
0x90 | Speed boots | Tile Specification for lower layer | |
0x91 | (Unused) | ||
0x92 | Hook | Tile Specification for lower layer |
Direction byte[edit]
The direction byte comes after enemy tiles and some others:
Value | Meaning |
---|---|
0 | North |
1 | East |
2 | South |
3 | West |
Thin wall/Canopy bitmask[edit]
Any number of these bits can be combined:
Bitmask | Meaning |
---|---|
0x1 | Thin wall (N) |
0x2 | Thin wall (E) |
0x4 | Thin wall (S) |
0x8 | Thin wall (W) |
0x10 | Canopy |
Directional block arrows bitmask[edit]
Any number of these bits can be combined:
Bitmask | Meaning |
---|---|
0x1 | North |
0x2 | East |
0x4 | South |
0x8 | West |
Tile modifiers[edit]
The modifier "tiles" (0x76, 0x77, 0x78) affect the tile specification that they carry in their additional data. The meaning of the modifier value depends on the type of tile they affect.
The size of the modifier is irrelevant, and modifiers default to zero. That is, if a tile is expecting a 16-bit modifier but the high byte is zero, an 8-bit modifier works as well. If a tile is expecting an 8-bit modifier which is zero, the modifier may be omitted entirely.
Wire modifier[edit]
This is an 8-bit modifier that affects floors, steel walls, ON/OFF switches, transmogrifiers, and blue and red teleports. It adds wires to the tile it affects. Any number of these bits can be combined:
Bitmask | Meaning |
---|---|
0x1 | Wire (N) |
0x2 | Wire (E) |
0x4 | Wire (S) |
0x8 | Wire (W) |
0x10 | Wire tunnel (N) |
0x20 | Wire tunnel (E) |
0x40 | Wire tunnel (S) |
0x80 | Wire tunnel (W) |
Letter tile modifier[edit]
This is an 8-bit modifier that affects letter tiles by adding a symbol (usually an ASCII symbol) to them:
Values | Meaning |
---|---|
0x1c | Up arrow |
0x1d | Right arrow |
0x1e | Down arrow |
0x1f | Left arrow |
0x20 through 0x5f | Corresponding ASCII character (' ' through '_') |
Clone machine arrow modifier[edit]
This is an 8-bit modifier that affects clone machines by specifying their direction. The values can be combined and will show up on the clone machine appropriately, but the game will only clone in one direction.
Value | Meaning |
---|---|
0x1 | Arrow (N) |
0x2 | Arrow (E) |
0x4 | Arrow (S) |
0x8 | Arrow (W) |
Custom floor/wall modifier[edit]
This is an 8-bit modifier that affects custom walls or floors by replaces their style:
Value | Meaning |
---|---|
0x0 | Green |
0x1 | Pink |
0x2 | Yellow |
0x3 | Blue |
Logic modifier[edit]
This is an 8-bit modifier that affects an inverter gate by replacing it with another gate. Modifiers outside of the ranges specified below will produce voodoo tiles.
Most logic gates have 4 assigned values instead of just 1; unless otherwise specified below, the face direction of the logic gate is determined by its index, stored in the order: North, East, South, West.
Values | Meaning |
---|---|
0x0 through 0x3 | Inverter gate |
0x4 through 0x7 | AND gate |
0x8 through 0xb | OR gate |
0xc through 0xf | XOR gate |
0x10 through 0x13 | Latch gate (clockwise arrow) |
0x14 through 0x17 | NAND gate |
0x1e through 0x27 | Counter gate (0 through 9) |
0x40 through 0x43 | Latch gate (counterclockwise arrow) |
Track modifier[edit]
This is a 16-bit modifier that affects the railroad track tile. The low byte specifies which tracks exist; any number of bits can be combined:
Bitmask | Meaning |
---|---|
0x1 | Turn (NE) |
0x2 | Turn (SE) |
0x4 | Turn (SW) |
0x8 | Turn (NW) |
0x10 | Horizontal |
0x20 | Vertical |
0x40 | Track switch |
The high byte is comprised of two nybbles. The lower nybble specifies which track is active. For tiles with a track switch, the active track is the only one that can be used; the others are shown in red.
Value | Meaning |
---|---|
0x000 | NE track is active |
0x100 | SE track is active |
0x200 | SW track is active |
0x300 | NW track is active |
0x400 | Horizontal track is active |
0x500 | Vertical track is active |
The upper nybble is the tile's initial "entered" direction. When an actor starts the level already on top of this tile, it's treated as though it entered by moving in this direction. (If there are no tracks corresponding to that direction, the actor will be unable to move.)
REPL / PRPL section[edit]
This section contains the replay data. If this is a PRPL section, it must be unpacked first (see Section Packing). However the hash for the replay and the valid solution bit-flag is set in the OPTN section and not here
The contents of this section are as follows:
Bytes | Content |
---|---|
1 | Usually 0; function unknown |
1 | Random force floor initial direction |
1 | Randomness seed (used by blobs) |
Varies | A sequence of input changes; optionally terminated by 0xff |
Input change[edit]
Specifies a change in input:
Bytes | Content |
---|---|
1 | Number of frames to wait before inputting the new input. The last input is still held while the new input is pending. Always <= 0xfc. Larger delays are specified via multiple input changes |
1 | An input bitmask specifying the new input |
Input bitmask[edit]
Specifies which keys are pressed, any number of bits can be combined:
Bitmask | Meaning |
---|---|
0x1 | Drop item |
0x2 | Down |
0x4 | Left |
0x8 | Right |
0x10 | Up |
0x20 | Switch character |
0x40 | Cycle items |
0x80 | If set, this input is for player 2 in a split-screen game |