Page 1 of 7

Level Viewer for KEEN VORTICONS and GALAXY (and more...)

Posted: Thu Feb 03, 2011 17:09
by K1n9_Duk3
And here comes another pointless new level viewer from K1n9_Duk3. And this time, it's actually Keen-related!

This neat little program lets you view the levels from all the Keen games with the actual tile graphics being read from the game's graphics files. So this is basically TED5 minus map editing capabilities, but plus Win32 code and PNG export for EACH of the level planes. It should help you to create map graphics for the keenwiki.

Works on (almost) every EGA version of the games! (See "readme.txt" for a list of supported games.)

If you've got a version that isn't supported by the viewers yet, let me know so I can add support for them!

GalaxyView

VorticonView

Posted: Thu Feb 03, 2011 17:48
by DHeadshot
This is awesome! Unfortunately, neither version of Zoltan's Revenge will open on it...

Posted: Thu Feb 03, 2011 19:56
by Roobar
Ha! Already loving it! <spoiler

Posted: Thu Feb 03, 2011 21:57
by tulip
hah, I was just talking to spleen about this today. There never has been a satisfying way to display Galaxy levels, if you can get it to display sprites as well, this'll be awesome.

Posted: Thu Feb 03, 2011 22:26
by K1n9_Duk3
tulip wrote:hah, I was just talking to spleen about this today. There never has been a satisfying way to display Galaxy levels, if you can get it to display sprites as well, this'll be awesome.
Sprites shouldn't be a big problem I just need a mapping from the tile number placed in the infoplane to the sprite's chunk number in the EGAGRAPH file. If you know how they are mapped, tell me.

Posted: Thu Feb 03, 2011 23:06
by DHeadshot
Can you do one for Vorticons too? There are millions of level editors but they're incredibly complicated if you just want to view the level...

Posted: Thu Feb 03, 2011 23:37
by K1n9_Duk3
DHeadshot wrote:Can you do one for Vorticons too? There are millions of level editors but they're incredibly complicated if you just want to view the level...
I'll see what I can do.
DHeadshot wrote:Unfortunately, neither version of Zoltan's Revenge will open on it...
I just downloaded both archives and looked at the files from the demo.zip. First of all, the files need to be named correctly. So you need to rename th *HED.* files to *HEAD.* so that the viewer will recognize and read the files. The next thing ist tricky, because the MAPHEAD and EGAHEAD are both one byte too big. The first byte in both files must be ignored or the files just don't make sense. (They seem to be patched in the EXE one byte too early so that they might work in the game.) The b*tch is that the entries in the GAMEMAPS file are missing the "!ID!" signature. That's where the viewer (in it's current state) will stop reading the map. But even if I make the program ignore the signature, you will still have to get rid of the first byte in both headers before you can view the maps. But it's not impossible.

In the other archive, the GAMEMAPS file is in a format that's unknown to me at this time, so I don't know how to read the file.

Posted: Fri Feb 04, 2011 3:05
by Levellass
Will we get Keen Dreams support? Or Biomenace? In theory, could this not display the levvels of any GAMEMAPS using game? I can provide info on file locations and suchlike if needed.

Can you do one for Vorticons too? There are millions of level editors but they're incredibly complicated if you just want to view the level...
I have a program to export levels as bitmaps lying around, not so much a viewer though...

The b*tch is that the entries in the GAMEMAPS file are missing the "!ID!" signature. That's where the viewer (in it's current state) will stop reading the map. But even if I make the program ignore the signature, you will still have to get rid of the first byte in both headers before you can view the maps. But it's not impossible.
Your program doesn't read the size of the data? Isn't that what all those dword values are for? So the game knows how much of a file to read? My level editor did that.

...which is why it also is 1 byte too early; my editor did that for a reason I cannot quite remember right now. This is why I junked it.

Sprites shouldn't be a big problem I just need a mapping from the tile number placed in the infoplane to the sprite's chunk number in the EGAGRAPH file. If you know how they are mapped, tell me.
The simplest method would be to use the cache start graphic for each sprite. The following is a list of the cache start\end chunks in Keen. They are a solid list in all three cases.


