It's official, the Linux port of Zep's Dreamland is now complete. It should run on most flavors of Linux without a problem. However, if you run into some strange issue that is not a specific driver related issue, please let me know. Nothing new has changed in the actual gameplay or levels for anyone who has played the Windows/OS X versions and hoping for something new. 
I'll try it out right now.
Edit: WHAT?!?! No source?
Bad. It won't run on my machine. Mandrake 10. You should really release source so we can compile it and increase the chance of making it work.
Doesn't run on your Mandrake 10? It ran on two other users versions of Mandrake 10. 
(and no, no source for you!)
How am I to play without source to compile
. Any special libs that it requires?
Nope. I statically linked everything I possibly could into it (the only library is uses is Allegro anyways). I'm afraid if it doesn't run you're just out of luck! Sorry!
I'm serious though, I'm not releasing source at this point in time. Sad, but true.
Lets see how many others complain before you release it
.
Yeah, it will take more than every Linux user who can't play the precompiled binary; that's for sure.
No linux fans for you.
I'll have them when the time is right to release the sourcecode, if ever. It's not my fault linux comes in about 50-million different flavors.
Runs fine here on Gentoo. Cool game.
I got stuck though, so I decided to quit and bring some praise.
SSC: Why doesn't it run? What errors do you get?
Write an ebuild for it, submit it to portage, and I will install
It's your fault for depriving us of your game
. Oh well, I can always play it in windows ^_^.
Glad you enjoyed it thusfar. What level did you get stuck on? 
CGames: PM me with more information about ebuild please.
I don't get any errors at all. It looks as if its going to start but then just quits.
SSC: Maybe it's having issues doing windowed mode? You can manually set it to load up in fullscreen mode by editing: data/settings.txt. Change the last line from 1 (windowed) to 0 (fullscreen).
It's your fault for depriving us of your game
. Oh well, I can always play it in windows ^_^.
I still would like to know what problems you were having. I don't think it's a dynamic lib problem:
$ ldd ZepsDreamland
not a dynamic executable
I'd like to know in case I ever decide to release a binary for Linux. Might be a driver problem... is ZepsDreamland able to use Linux Console drivers (ie. SVGALib, fbcon, etc)? If your (Ultio's) static lib build of Allegro doesn't support them, then it won't work for us either. Same goes for any other driver.
It does try to start in fullscreen mode. The screen goes all black as though it were about to start then crashes.
ebuild is gentoo's package construction/management system. It handle dependencies, source compilation, etc.
Allegro 4.1.17's ebuild:
| 1 | # Copyright 1999-2005 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/media-libs/allegro/allegro-4.1.17.ebuild,v 1.2 2005/01/19 00:43:00 wolf31o2 Exp $ |
| 4 | |
| 5 | IUSE="static mmx sse oss alsa esd arts X fbcon svga tetex doc" |
| 6 | |
| 7 | inherit flag-o-matic |
| 8 | |
| 9 | DESCRIPTION="cross-platform multimedia library" |
| 10 | HOMEPAGE="http://alleg.sourceforge.net/" |
| 11 | SRC_URI="mirror://sourceforge/alleg/${P}.tar.gz" |
| 12 | |
| 13 | LICENSE="Allegro" |
| 14 | SLOT="0" |
| 15 | #-amd64, -sparc: inportb, outportb, outportw undefined |
| 16 | KEYWORDS="~alpha -amd64 ~ia64 ~ppc -sparc ~x86" |
| 17 | |
| 18 | RDEPEND="alsa? ( media-libs/alsa-lib ) |
| 19 | esd? ( media-sound/esound ) |
| 20 | arts? ( kde-base/arts ) |
| 21 | X? ( virtual/x11 ) |
| 22 | svga? ( media-libs/svgalib )" |
| 23 | |
| 24 | DEPEND="${RDEPEND} |
| 25 | >=sys-apps/sed-4 |
| 26 | tetex? ( virtual/tetex )" |
| 27 | |
| 28 | src_unpack() { |
| 29 | unpack ${A} |
| 30 | |
| 31 | sed -i \ |
| 32 | -e 's/&_oss_\(numfrags\|fragsize\)/NULL/' \ |
| 33 | "${S}/setup/setup.c" \ |
| 34 | || die "sed failed" |
| 35 | } |
| 36 | |
| 37 | src_compile() { |
| 38 | filter-flags -fPIC -fprefetch-loop-arrays |
| 39 | econf \ |
| 40 | --enable-linux \ |
| 41 | --enable-vga \ |
| 42 | $(use_enable static) \ |
| 43 | $(use_enable static staticprog) \ |
| 44 | $(use_enable mmx) \ |
| 45 | $(use_enable sse) \ |
| 46 | $(use_enable oss ossdigi) \ |
| 47 | $(use_enable oss ossmidi) \ |
| 48 | $(use_enable alsa alsadigi) \ |
| 49 | $(use_enable alsa alsamidi) \ |
| 50 | $(use_enable esd esddigi) \ |
| 51 | $(use_enable arts artsdigi) \ |
| 52 | $(use_with X x) \ |
| 53 | $(use_enable X xwin-shm) \ |
| 54 | $(use_enable X xwin-vidmode) \ |
| 55 | $(use_enable X xwin-dga) \ |
| 56 | $(use_enable X xwin-dga2) \ |
| 57 | $(use_enable fbcon) \ |
| 58 | $(use_enable svga svgalib) \ |
| 59 | || die |
| 60 | |
| 61 | emake -j1 CFLAGS="${CFLAGS}" || die "emake failed" |
| 62 | |
| 63 | if use tetex ; then |
| 64 | addwrite /var/lib/texmf |
| 65 | addwrite /usr/share/texmf |
| 66 | addwrite /var/cache/fonts |
| 67 | make docs-dvi docs-ps || die |
| 68 | fi |
| 69 | } |
| 70 | |
| 71 | src_install() { |
| 72 | addpredict /usr/share/info |
| 73 | make DESTDIR="${D}" \ |
| 74 | install \ |
| 75 | install-gzipped-man \ |
| 76 | install-gzipped-info \ |
| 77 | || die "make install failed" |
| 78 | |
| 79 | # Different format versions of the Allegro documentation |
| 80 | dodoc AUTHORS CHANGES THANKS readme.txt todo.txt |
| 81 | use tetex && dodoc docs/allegro.{dvi,ps} |
| 82 | use doc && dodoc examples/* |
| 83 | dohtml docs/html/* |
| 84 | docinto txt |
| 85 | dodoc docs/txt/*.txt |
| 86 | docinto rtf |
| 87 | dodoc docs/rtf/*.rtf |
| 88 | docinto build |
| 89 | dodoc docs/build/*.txt |
| 90 | } |
So..... it looks like it's got functions for the various tasks involved.... Let's try a binary ebuild, since that's what you'll be using.
Firefox 1.0's ebuild:
| 1 | # Copyright 1999-2004 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/net-www/mozilla-firefox-bin/mozilla-firefox-bin-1.0.ebuild,v 1.2 2004/11/18 21:53:15 agriffis Exp $ |
| 4 | |
| 5 | inherit nsplugins eutils mozilla-launcher |
| 6 | |
| 7 | IUSE="gnome" |
| 8 | |
| 9 | DESCRIPTION="The Mozilla Firefox Web Browser" |
| 10 | SRC_URI="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/1.0/linux-i686/en-US/firefox-${PV}.tar.gz" |
| 11 | HOMEPAGE="http://www.mozilla.org/projects/firefox" |
| 12 | RESTRICT="nostrip" |
| 13 | |
| 14 | KEYWORDS="-* x86 amd64" |
| 15 | SLOT="0" |
| 16 | LICENSE="MPL-1.1 NPL-1.1" |
| 17 | |
| 18 | DEPEND="virtual/libc" |
| 19 | RDEPEND="virtual/x11 |
| 20 | x86? ( |
| 21 | >=sys-libs/lib-compat-1.0-r2 |
| 22 | >=x11-libs/gtk+-2.2 |
| 23 | ) |
| 24 | amd64? ( |
| 25 | >=app-emulation/emul-linux-x86-baselibs-1.0 |
| 26 | >=app-emulation/emul-linux-x86-gtklibs-1.0 |
| 27 | ) |
| 28 | >=net-www/mozilla-launcher-1.22" |
| 29 | |
| 30 | S=${WORKDIR}/firefox |
| 31 | |
| 32 | src_install() { |
| 33 | # Install firefox in /opt |
| 34 | dodir /opt |
| 35 | mv ${S} ${D}/opt/firefox |
| 36 | |
| 37 | # Plugin path setup (rescuing the existing plugins) |
| 38 | src_mv_plugins /opt/firefox/plugins |
| 39 | |
| 40 | # Fixing permissions |
| 41 | chown -R root:root ${D}/opt/firefox |
| 42 | |
| 43 | # mozilla-launcher-1.8 supports -bin versions |
| 44 | dodir /usr/bin |
| 45 | dosym /usr/libexec/mozilla-launcher /usr/bin/firefox-bin |
| 46 | |
| 47 | # Install icon and .desktop for menu entry |
| 48 | if use gnome; then |
| 49 | insinto /usr/share/pixmaps |
| 50 | doins ${FILESDIR}/icon/mozillafirefox-bin-icon.png |
| 51 | # Fix bug 54179: Install .desktop file into /usr/share/applications |
| 52 | # instead of /usr/share/gnome/apps/Internet (18 Jun 2004 agriffis) |
| 53 | insinto /usr/share/applications |
| 54 | doins ${FILESDIR}/icon/mozillafirefox-bin.desktop |
| 55 | fi |
| 56 | |
| 57 | # Normally firefox-bin-0.9 must be run as root once before it can |
| 58 | # be run as a normal user. Drop in some initialized files to |
| 59 | # avoid this. |
| 60 | einfo "Extracting firefox-bin-${PV} initialization files" |
| 61 | tar xjpf ${FILESDIR}/firefox-bin-0.9-init.tar.bz2 -C ${D}/opt/firefox |
| 62 | } |
| 63 | |
| 64 | pkg_preinst() { |
| 65 | export MOZILLA_FIVE_HOME=${ROOT}/opt/firefox |
| 66 | |
| 67 | # Remove the old plugins dir |
| 68 | pkg_mv_plugins /opt/firefox/plugins |
| 69 | |
| 70 | # Remove entire installed instance to prevent all kinds of |
| 71 | # problems... see bug 44772 for example |
| 72 | rm -rf "${MOZILLA_FIVE_HOME}" |
| 73 | } |
| 74 | |
| 75 | pkg_postinst() { |
| 76 | export MOZILLA_FIVE_HOME=${ROOT}/opt/firefox |
| 77 | |
| 78 | update_mozilla_launcher_symlinks |
| 79 | } |
| 80 | |
| 81 | pkg_postrm() { |
| 82 | update_mozilla_launcher_symlinks |
| 83 | } |
Meh. This might help, might not. Looks like you'll need to know bash to do this. Anyways, I haven't really got time to mess with it, sorry.
I have no idea about Linux Console drivers. I'm not that Linux oriented, to be honest. 
SSC: Try modifying the file and testing both modes.
It runs perfectly on my slackware 10. 
except the editor. I get this error:
Error initialising sound system
Insufficient digital voices available
Is anything being done in the Linux world to resolve these kind of problems?
Some kind of framework to integrate different linux versions for example? As in the way DirectX and OpenGL try to make a common method regardless of the actual gfx board used.
Yes, the Linux Standard Base.
Ok.. So is it not being used much yet then?
I don't think so. Many developers are not aware of its existence.
TANSTAAFL: The freedom to install exactly what you want costs you the easy compatibility
.
Works on my mandrake 9.2. I can hear sound, but no music ...
Cant go thru level 10 but just played for a few minutes.
Great game !! 
EDIT: Level editor works perfectly
Any major changes since the last version I was able to try out?
Yes, I agree - it's a very fun game 
About Linux cross-platform compatibility - bear in mind that part of the problem is Linux (or UNIX in general)'s openness: it's not a homogeneous system such as Windows is, but highly adapted and specialized for whatever hardware it's running on. That's the nature of the beast.
I agree that this sucks somewhat for the average home user with his standard PC, but that's not the (original) target user of UNIX systems, and it's great for advanced users with fancy hardware.
Bad. It won't run on my machine. Mandrake 10.
How do you run it? If I double click the file in Konqueror (or any other file manager), it crashes, probably because it doesn't handle paths properly. But if I run it from a console, it works perfectly. Except for music of course, that doesn't work...
Thou were right miran. I didn't check music/sound since I have music playing in the background so I'll check later.
Ultio: I hate to say I told you so, so I'll just say that I warned you about assuming anything about paths and a relation between the location of the executable and the data.
Is there a readme file in the archive? You would probably want to put this in there.
I can hear sound, but no music ...
Your soundcard can't play MIDI then, or you don't have it configured to do that. You can work around that by using Allegro's DIGMID driver. You'll need a patch set, and to create an Allegro config file.
I don't recall being warned about anything.
That wasn't addressed to you 
Now edited for clarity.
Ultio: I hate to say I told you so, so I'll just say that I warned you about assuming anything about paths and a relation between the location of the executable and the data.
get_executable_name(buf, len); (strrchr(buf, '/'))[1] = 0; chdir(buf);
I hate to say I told you so, so I'll just say that I warned you about assuming anything about paths and a relation between the location of the executable and the data.
So, the executable can't open up a file ala: fopen("blah"); even if the file is right there in the same directory (if you open it via some kind of file manager?) That seems rather odd. Is there any reason for doing this or is it just a quirk in the OS?
Nivoc, I'm sorry the editor doesn't run. It doesn't make sense that it even initializes sound. That will be on my list of things to fix up for the next revision!
Jamal, glad you like it. 
Kitty Cat, thanks for that. I'll have to toss that into the code later this weekend and update the game archives as needed.
So, the executable can't open up a file ala: fopen("blah"); even if the file is right there in the same directory (if you open it via some kind of file manager?) That seems rather odd. Is there any reason for doing this or is it just a quirk in the OS?
Has nothing to do with the OS, since you can get the same problem in Windows. There's no guarentee that the directory the exectuable is in is the active directory, ever.
You could argue that the file browser should start the exectable with the current directory as its working directory, but on a system where binaries conventionally live detached from their associated data in a dedicated (part of the) filesystem (namely, /bin or /usr/bin), that's rather bad and pointless behavior too. And ofcourse, it presumes something about the user, namely that he will start the binary through a file browser.
Kitty Cat, thanks for that. I'll have to toss that into the code later this weekend and update the game archives as needed.
Yup, that's the easiest way to do it.
Works perfectly on SUSE 9.2 64 Bit 
[edit]
But if I execute it from Knonqueror it doesn't just quit without any message as SSC said
. It gives an error about not finding the data.
So, the executable can't open up a file ala: fopen("blah"); even if the file is right there in the same directory (if you open it via some kind of file manager?) That seems rather odd. Is there any reason for doing this or is it just a quirk in the OS?
Oddly enough, my OSX system does that same thing 
Heres some code I whipped up to fix the problem (which is being activley used in outer-rim pod digger):
void ConvertToDirectory(char s[]) { int endlength = 0; int spos = 0; while (s[spos] != '\0'){ spos++; endlength++; if(s[spos] == '\\' || s[spos] == '/'){ endlength=0;} } s[spos-endlength] = '\0'; }
Then all you need to do is call something like this:
// Get Executable path, then find executable directory get_executable_name(exe_path, 1024); ConvertToDirectory(exe_path);
This will properley format and store the exact executable path in exe_path. To use the path all you need to do is append it to the names of your data files and bingo. 
Edit
Kitty Cat:
(strrchr(exe_path, '/'))[1] = 0;This line crashes my program. And im really not sure what it does.
And im really not sure what it does.
It finds the last occurance of '/' in the string and replaces the next character with a NULL terminator. Of course if there is no '/' in the string (but a '\\' instead) the code will very likely crash. What I do is this:
get_executable_name(buf, len); (get_filename(buf))[0] = 0;
A new version of the archive is now up at the site which, hopefully, addresses the file browser launching issue. It's the same archive, so if you want the new stuff just download exactly what you did last time.
Runs fine on Mandrake 10 here (only from console)
edit: and no sound, but I have that problem with various things (like flash plug-in)
runs fine on my Gentoo when launcing from console. Opening in KDE gives an allegro message complaining about datafiles not found.
Hm. Still complains about datafiles not being found, eh? I thought I fixed it. I'll have to take a look at it once again.
This is a very fun game. Level 8 is just mean. Level 10 was hard, and level 13 is tricky. I quit when I got to level 14 after seeing all those transporters. My brain can't take much more. Is there a way to save your progress?
[EDIT]
OK, I just did 14. Not that bad. After awhile your mind start to think differently.
Did 15. This is a great game.
16. I can't stop. It's like the game has me in a dream world.
Hit the S key while in gameplay to save your progress. This is one of the major flaws of the game (not having a save game menu item in the main menu list).
Glad you're enjoying it so much.
I actually didn't have any problems finding the s key to safe my progress... I think I was at level 34 or something a few days ago, haven't played since.
Really nice game... must have beenhell to think of all those levels though. I usually have to think a while on each level, even if I do know in principle how to solve it. Really great stuff.
The main reason the game initially took so long to release was because I was brain fried trying to make new and unique levels. It's a hard process once you've used up all of your little "tricks" for making difficult levels. You eventually learn to adapt a little bit. You'd be surprised how many of those difficult levels were created merely out of luck; and by that I mean mashing tiles around and coming up with something I could possibly work with. 
The reason I say this is one of the major flaws of the game is that saving (restarting and changing songs) doesn't adhere very well to the user interface I set up. Everything else in the game is user driven. Of course, I'm not saying the keyboard features should be removed, I just think there should be menu items to accompany them. 
Thanks for the kind words. I'm glad you're having such a fun time with it. Only 6 more levels to go!
Just wanted to say as well, this is a really great game! Thanks a lot. I only have one small suggestion, which is to make switching between windowed and fullscreen modes easier (e.g. ALT+Enter).
If you do more work on this, I'd love to be able to use my gamepad with this game... but, well... wishful thinking I suppose.
That's a really good idea. I don't think it would be too hard to do with the current code I have.
Maybe for a 1.03 or 1.10 release if any of those ever happen?
I can't get level 31. Ultio, anyone?
31 was a little bit tricky. First move right (make sure you replace breaking blocks with new ones, so that you can always walk back) to place a block to prevent you from plunging to your death, then move back left. Go down the left side and enter a teleporter. I don't remember the exact sequence, and I remember screwing up by misplacing a block up to five times after I'd figured it out... anyway, hope this little hint helps some...
Oh, you may have to block the teleporter immediately left from where you started by placing a block over it, I forget... could be another level I'm thinking of.
Let's do it this way. 
I've circled in red the blocks that I can't seem to get read of.
http://www.rickpiller.com/level31.jpg
This is as far as I can get, then I'm stuck
http://www.rickpiller.com/level31a.jpg
Ok, I'll make pictures later on, but first explain.
Remove the far left block you placed (which replaces a crumbling block). Drop down, and build a block under you. Kneel and destroy the block over the crumbling block, destroy the block under you and you can destroy the crumbling block by walking onto it. Drop down and enter the teleporter.
EDIT: pictures


brilliant. Thank you.
I can't save using Ubuntu.
Could not save the save file!
Shutting down Allegro due to signal #11
Segmentation fault
Do you have write permissions in the current directory (ie, teh directory where you started the game from)?
Anyway, I finished the game! Was it just me, or is level 40 extremely easy? I think the level that gave me the most problems was 37, where I had to constantly think ahead to place blocks and I ended up forgetting one or the other during most of my attempts.
Once again, sweet game
I unpacked the game in the home directory, why shouldn't I have write permissions there?
You should. Just asking, since that's one of the things I'd imagine could cause this... do you have enough free space on the filesystem?
Of course I do. The fact you're asking such a basic question seems to suggest there's something more going on here.
Just checking basic things, as I have no idea what might cause such an error... I assume you can save files normally with other Allegro programmes (eg, grabber)?
Yes, I can save with grabber.
Sorry, but I have no idea what Ubuntu is! Hm. It's saying it cannot save the save file, so, obviously, it's trying to save to data/saves. I'm hoping this directory still exists? I'm not sure if gzip leaves out empty folders or whatnot on some systems. This could be the case.
Evert: Level 40 is not the hardest level of them all. With the original release of ZD level 40 was impossible to beat. Somehow my working version never made it to the end game. Thus, I lost what I had thought was the coolest level ever and had to quickly modify level 40 to be beatable. If you're up for more of a challenge grab the extra 10 levels I created. Some of them are pretty basic and easy, while others are pretty tough.
Sorry, but I have no idea what Ubuntu is!
A Linux distribution based on Debian (hmmm, should I add the word GNU to it?
).
Hm. It's saying it cannot save the save file, so, obviously, it's trying to save to data/saves. I'm hoping this directory still exists? I'm not sure if gzip leaves out empty folders or whatnot on some systems. This could be the case.
You've nailed the problem, the directory saves indeed doesn't exist. I used File Roller to unpack the file. You could (and should) easily program for this eventuality.
With the original release of ZD level 40 was impossible to beat.
Ever thought about supplying a solution for every official level and making the program do a correctness test every time one's loaded?
That would be rather impossible seeing as how there are unlimited ways to complete a level. Of course, I could smarten it up so it wouldn't sit in a never-ending loop building up blocks and breaking them over and over again.
It would just be more hassle than what it's worth, in my opinion.
No, I'm not talking about a level solver, just a solution verifier to which you would also supply a human-generated solution.
I used File Roller to unpack the file.
A what?
You may have also tried unpacking with a non broken unpacker.
A what?
File Roller. It's only a graphical front-end.
I was thinking you should create a solution guide. Just a .doc file or something. Might be nice to see how you intended to have us solve it and how we actually solved it. Just a thought.
I was originally going to do this with "replay" files, much like how the credits sequence works where Zep will move on his own. I figured I should best leave it to players to figure out the solutions; that and I'm still waiting for a rogue site to pop up with Zep's Dreamland level solutions. It's just something that I'd like to see happen; you know, boost my ego just a little bit more!
Another issue with the replay files is that they could be easily hacked to make Zep stop "moving" at whatever point someone who knew what the contents meant wanted. Thus, they could implement pseudo saves used to save the game mid-level, which is against the rules of the game.;)
As for the solution verifier, that would be me. I personally went through and verified that all of the levels were in fact beatable. The reason level 40 (unbeatable) slipped through is, as I already said, that either I must have misplaced the working version with a non-working version and missed the switch. It would be pretty slick though.
Are you sure it is legal to distribute the game this way? Doesn't the license of libc (parts of it, anyway) prevent this? I'm curious whether you have looked into this, because I've been thinking of linking one of my own games completely statically, but could never quite figure out which parts of libc are under the GPL variant with the special exception for binaries and which are not.
We got into this issue in the beginning of the thread. As far as I know it should be okay. The only library outside of the standard C/C++ libraries I use is Allegro. If you happened to stumble upon something that might suggest that it isn't legal, then let me know. I'd have to take the game down if it were the case.:-/
Sorry, I didn't mean to be all negative or anything, it's a good game. I read through the beginning and still missed the discussion of this issue.
Oh well, I was sorta hoping you had proven it legal, since I can't quite figure it out, specifically the license of libc. libstdc++ is ok as it's GPL, but with a special exception that allows static linking. I've read posts online that claim at least parts of libc are similarly licensed, but can only find the plain LGPL on its homepage.