Cosmo Level Format
Format type | Map/level |
---|---|
Map type | 2D tile-based |
Layer count | 3 |
Tile size (pixels) | 8×8 |
Viewport (pixels) | 304×144 |
Games |
Contents
File format
The file is in this basic layout:
Data type | Description |
---|---|
UINT16LE iFlags | Flags indicating music, backdrop and other stuff |
UINT16LE iMapWidth | Map width in tiles |
UINT16LE iActorSize | Number of UINT16 values in the actor block |
ACTORDATA actorData[] | Variable-length array of all the actors in the level |
BYTE bgLayer[65528] | The map data for the background layer |
The iMapWidth values in the original Cosmo levels is either 64, 128, 256 or 512. The "view window" in the game is 304x144 Pixels, so the minimal map width would be 38. However, the game will only recognize the values 32, 64, 128, 256, 512, 1024 and 2048. Any other value will not be handled by the game at all, thus leaving a vital variable uninitialized. However, the values 32 and 2048 should never be used in a level, since the width or height of the level would be smaller than the viewport.
The iActorSize values are reliable for all the original Cosmo level files (Version 1.20). Since the game loads the entire actorData array into a block of 65535 bytes, the iActorSize value must be less than 32766. Larger values would lead to memory corruption.
The map data found in the original level files is actually sized 65528 Bytes or 32764 Words, but the game will read it a block of up to 65535 bytes. Each Word entry in this block is divisable by 8 (see #Mapping cell values to tiles).
Level Flags
The structure of the bits in the iFlags value is as follows:
[ mmmmm | ppp | yxr | bbbbb ] m: music index p: palette animation type y: y-scrolling backdrop x: x-scrolling backdrop r: rain b: backdrop index
Assuming the iFlags value was read as a UINT16LE, the value can be split like this:
rain = (iFlags & 0x20) != 0; backdrop = iFlags & 0x1F; scrollX = (iFlags & 0x40) != 0; scrollY = (iFlags & 0x80) != 0; animation = (iFlags >> 8) & 7; music = (iflags >> 11) & 0x1F;
The indices for music and backdrop refer to an array of filename strings stored in the executable. You can find them by searching for the first filename in each array. For backdrops, the first filename (index: 0) is BDBLANK.MNI, for music it's MCAVES.MNI. Note that some backdrop files are not used by the games. The complete list is:
Backdrop value |
Filename |
---|---|
0 | bdblank.mni |
1 | bdpipe.mni |
2 | bdredsky.mni |
3 | bdrocktk.mni |
4 | bdjungle.mni |
5 | bdstar.mni |
6 | bdwierd.mni |
7 | bdcave.mni |
8 | bdice.mni |
9 | bdshrum.mni |
10 | bdtechms.mni |
11 | bdnewsky.mni |
12 | bdstar2.mni |
13 | bdstar3.mni |
14 | bdforest.mni |
15 | bdmountn.mni |
16 | bdguts.mni |
17 | bdbrktec.mni |
18 | bdclouds.mni |
19 | bdfutcty.mni |
20 | bdice2.mni |
21 | bdcliff.mni |
22 | bdspooky.mni |
23 | bdcrystl.mni |
24 | bdcircut.mni |
25 | bdcircpc.mni |
26-31 | Unused |
Music value |
Filename |
---|---|
0 | mcaves.mni |
1 | mscarry.mni |
2 | mboss.mni |
3 | mrunaway.mni |
4 | mcircus.mni |
5 | mtekwrd.mni |
6 | measylev.mni |
7 | mrockit.mni |
8 | mhappy.mni |
9 | mdevo.mni |
10 | mdadoda.mni |
11 | mbells.mni |
12 | mdrums.mni |
13 | mbanjo.mni |
14 | measy2.mni |
15 | mteck2.mni |
16 | mteck3.mni |
17 | mteck4.mni |
18 | mzztop.mni |
19-31 | Unused |
Animation value |
Use | Description |
---|---|---|
0 | most levels | no palette changes |
1 | A4 | random lightning (with thunder soundeffect) |
2 | C8-C10 | cycling: red -> yellow -> white |
3 | A7 | cycling: red -> green -> blue |
4 | A8, B3, B4, B7 | cycling: black -> grey -> white |
5 | C6, C7 | flashing: red -> magenta -> white |
6 | C1 | replace dark magenta with black, no animation unless triggered by a bomb actor. (ONLY PRESENT IN COSMO3.EXE.) |
7 | None | no palette changes |
Background Layer
The bgLayer block contains the grid/cell data:
Data type | Description |
---|---|
UINT16LE iMapData[32764] | Actual map data |
Each "element" in iMapData refers to the foreground and/or background tile used in a single grid cell. The grids are arranged left to right, top to bottom, so the index can be calculated by this formula:
int iIndex = (y * iMapWidth) + x; iMapData[iIndex] = <new value to set at x,y>
The map data in the original Cosmo level files is a constant 32764 UINT16LE cells long (65528 bytes), and the engine will never read more than 65535 bytes. However, the game calculates the map height using this formula:
int iMapHeight = 32768 / iMapWidth - 1;
Since the width of the map is always a power of 2 (min. 64), you can see that each of the original level files is "missing" 8 Bytes (or 4 Words). That means the last line of the map will always be missing the last 4 tiles. The game ignores that last, incomplete line (hence the -1 in the formula). However, in one level (A8.MNI), there is an actor placed in that last line. Since actors are saved as individual structures instead of a grid, that actor will still be loaded by the game. For editing a level, you should make sure the last line is visible, so that it's possible to place actors in that line or remove them from there. Using a buffer of at least 65536 bytes for the level tiles is highly recommended for this.
Mapping cell values to tiles
The method of mapping elements in the iMapData structure into tiles is fairly straightforward. Each cell value is a pixel index into the tilemap. Imagine the tileset laid out left to right all on the one row. Since each tile is 8x8 pixels, at 16 pixels into the image, the third tile will begin (x = 0 for first tile, x = 8 for second tile, x = 16 for third tile.) Assuming the solid/unmasked tileset graphics are layed out as an 8 pixel wide column, the cell value is essentially a pixel y-coordinate into the solid/unmasked tileset.
Note that in the tileset file, the solid tiles are made up of 2000 4-plane (16-colour) images, and these are followed by 1000 5-plane images (16-colour + transparency.) The game interprets any value smaller than 16000 as an index into the solid/unmasked tileset. Any other value will be treated as an index into the masked tileset (the offset 16000 is subtracted, of course). The cell value will be zero for the first solid tile, it will be eight for the second solid tile, it will be 15992 for the last solid tile, and it will be 16000 for the first masked tile.
This means that if the solid and masked tiles have been treated as separate images, a check will need to be performed so that any cell value below 16000 is loaded from the solid tileset, and any value larger than this is loaded from the masked tileset (after subtracting 16000 from the cell value, to put it at zero for the first masked tile.) However, since the masked tiles consist of five planes, the values for the masked tiles are at multiples of five tiles (tile #0 (x=0) is the first tile, tile #5 (x=40) is the second tile.) The following formula can be used to convert the values into tile numbers once they stray into the masked tile area:
#define COSMO_TS_SOLID_NUMTILES 2000 // 40x25 #define COSMO_TS_MASKED_NUMTILES 1000 // 40x4 tile = cell_value / 8 if (tile > COSMO_TS_SOLID_NUMTILES) { // Once we're in the masked tileset it counts up in multiples of five planes tile = COSMO_TS_SOLID_NUMTILES + (tile - COSMO_TS_SOLID_NUMTILES) / 5; } // Now 'tile' will be between 0 and 2999 inclusive
As an example of a few tile values:
Cell value | Tile number | Tileset | Index | Comments |
---|---|---|---|---|
0 | 0 | N/A | N/A | See through to map backdrop |
8 | 1 | Solid | 1 | First solid tile, note increment of 8 |
16 | 2 | Solid | 2 | Second solid tile, increment of 8 again |
15992 | 1999 | Solid | 1999 | Last solid tile |
16000 | 2000 | Masked | 0 | First masked tile |
16040 | 2001 | Masked | 1 | Second masked tile, note increment of 40 |
16080 | 2002 | Masked | 2 | Third masked tile, increment of 40 again |
55960 | 2999 | Masked | 999 | Last masked tile |
56000 | N/A | N/A | N/A | Should never get a value this size or larger |
Note that while the cell value cannot be out of range for the solid tiles/background layer (since any values larger than 16000 will be loaded from the masked tileset) the cell values for the masked tileset have no such restriction. (Although obviously out of range tiles will not be drawn correctly by the engine!)
Another thing to keep in mind is that the game will simply draw the background for any cell value smaller than 80. The first ten tiles in the tileset are never drawn in the game, but they should be drawn by a level editor.
Gotchas
- The first ten tiles in the solid tileset is used as transparent tiles. The game does not draw these tile, so any cells with this as the background cell will be where the map backdrop shows through. If you wish to draw the map with the backdrop in-place, remember not to draw tile #0 over the top of the backdrop.
- The solid tiles #1 to #8 are used to define a path, along which the platforms move in the game. The path should be laid out in a loop and should never lead to a non-direction tile. If tile #0 is part of the path, the platform will stop moving once it reaches that cell. Any tile larger than #8 will lead to the game reading memory beyond an array boundary, which will result in undefined behavior.
Actor data
The actorData block is in the following format:
Data type | Description |
---|---|
UINT16LE iType | Type of actor |
UINT16LE iX | X-coordinate of actor (in tile units) |
UINT16LE iY | Y-coordinate of actor (in tile units) |
Because the iActorSize value in the header is in UINT16s and there are three UINT16s per actor, the number of actors can be obtained quite simply:
iNumActors = iActorSize / 3
This is exactly how the game treats this value.
Mapping Actor Types to image indices
For the ActorTypes from 31 to 296 (inclusive), you can get an image index from ACTORS.MNI and ACTRINFO.MNI like this:
ImageIndex = ActorType - 31
However, this does not work for every ActorType. Some share the same images (e.g.: normal stars and falling stars), some use flipped versions of other images (like the pink eye plants) and some are invisible in the game. In either case, the index in the ACTRINFO.MNI will be "empty". You will either have to include hard-coded info to draw these, or just draw something else (like the actual ActorType as text).
List of Actor Types
This is a list of all the actor types that are actually used by the game. Any value not listed here will be ignored by the game.
Limitations:
- Using more than 10 platforms or more than 10 mud fountains (total) in a level will lead to memory corruption.
- There can be up to 199 lights in a level (if there are more, the game will ignore the rest).
- There can be up to 410 actors in a level. Anything with a type value of 31 and above counts as an actor, but invalid/unused types will not take up an actor slot. The game will stop parsing the actorData array immediately after spawning actor #410, ignoring any other data that might be left in the unparsed part of the array, such as platforms, mud fountains, ligths and even Cosmo.
Type | Actor Sprite |
X | Y | Description |
---|---|---|---|---|
0 | N/A | x | y | Cosmo (Starting position, facing right) |
1 | N/A | x | y | moving platform (fixed path) |
2 | 79 | x-1 | y-1 | mud fountain 1 (small) |
3 | 79 | x-1 | y-1 | mud fountain 2 (medium) |
4 | 79 | x-1 | y-1 | mud fountain 3 (large) |
5 | 79 | x-1 | y-1 | mud fountain 4 (huge) |
6 | N/A | x | y | light shining down (left side) |
7 | N/A | x | y | light shining down (middle) |
8 | N/A | x | y | light shining down (right side) |
Type | Actor Sprite |
X | Y | Description |
---|---|---|---|---|
31 | 0 | x | y | CRATE: empty |
32 | 1 | x | y | BONUS: Star (200) |
33 | 2 | x | y | PLAT: Floor Spring |
34 | 3 | x | y | HAZARD: Extending Arrow Spear (from right to left) |
35 | 4 | x-4 | y | HAZARD: Extending Arrow Spear (from left to right) |
36 | 5 | x | y | HAZARD: Plasma Fireball (from right to left) |
37 | 5 | x-1 | y | HAZARD: Plasma Fireball (from left to right) |
38 | 7 | x | y+1 | Blue Switch (on ceiling) |
39 | 8 | x | y+1 | Red Switch (on ceiling) |
40 | 9 | x | y+1 | Green Switch (on ceiling) |
41 | 10 | x | y+1 | Yellow Switch (on ceiling) |
42 | 11 | x | y | Blue Door |
43 | 12 | x | y | Red Door |
44 | 13 | x | y | Green Door |
45 | 14 | x | y | Yellow Door |
47 | 16 | x | y | OBJECT: Blue Mobile Trampoline Car |
48 | 17 | x | y | HAZARD: Non-Retracting Spikes |
49 | 18 | x | y | HAZARD: Retracting Spikes |
51 | 20 | x | y | HAZARD: Big Saw Blade (moving up/down) |
53 | 20 | x | y | HAZARD: Big Saw Blade (moving left/right) |
55 | 24 | x | y | HAZARD: Activated Bomb |
56 | 25 | x | y | HAZARD: Green Pruny Cabbage Ball (takes 1 hit) |
59 | 28 | x | y | BONUS: Power Up (health/12800) |
60 | 29/28 | x | y | BARREL: Power Up (health/12800) |
62 | 0/32 | x | y | CRATE: Green Tomato |
63 | 32 | x | y | BONUS: Green Tomato (falling) |
64 | 0/33 | x | y | CRATE: Tomato (200) |
65 | 33 | x | y | BONUS: Tomato (falling) |
66 | 0/36 | x | y | CRATE: Yellow/Cyan Fruit |
67 | 36 | x | y | BONUS: Yellow/Cyan Fruit (falling) |
68 | 0/38 | x | y | CRATE: Cyan Fruit |
69 | 38 | x | y | BONUS: Cyan fruit (falling) |
70 | 39 | x | y | OBJECT: Exit Sign (ends level on touch) |
71 | 41 | x | y | HAZARD: Spear (not moving) |
72 | 41 | x | y | HAZARD: Spear (coming down from ceiling) |
73 | 43 | x | y+1 | HAZARD: Leaking Green Acid |
74 | 43 | x | y+1 | HAZARD: Dripping Green Acid |
75 | 44 | x | y | ENEMY: Plasma Energy Sprites (Blue Flame-like creatures) |
76 | 45 | x | y | HAZARD: "Two Tons" Weight going down & up |
77 | 46 | x | y | ENEMY: Jumping Bulletheads |
78 | 47 | x | y | ENEMY: Stone Heads (Only drops when Cosmo is close by) |
79 | 49 | x | y+1 | HAZARD: Big Yellow Spike on ceiling |
80 | 49 | x | y+1 | HAZARD: Big Yellow Spike on ceiling (falling down) |
81 | 49i | x | y | HAZARD: Big Yellow Spike on ground |
82 | 51 | x | y | ENEMY: Ghost |
83 | 0/135 | x | y | CRATE: Green thing |
84 | 0/136 | x | y | CRATE: Blue thing |
85 | 54 | x | y | ENEMY: Angry Moon (blue floating characters) |
86 | 55 | x | y | ENEMY: Small Red Plant |
87 | 29/57 | x | y | BARREL: Bomb (100) |
88 | 57 | x | y | BONUS: Bomb (100) |
89 | 29/2 | x | y | BARREL: Floor Spring |
90 | 60 | x | y | OBJECT: switch (1) (Activates moving platform(s)) |
92 | 60 | x | y | OBJECT: switch (2) (Activates Question Mark Block Wall Generator) |
93 | 62 | x | y | OBJECT: Question Mark Block (Generates a wall when activated by switch) |
94 | 63 | x | y | HAZARD: Ground Claw Spikes |
95 | 64 | x | y | OBJECT: Rubber Wall (can blow it up, throws Cosmo backwards when touched) |
96 | 65 | x | y | ENEMY: Mini Ghost (jumps) |
97 | 68 | x | y | HAZARD: Flashing ball projectile (Moving South West) |
98 | 68 | x | y | HAZARD: Flashing ball projectile (Moving South East) |
99 | 68 | x | y | HAZARD: Flashing ball projectile (Moving South) |
100 | 69 | x | y | CREATURE: Green Roamer Worm |
101 | 70 | x | y | PIPE TRANSIT DIRECTION: Arrow Up |
102 | 71 | x | y | PIPE TRANSIT DIRECTION: Arrow Down |
103 | 72 | x | y | PIPE TRANSIT DIRECTION: Arrow Left |
104 | 73 | x | y | PIPE TRANSIT DIRECTION: Arrow Right |
105 | 75 | x | y | ENEMY: Egg Head (cracks when player is near) |
106 | 75 | x | y | ENEMY: Egg Head (cracks when pounced) |
109 | 78 | x | y | ENEMY: Robotic Spike on ground |
111 | 80 | x | y+2 | ENEMY: Robotic Spike on ceiling |
112 | 0/82 | x | y | CRATE: Burger |
113 | 82 | x | y | BONUS: Burger |
114 | 83 | x | y | ENEMY: Blue/Red Clam Plant on ground |
115 | 83i | x | y+2 | ENEMY: Blue/Red Clam Plant on ceiling |
116 | 85 | x | y+2 | BONUS: Purple Grapes (800) |
117 | 86 | x | y | ENEMY: Blue Ball |
118 | 87 | x | y | HAZARD: Spikes (on left wall) |
119 | 88 | x | y | HAZARD: Retracting Spikes (on left wall) |
120 | 89 | x-3 | y | ENEMY: Spikes (on right wall) |
121 | 90 | x | y | ENEMY: Robot with Blue Vertical Electric Arc |
122 | 91 | x | y | PLAT: Blue Platform (splits open when standing on top) |
123 | 92 | x | y | ENEMY: Spark |
124 | 0/94 | x | y | CRATE: Cyan Dancing Mushroom (400) |
125 | 94 | x | y | BONUS: Cyan Dancing Mushroom (400) |
126 | 95 | x | y | DECO: Pink Eye Plant |
127 | 95i | x | y+1 | DECO: Pink Eye Plant (hanging upside down) |
131 | 29/251 | x | y | BARREL: Cabbage Monster (see type 282) |
132 | 101 | x | y | ENEMY: Big Red Jumper (NOT IMPLEMENTED IN COSMO1!) |
133 | 102 | x | y | ENEMY: BOSS (Purple Alien in Spike-bottomed ship) (NOT IMPLEMENTED IN COSMO2!) |
135 | 105 | x-1 | y+2 | PNEUMATIC PIPES: Exit |
136 | 105 | x-1 | y+2 | PNEUMATIC PIPES: Entrance |
137 | 106 | x | y | ENEMY: Suction-Cup-Legged Alien |
138 | 108 | x | y | OBJECT: Teleporter A |
139 | 108 | x | y | OBJECT: Teleporter B |
140 | 68 | x | y | HAZARD: Flashing ball projectile (Moving West) |
141 | 68 | x | y | HAZARD: Flashing ball projectile (Moving East) |
142 | 112 | x-3 | y | ENEMY: Cyan Spitting Plant (on left wall) |
143 | 111 | x | y | ENEMY: Cyan Spitting Plant (on right wall) |
144 | 113 | x | y | ENEMY: Blue Turret Alien |
145 | 114 | x | y | PLAT: Hoverboard |
146 | 0/138 | x | y | CRATE: pile of green balls |
147 | 0/139 | x | y | CRATE: blue/yellow fruit |
148 | 29/140 | x | y | BARREL: Saxophone-like thing |
149 | 118 | x | y | ENEMY: Red Chomper Alien |
150 | 0/137 | x | y | CRATE: Salad |
151 | 60 | x | y | switch (3) (Activates lights, if actors 6,7, & 8 are present in level.) |
152 | 60 | x | y | switch (4) (Deactivates Actors 153 & 154; Energy Beams) |
153 | 122 | x | y | HAZARD: Vertical Energy Beam (Deactivated by Switch) |
154 | 123 | x | y | HAZARD: Horizontal Energy Beam (Deactivated by Switch) |
155 | 124 | x | y | ENEMY: Pink slug/Worm (Turns to bubbling goo when jumped upon) |
156 | 125 | x | y | HINT GLOBE #0: "These hint globes will help you along your journey. Press the up key to reread them." |
157 | 126 | x | y | ENEMY: Silver Robot (pushes player around) |
158 | 127 | x | y | ENEMY: Security Robot (shoots flashing bullet, can act as moving floor spring) |
159 | 128 | x | y | HAZARD: Bubbling pink goo (see type 155) |
160 | 129 | x | y | PLAT/HAZARD: Dragonfly |
161 | 130 | x | y | Slug Box (explodes and spawns a slug, can only be destroyed safely with bombs) |
165 | 134 | x | y | BONUS: Bottle with red liquid |
166 | 135 | x | y | BONUS: Green thing |
167 | 136 | x | y | BONUS: Blue thing |
168 | 137 | x | y | BONUS: Salad? |
169 | 138 | x | y | BONUS: Pile of green balls |
170 | 139 | x | y | BONUS: Blue/yellow fruit |
171 | 140 | x | y | BONUS: Saxophone-like thing |
172 | 141 | x | y+2 | BONUS: blue thing |
173 | 29/134 | x | y | BARREL: Bottle with red liquid |
174 | 143 | x | y | DECO/BONUS: Satellite (can be destroyed with bombs, spawns a hamburger) |
176 | 145 | x | y | ENEMY: Green Ivy Plant |
177 | 146 | x | y+2 | BONUS: 5 Yellow Grapes (800) |
178 | 147 | x | y | BONUS: Headdress-like object |
179 | 0/147 | x | y | CRATE: with item 178 |
180 | 149 | x-4 | y | EXIT: Jaws & Tongue (facing left) |
181 | 150 | x | y | EXIT: invisible exit marker (go right to exit) |
182 | 151 | x | y | HAZARD: small flame |
183 | 152 | x | y | ENEMY: Big Red Plant (spitting Blue Balls/catapult) |
184 | 153 | x | y | BONUS: Red/green gem |
185 | 154 | x | y | BONUS: Blue Crystal (on ground) |
186 | 155 | x | y | BONUS: Red Crystal (on ground) |
187 | 29/153 | x | y | BARREL: Red/Green Gem |
188 | 29/154 | x | y | BARREL: Blue Crystal |
189 | 29/155 | x | y | BARREL: Red Crystal |
190 | 32 | x | y | BONUS: Green Tomato (floating) |
191 | 34 | x | y | BONUS: Tomato (floating) |
192 | 36 | x | y | BONUS: Yellow/Cyan Fruit (floating) (200) |
193 | 162 | x | y | HAZARD: Clamp Trap |
194 | 163 | x | y | PLAT: Blue Cube (falls down when you walk off) |
195 | 164 | x | y | TRIGGER: "What's happening? Is Cosmo falling to his doom?" (ONLY IN COSMO1!) |
196 | 164 | x | y | TRIGGER: "Is there no end to this pit? An what danger awaits below?!" (ONLY IN COSMO1!) |
197 | 164 | x | y | TRIGGER: Win game (ONLY IN COSMO1!) |
198 | 0/168 | x | y | CRATE: Root (400) |
199 | 168 | x | y | BONUS: Root |
200 | 0/170 | x | y | CRATE: 4 Brown Berries (400) |
201 | 170 | x | y | BONUS: 4 Brown Berries |
202 | 0/172 | x | y | CRATE: Potato-like vegetable |
203 | 172 | x | y | BONUS: Potato-like vegetable |
204 | 29/174 | x | y | BARREL: Green Gem |
205 | 174 | x | y | BONUS: Green Gem |
206 | 29/176 | x | y | BARREL: Diamond (3200) |
207 | 176 | x | y | BONUS: Diamond |
208 | 177 | x | y | MESSAGE: Floating score effect (100) |
209 | 178 | x | y | MESSAGE: Floating score effect (200) |
210 | 179 | x | y | MESSAGE: Floating score effect (400) |
211 | 180 | x | y | MESSAGE: Floating score effect (800) |
212 | 181 | x | y | MESSAGE: Floating score effect (1600) |
213 | 182 | x | y | MESSAGE: Floating score effect (3200) |
214 | 183 | x | y | MESSAGE: Floating score effect (6400) |
215 | 184 | x | y | MESSAGE: Floating score effect (12800) |
217 | 186 | x | y | EXIT: Alien-Eating Space Plant (Exits the current level) |
218 | 187 | x | y | ENEMY: Blue Bird |
219 | 188 | x | y | OBJECT: Rocket |
220 | 189 | x | y | BONUS: Invincibility Cube |
221 | 192 | x | y | PLAT: Destructible Pedestal 1 (14 tiles high) |
222 | 192 | x | y | PLAT: Destructible Pedestal 2 (20 tiles high) |
223 | 192 | x | y | PLAT: Destructible Pedestal 3 (26 tiles high) |
224 | 29/194 | x | y | BARREL: Diamond 2 |
225 | 194 | x | y | BONUS: Diamond 2 (falling) |
226 | 29/196 | x | y | BARREL: Red Berry |
227 | 196 | x | y | BONUS: Red Berry (falling) |
228 | 29/198 | x | y | BARREL: Crystal (800) |
229 | 198 | x | y | BONUS: Crystal (falling) |
230 | 29/200 | x | y | BARREL: Blue Gem |
231 | 200 | x | y | BONUS: Blue Gem (falling) |
232 | 201 | x | y | Invincibility Shield (automatically makes player invincible when it becomes visible) |
233 | 202 | x | y+2 | DECO: Rocket Exhaust |
234 | 108 | x | y | EXIT: Teleporter |
235 | 125 | x | y | HINT GLOBE #1: "Bump head into switch above!" |
236 | 125 | x | y | HINT GLOBE #2: "The ice in this cave is very, very slippery." |
237 | 125 | x | y | HINT GLOBE #3: "Use this shield for temporary invincibility." |
238 | 125 | x | y | HINT GLOBE #4: "You found a secret area!!! Good Job!" |
239 | 125 | x | y | HINT GLOBE #5: "In hight places look up to find bonus objects." |
240 | 125 | x | y | HINT GLOBE #6: "Out of Order..." |
241 | 125 | x | y | HINT GLOBE #7: "This might be a good time to save your game!" |
242 | 125 | x | y | HINT GLOBE #8: "Press your up key to use the transporter." |
243 | 125 | x | y | HINT GLOBE #9: "(1) FOR..." |
244 | 194 | x | y | BONUS: Diamond 2 |
245 | 196 | x | y | BONUS: Red Berry |
246 | 198 | x | y | BONUS: Crystal |
247 | 200 | x | y | BONUS: Blue Gem (800) |
248 | 2i | x | y | PLAT: Ceiling Spring |
249 | 29/220 | x | y | BARREL: Headphones |
250 | 220 | x | y | BONUS: Headphones |
251 | 220 | x | y | BONUS: Headphones (falling) |
252 | 221 | x | y | OBJECT: Frozen Duke NukUm (IMPLEMENTED ONLY IN COSMO2!) |
254 | 223 | x | y | BONUS: 3 Bananas (800) |
255 | 0/226 | x | y | CRATE: Alien Raisin |
256 | 226 | x | y | BONUS: Alien Raisin (400) |
257 | 226 | x | y | BONUS: Alien Raisin (falling) (400) |
258 | 0/229 | x | y | CRATE: Brown Pear |
259 | 229 | x | y | BONUS: Brown Pear |
260 | 229 | x | y | BONUS: Brown Pear (falling) |
261 | 0/232 | x | y | CRATE: Alien Chili Pepper |
262 | 232 | x | y | BONUS: Alien Chili Pepper (400) |
263 | 232 | x | y | BONUS: Alien Chili Pepper (falling) (400) |
264 | 233 | x-1 | y | HAZARD: Flame (<-) |
265 | 234 | x | y | DANGER: Flame (->) |
266 | 235 | x | y | MESSAGE: "OUCH!" (Speech bubble) |
267 | 237 | x | y+1 | HAZARD: Leaking Red acid |
268 | 237 | x | y+1 | HAZARD: Dripping Red Acid |
269 | 125 | x | y | HINT GLOBE #10: "(2) EXTRA..." |
270 | 125 | x | y | HINT GLOBE #11: "(3) POINTS,..." |
271 | 125 | x | y | HINT GLOBE #12: "(4) DESTROY..." |
272 | 125 | x | y | HINT GLOBE #13: "(5) HINT..." |
273 | 125 | x | y | HINT GLOBE #14: "(6) GLOBES!!!" |
274 | 125 | x | y | HINT GLOBE #15: "The Clam Plants won't hurt you if their mouths are closed."+Clam Sprite |
275 | 244 | x | y | MESSAGE: "WHOA!" (Speech bubble) |
276 | 245 | x | y | MESSAGE: "UMPH!" (Speech bubble) |
277 | 246 | x | y | MESSAGE: "WOW! 50,000 POINTS!" (Speech bubble) |
278 | 247 | x | y | EXIT: Big Mouth (facing up) (ends the level ONLY IN COSMO2!) |
279 | 248 | x | y | DECO: Normal Smoke Rising |
280 | 249 | x | y | DECO: Big Smoke rising |
281 | 250 | x | y | EXIT: Exits the level when Cosmo is below the position |
282 | 25 | x | y | ENEMY: Green Pruny Cabbage Ball (takes 2 hits) |
283 | 155 | x | y+1 | BONUS: Red Crystal on ceiling |
284 | 125 | x | y | HINT GLOBE #16: "Collect the STARS to advance to BONUS STAGES." |
285 | 125 | x | y | HINT GLOBE #17: "Some creatures require more than one pounce to defeat!" |
286 | 125 | x | y | HINT GLOBE #18: "Cosmo can climb wall's with his suction hands."+CosmoWallSprite |
287 | 125 | x | y | HINT GLOBE #19: (unused) |
288 | 125 | x | y | HINT GLOBE #20: (unused) |
289 | 125 | x | y | HINT GLOBE #21: (unused) |
290 | 125 | x | y | HINT GLOBE #22: (unused) |
291 | 125 | x | y | HINT GLOBE #23: (unused) |
292 | 125 | x | y | HINT GLOBE #24: (unused) |
293 | 125 | x | y | HINT GLOBE #25: (unused) |
294 | 28 | x | y | BONUS: Power Up Module (falling) (health/12800) |
295 | 1 | x | y | BONUS: Star (falling) (200) |
296 | 265 | x | y+3 | EXIT: Game is won when Cosmo is above this position |
The hint texts are the messages you get in episode 1, the other episodes have different (and less!) messages. The unused hint globes will animate and can be blown up, but they will not show a message.
Credits
This file format was reverse engineered by Dave Bollinger. Most of this info came from the Duke II specs on his website, with Malvineous working out which bits to remove to read Cosmo maps. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)