Keen 4:
%patch $306D2 $82 $00 #Keen Cache start
%patch $3072E $34 $01 #Keen cache end
%patch $3071E $E4 $00 #Soda cache end
%patch $306D4 $E3 $00 #Soda Cache start
%patch $306D6 $E5 $00 #Candybar Cache start
%patch $30720 $E6 $00 #Candybar cache end
%patch $306D8 $E7 $00 #Choc Cache start
%patch $30722 $E8 $00 #Choc cache end
%patch $306DA $E9 $00 #Jawbreaker Cache start
%patch $30724 $EA $00 #Jawbreaker cache end
%patch $306DC $EB $00 #Donut Cache start
%patch $30726 $EC $00 #Donut cache end
%patch $306DF $ED $00 #Icecream Cache start
%patch $30728 $EE $00 #Icecream cache end
%patch $306E0 $EF $00 #Flask Cache start
%patch $3072A $F0 $00 #Flask cache end
%patch $306E2 $FB $00 #Raygun Cache start
%patch $3072C $FC $00 #Raygun cache end
%patch $306E4 $FE $00 #Got stuff Cache start
%patch $3071C $E2 $00 #Got stuff Cache end
%patch $306E6 $3B $01 #Slug Cache start
%patch $30730 $44 $01 #Slug cache end
%patch $306E6 $45 $01 #Mushroom Cache start
%patch $30732 $48 $01 #Mushroom cache end
%patch $306E8 $00 $00 #Dart shooter Cache start
%patch $30734 $44 $01 #Dart shooter cache end
%patch $306EA $49 $01 #Lindsey Cache start
%patch $30736 $4C $01 #Lindsey cache end
%patch $306EC $4D $01 #Inchworm Cache start
%patch $30738 $51 $01 #Inchworm cache end
%patch $306F0 $52 $01 #Smirky Cache start
%patch $3073A $63 $01 #Smirky cache end
%patch $306F2 $64 $01 #Council Member Cache start
%patch $3073C $69 $01 #Council member cache end
%patch $306F4 $6F $01 #Bird Cache start
%patch $3073E $7B $01 #Bird cache end
%patch $306F6 $84 $01 #Mimrock Cache start
%patch $30740 $93 $01 #Mimrock cache end
%patch $306F8 $94 $01 #Dopefish Cache start
%patch $30742 $A4 $01 #Dopefish cache end
%patch $306FA $A5 $01 #Schoolfish Cache start
%patch $30744 $A8 $01 #Schoolfish cache end
%patch $306FC $A9 $01 #Arachnut Cache start
%patch $30746 $AD $01 #Arachnut cache end
%patch $306FE $BB $01 #Skypest Cache start
%patch $30748 $C8 $01 #Skypest cache end
%patch $30700 $C9 $01 #Wormouth Cache start
%patch $3074A $D4 $01 #Wormouth cache end
%patch $30702 $D5 $01 #Lick Cache start
%patch $3074C $E3 $01 #Lick cache end
%patch $30704 $E4 $01 #Airboard Cache start
%patch $3074E $EA $01 #Airboard cache end
%patch $30706 $EB $01 #Bounder Cache start
%patch $30750 $F1 $01 #Bounder cache end
%patch $30708 $F2 $01 #Cloud Cache start
%patch $30752 $F6 $01 #Cloud cache end
%patch $3070A $F7 $01 #Berkeloid Cache start
%patch $30754 $06 $02 #Berkeloid cache end
%patch $3070C $F2 $00 #Gems Cache start
%patch $30756 $FA $00 #Gems cache end
%patch $3070E $7C $01 #Darts Cache start
%patch $30758 $83 $01 #Darts cache end
%patch $30710 $35 $01 #Keen swimming Cache start
%patch $3075A $3A $01 #Keen swimming cache end
%patch $30712 $AF $01 #Sprite Cache start
%patch $3075C $B7 $01 #Sprite cache end
%patch $30714 $B8 $01 #Mine Cache start
%patch $3075E $BA $01 #Mine cache end
%patch $30716 $07 $02 #MoonKeen Cache start
%patch $30760 $08 $02 #MoonKeen cache end
%patch $30718 $6A $01 #Egg Cache start
%patch $30762 $6E $01 #Egg cache end

