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

Here is where to post about the latest Commander Keen fangame or modification you've finished, a new website you've made, or another Keen-related creation.
Post Reply
User avatar
K1n9_Duk3
Vorticon Elite
Posts: 781
Joined: Mon Aug 25, 2008 9:30
Location: Germany
Contact:

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

Post 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
Last edited by K1n9_Duk3 on Sat Nov 05, 2016 21:40, edited 7 times in total.
Hail to the K1n9, baby!
http://k1n9duk3.shikadi.net
User avatar
DHeadshot
Vorticon Elite
Posts: 1874
Joined: Fri Aug 14, 2009 10:21
Location: UK
Contact:

Post by DHeadshot »

This is awesome! Unfortunately, neither version of Zoltan's Revenge will open on it...
Cereal Board!
Deltamatic wrote:Prepositions are things I end sentences with.
(Cereal wiki has sadly died)
User avatar
Roobar
Vorticon Elite
Posts: 3267
Joined: Tue Jan 08, 2008 16:12
Contact:

Post by Roobar »

Ha! Already loving it! <spoiler
User avatar
tulip
Flower Pot
Posts: 2520
Joined: Thu Aug 21, 2008 12:50
Location: Hamburg, Germany
Contact:

Post 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.
Image You crack me up little buddy!
User avatar
K1n9_Duk3
Vorticon Elite
Posts: 781
Joined: Mon Aug 25, 2008 9:30
Location: Germany
Contact:

Post 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.
Hail to the K1n9, baby!
http://k1n9duk3.shikadi.net
User avatar
DHeadshot
Vorticon Elite
Posts: 1874
Joined: Fri Aug 14, 2009 10:21
Location: UK
Contact:

Post 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...
Cereal Board!
Deltamatic wrote:Prepositions are things I end sentences with.
(Cereal wiki has sadly died)
User avatar
K1n9_Duk3
Vorticon Elite
Posts: 781
Joined: Mon Aug 25, 2008 9:30
Location: Germany
Contact:

Post 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.
Hail to the K1n9, baby!
http://k1n9duk3.shikadi.net
User avatar
Levellass
S-Triazine
Posts: 5265
Joined: Tue Sep 23, 2008 6:40

Post 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
What you really need, not what you think you ought to want.
User avatar
StupidBunny
format c:
Posts: 2155
Joined: Fri Nov 02, 2007 19:19
Location: The Centre of the Moon
Contact:

Post by StupidBunny »

Levellass wrote:I have a program to export levels as bitmaps lying around, not so much a viewer though...
Link? :3
Image
User avatar
K1n9_Duk3
Vorticon Elite
Posts: 781
Joined: Mon Aug 25, 2008 9:30
Location: Germany
Contact:

Post 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.
Hail to the K1n9, baby!
http://k1n9duk3.shikadi.net
Ceilick
The Dude
Posts: 1670
Joined: Mon Sep 22, 2008 20:10
Location: Seattle

Post 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.
User avatar
K1n9_Duk3
Vorticon Elite
Posts: 781
Joined: Mon Aug 25, 2008 9:30
Location: Germany
Contact:

Post 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.
Hail to the K1n9, baby!
http://k1n9duk3.shikadi.net
User avatar
Levellass
S-Triazine
Posts: 5265
Joined: Tue Sep 23, 2008 6:40

Post 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.
What you really need, not what you think you ought to want.
User avatar
K1n9_Duk3
Vorticon Elite
Posts: 781
Joined: Mon Aug 25, 2008 9:30
Location: Germany
Contact:

Post 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.
Last edited by K1n9_Duk3 on Sat Nov 05, 2016 21:42, edited 1 time in total.
Hail to the K1n9, baby!
http://k1n9duk3.shikadi.net
User avatar
ckguy
Bipship Engineer
Posts: 1169
Joined: Thu Nov 01, 2007 17:56
Location: Wakefield, RI, US
Contact:

Post 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.)
Post Reply