Cosmo Level Format

From ModdingWiki
Jump to navigation Jump to search
Cosmo Level Format
Cosmo Level Format.png
Format typeMap/level
Map type2D tile-based
Layer count3
Tile size (pixels)8×8
Viewport (pixels)304×144
Games

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!)