Keen 5:
%patch $31A16 $006CW #Keen cache start
%patch $31A6A $00CEW #Keen cache end
%patch $31A18 $00D2W #Candy cache start
%patch $31A6C $00D3W #Cache end
%patch $31A1A $00D4W #Mallow cache start
%patch $31A6E $00D5W #Cache end
%patch $31A1C $00D6W #Cola cache start
%patch $31A70 $00D7W #Cache end
%patch $31A1E $00D8W #Stix cache start
%patch $31A72 $00D9W #Cache end
%patch $31A20 $00DAW #Stoopies cache start
%patch $31A74 $00DBW #Cache end
%patch $31A22 $00DCW #Sugar cache start
%patch $31A76 $00DDW #Cache end
%patch $31A24 $00DEW #Keg cache start
%patch $31A78 $00DFW #Cache end
%patch $31A26 $00E0W #Gems cache start
%patch $31A7A $00E8W #Cache end
%patch $31A28 $00E9W #Ammo cache start
%patch $31A7C $00EAW #Cache end
%patch $31A2A $00ECW #Pink shot cache start
%patch $31A7E $00F1W #Cache end
%patch $31A2C $00F2W #Map Keen cache start
%patch $31A80 $011AW #Cache end
%patch $31A2E $0130W #Master cache start
%patch $31A82 $013FW #Cache end
%patch $31A30 $0140W #Shikadi cache start
%patch $31A84 $0150W #Cache end
%patch $31A32 $0151W #Shocksund cache start
%patch $31A86 $0165W #Cache end
%patch $31A34 $0166W #Sphereful cache start
%patch $31A88 $016DW #Cache end
%patch $31A36 $016EW #Sparky cache start
%patch $31A8A $0179W #Cache end
%patch $31A38 $017AW #Mine cache start
%patch $31A8C $0180W #Cache end
%patch $31A3A $0181W #Slicestar cache start
%patch $31A8E $0182W #Cache end
%patch $31A3C $0183W #Robo Red cache start
%patch $31A90 $0188W #Cache end
%patch $31A3E $0189W #Spriogrip cache start
%patch $31A92 $0194W #Cache end
%patch $31A40 $0195W #Ampton cache start
%patch $31A94 $01A0W #Cache end
%patch $31A42 $01A1W #Volte cache start
%patch $31A96 $01A5W #Cache end
%patch $31A44 $01A6W #Purple plat cache start
%patch $31A98 $01A7W #Cache end
%patch $31A46 $01A8W #Spindred cache start
%patch $31A9A $01ABW #Cache end
%patch $31A48 $01ACW #Shelley cache start
%patch $31A9C $01BDW #Cache end
%patch $31A4A $01BEW #Red plat cache start
%patch $31A9E $01BEW #Cache end
%patch $31A4C $01BFW #Small red plat cache start
%patch $31AA0 $01BFW #Cache end
%patch $31A4E $00CFW #Card cache start
%patch $31AA2 $00D1W #Cache end
%patch $31A50 $0126W #Korath cache start
%patch $31AA4 $012FW #Cache end
%patch $31A52 $011BW #Q.E.D cache start
%patch $31AA6 $011DW #Cache end
%patch $31A54 $011EW #? cache start
%patch $31AA8 $0121W #Cache end
%patch $31A56 $0122W #Teleport cache start
%patch $31AAA $0125W #Cache end

Keen 6:
%patch $32414 $34 $00 #Keen cache start
%patch $32464 $95 $00 #Keen cache end
%patch $32416 $96 $00 #Soda cache start
%patch $32466 $97 $00 #Soda cache end
%patch $32418 $98 $00 #Iceblock cache start
%patch $32468 $99 $00 #Iceblock cache end
%patch $3241A $9A $00 #Sundae cache start
%patch $3246A $9B $00 #Sundae cache end
%patch $3241C $9C $00 #Cola glass cache start
%patch $3246C $9D $00 #Cola glass cache end
%patch $3241E $9E $00 #Split cache start
%patch $3246E $9F $00 #Split cache end
%patch $32420 $A0 $00 #Pizza cache start
%patch $32470 $A1 $00 #Pizza cache end
%patch $32422 $A2 $00 #viva cache start
%patch $32472 $A3 $00 #Viva cache end
%patch $32424 $A4 $00 #Gems cache start
%patch $32474 $AC $00 #Gems cache end
%patch $32426 $AD $00 #Raygun cache start
%patch $32476 $AE $00 #Raygun cache end
%patch $32428 $B8 $00 #Map Keen cache start
%patch $32478 $EE $00 #Map Keen cache end
%patch $3242A $00 $00 #???
%patch $3247A $00 $00 #???
%patch $3242C $56 $01 #Bloog cache start
%patch $3247C $5E $01 #Bloog cache end
%patch $3242E $5F $01 #Red blooglet cache start
%patch $3247E $67 $01 #Red blooglet cache end
%patch $32430 $68 $01 #Yellow blooglet cache start
%patch $32480 $70 $01 #Yellow blooglet cache end
%patch $32432 $71 $01 #Blue blooglet cache start
%patch $32482 $79 $01 #Blue blooglet cache end
%patch $32434 $7A $01 #Green blooglet cache start
%patch $32484 $82 $01 #Green blooglet cache end
%patch $32436 $A8 $01 #Platform cache start
%patch $32486 $B0 $01 #Platform cache end
%patch $32438 $83 $01 #Gik cache start
%patch $32488 $8E $01 #Gik cache end
%patch $3243A $8F $01 #Blorb cache start
%patch $3248A $91 $01 #Blorb cache end
%patch $3243C $92 $01 #Bobba cache start
%patch $3248C $9D $01 #Bobba cache end
%patch $3243E $1D $01 #Babobba cache start
%patch $3248E $29 $01 #Baboba cache end
%patch $32440 $FE $00 #Blooguard cache start
%patch $32490 $0C $01 #Bloguard cache end
%patch $32442 $3D $01 #Flect cache start
%patch $32492 $48 $01 #Flect cache end
%patch $32444 $9E $01 #Bip cache start
%patch $32494 $A6 $01 #Bip cache end
%patch $32446 $A7 $01 #Squished Bip cache start
%patch $32496 $A7 $01 #Squished Bip cache end
%patch $32448 $0D $01 #Bipship cache start
%patch $32498 $1C $01 #Bipship cache end
%patch $3244A $2A $01 #Nospike cache start
%patch $3249A $3C $01 #Nospike cache end
%patch $3244C $49 $01 #Orbatrix cache start
%patch $3249C $55 $01 #Orbatrix cache end
%patch $3244E $F6 $00 #Ceilick cache start
%patch $3249E $FD $00 #Ceilick cache end
%patch $32450 $EF $00 #Fleex cache start
%patch $324A0 $F5 $00 #Fleex cache end
%patch $32452 $B7 $00 #Rope cache start
%patch $324A2 $B7 $00 #Rope cache end
%patch $32454 $B6 $00 #Sandwich cache start
%patch $324A4 $B6 $00 #Sandwich cache end
%patch $32456 $B0 $00 #Enemy shot cache start
%patch $324A6 $B5 $00 #Enemy shot cache end
%patch $32458 $B3 $01 #Card cache start
%patch $324A8 $B3 $01 #Card cache end
%patch $3245A $B1 $01 #Molly cache start
%patch $324AA $B2 $01 #Molly cache end

Posted: Fri Feb 04, 2011 5:31
by StupidBunny
Levellass wrote:I have a program to export levels as bitmaps lying around, not so much a viewer though...
Link? :3

Posted: Fri Feb 04, 2011 10:35
by K1n9_Duk3
Levellass wrote:Will we get Keen Dreams support? Or Biomenace? In theory, could this not display the levvels of any GAMEMAPS using game? I can provide info on file locations and suchlike if needed.
I tried Biomenace already, but I think the GAMEMAPS file has a different structure. Much like the GAMEMAPS in the first version of Zoltan's Revenge.

Levellass wrote:Your program doesn't read the size of the data? Isn't that what all those dword values are for? So the game knows how much of a file to read? My level editor did that.

...which is why it also is 1 byte too early; my editor did that for a reason I cannot quite remember right now. This is why I junked it.
I do read the size, but I put in a check to see if the signature is "!ID!". I already removed that check. And witch some hacking (skipping the first byte in both headers), I could read the maps form the second demo of Zoltan's Revenge.

Posted: Fri Feb 04, 2011 14:11
by Ceilick
This is cool :) I agree with Tulip, sprite display would be great. Even still, now there's finally an easy way to get the keen 7-9 maps on the wiki.

I notice in the readme Keen 8 level 6 displaying incorrectly is reported as a bug: Mink has checked this out with his level editor in development and it seems that this is a problem with the keen 8 editmaps file.

Posted: Fri Feb 04, 2011 19:55
by K1n9_Duk3
Ceilick wrote:I notice in the readme Keen 8 level 6 displaying incorrectly is reported as a bug: Mink has checked this out with his level editor in development and it seems that this is a problem with the keen 8 editmaps file.
Phew, then my decompressing routines are okay. :)

I just wanted to tell you that I started working on a similar tool for Keen: Vorticons. Unfortunately, it can only load the graphics from Shadow Knights, Rescue Rover and Dangerous Dave 2 by now (plus DDICI, but with tile graphics read from a PNG file).

UPDATE: Can now load tile graphics from DDICI, Slordax, Keen 2 & 3 and auto-create tiles for Hovertank. Keen 1 won't work until I get an implemantation of the LZW compression done.

Posted: Sat Feb 05, 2011 3:20
by Levellass
Link? :3
Level exporter is here: http://dl.dropbox.com/u/3940020/KeenView%20.zip It should export any Keen 1-3 level it's given as a 16 color bitmap. Sprite translucency is not supported.

Keen 1 won't work until I get an implemantation of the LZW compression done.
Tell me about it, didn't put it in my level viewer, but I did put it in Keengraph, so I know how it works. (Oh and thanks for making my level exporter obsolete!)

Does anyone have a download of Hovertank? I've been wanting to look at its sound files.

I tried Biomenace already, but I think the GAMEMAPS file has a different structure. Much like the GAMEMAPS in the first version of Zoltan's Revenge.
I an inform you of all the differences between various game's formats, and with Biomenace it's not much.

Posted: Sat Feb 05, 2011 18:36
by K1n9_Duk3
Here we go, the Vorticons (& stuff) level viewer got it's LZW-decompression and can now be tested (sorry, no graphics for the infoplane stuff in this one).

VorticonView
Levellass wrote:Oh and thanks for making my level exporter obsolete!

You're welcome! :)


Sprite display in the Galaxy viewer is going well. I've just exported all sprites from Keen 4-6 and BioMenase 1-3 perfectly, so the rest should be a piece of cake.

@Levellass: Try searching for Hovertank on Squakenet. You can use the Hovertank Data Compiler (HDC) to edit/extract everything in that game.
And YES, I'd be interested in the differences.

Posted: Mon Feb 07, 2011 14:11
by ckguy
http://www.bipship.com/vault/anth_hover.zip

^ Hovertank 3D link for you, 'lass. (anth = "Id Anthology" in case you were wondering about the weird filename. I've got all of the games that were on the Id Anthology DOS disc in the Vault section of Bipship.com btw.)