[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: PenguinFile
Christian Reiniger writes:
> ><
> ><Then ppfOpen () needs to be *really* overloaded - and the API would be
> ><unusable from plain C...
> ><
> >Not really, you would only need a single overload; one that took a
> >number, and one that took a string. The string version, I take it, is
>
> The thing is that C does not support function overloading at all.
Yes it does.
ppfOpen(char* string);
ppfOpenById(int id);
:)
But I assume this is not what you meant.
>
> ><>Though, most files ARE really hardcoded into the game, if you look at
>
> ><Hardcoding files in the game is bad practice IMHO. It's perhaps OK for
> >that little oh-lets-write-another-pong-clone-tonight game, but for bigger
> >games it's really bad.
> ><
> >Depends on what you mean by "hardcoded". They wouldn't be hardcoded in
> >that they coudln't change, so they could be updated.
>
> Only by recompiling the game. With "hardcoded" I mean that the names of all
> (or most) of the used files are specified in the code, not in some data
> file.
> A good handling would e.g. be to have a fixed main configuration file
> ("mygamerc") that contains the name of the levels' main map files, which in
> turn contain the names of the mesh/texture/soundeffect/... files they use.
> So you can exchange all game data by simply copying some files around.
>
> ><Occasionally I download a bunch of levels/maps for Quake or Halflife, copy
> ><them to my game dir and thest them (-> the simplicity I talked about) and
> ><after a while when I need some more space on my hdd I just remove the bad
> ><ones. That's one of those scenarion I'm thinking about.
> ><
> >Yes, I see how that behavior is nice (you don't have to tell the game
> >where the maps is, you just need to tell it to play them).
> >
> >However, you couldn't do that with this feature, atleast not the way
> >you've sketched out to me.
>
> Of course the game needs to support this a bit. The overloading-for-updates
> is just one of the scenarios. Shoddy argumentation from my side ;). The
> important thing is that these things require that the file names are *not*
> compiled into the game.
>
> ><>Giving the PenguinFile client a way of updating pak files is a good
> ><>idea, I think, regardless of wheter it is possible to overload mounted pak
>
> ><That's relatively easy to implement (2 or 3 function calls) either in the
> ><game or a seperate utility. I don't think an extra API function for this is
> ><needed.
> >
> >It is a feature that just about every larger game will need, and while,
> >no, it's not a major hassle to implement, I don't think it's as trivial to
> >do as you say it is. These are the things you would need to do to update a
>
> Yes it is ;)
> (read on before you reply to this)
>
> >1- build a new pak file, combining the old pak file with the update one,
> >comparing file dates along the way.
> >2-delete the old pak file.
> >3-rename the new pak file to the name of the old.
> >
> >to build the name pak file, you would need to do this:
> >
> >1-create a complete mirror of the directory structure and file names of
> >every file in the old pak file, aswell as any any new files in the update
> >pak file.
> >2-pass this structure to some function that will then build the new,
> >updated pak file
> >
> >Doing number 1 is not an extremely hard job, though it's not very
> >interesting to implement, and it's also something that I imagine can create
> >a few memory leaks. Not any work here to speak of.
> >
> >As for doing number 2, I wasn't able to find any PenguinFile API that
> >wrote pak files. The closest thing I could find was ppf_WriteInPak, which
> >should only work for format 1 pak files. (it isn't implemented either :)
> >
> >I don't know if there is suchs an API, but I couldn't find it (I didn't
>
> Of course, because it's only in my head yet. I haven't described it in the
> docs yet because I'm not 100% sure about how the functions will look like
> and behave. Just 95%.
> Here's a quick rundown on the main new API functions:
>
> ppfCreatePak (const char *Name, <all the header parameters>);
> will create a new, blank PakFile. For filling it it needs to be mounted
> somewhere.
> This is the most uncertain one of the functions - I'm not sure if
> the create-mount-fill-umount thing is the best way and the "header
> parameters" thing will most likely replaced by a struct holding all those
> info (passing >= 8 parameters to a function is evil and the number of
> paramers will slightly differ between the Pak formats).
>
> ppfCopy (const char *source, const char *dest, int flags);
> will copy the file or dir at source to dest - recursively if needed (or
> specified).
>
> That means updating a pak will require roughly that code:
>
> while (there_is_another_update)
> {
> ppfMount (TheUpdatePak, TheCommonMountpoint, ppfMF_override_files);
> }
>
> <prepare header info>
>
> ppfCreatePak (NewPakName, HeaderIfo);
> ppfMount (NewPakName, TmpMountPoint, ppfMF_write);
>
> ppfCopy (TheCommonMountpoint, TmpMountpoint, ppf??_recursive);
>
> ppfUmount (everything);
>
> >The point is that doing this from the game is not that much work for the
> >game programmers. It shouldn't take even a very unskilled programmer more
> >than an hour, at most, to do it. However, as virtually everyone will be
> >implementing this behavior, I don't see why a ppfUpdate() feature should
> >not be included.
>
> See, it's just unneccessary ;)
>
> >I would go for having both an utility and an api function. This way,
> >programmers can call the API directly, but they (and everybody else who
> >migth want to update a pak file) can also do it from ... well, the linux
> >command line interface (I got a bit of vocabulary to learn, it seems :)
>
> "shell" or "cmdline" for short ;)
>
> ><>A) I don't actually have linux. I've made up my mind to get it one of
> ><
> ><You could do a Win32 version of PFile.
> ><
> >Besides the POSIX file handling, is there any other incompatibilities in
> >PenguinFile towards WIN32 I should know about?
>
> Not yet. The memory mapping stuff will be however.
>
> ><Well, one of the nice things with Linux is that it already comes with one of
> ><the best compilers available - gcc
> ><Plus a multitude of other development tools - debuggers, build and
> ><configuration systems, doc generators, excellent editors etc. So don't
> ><worry about this issue ;)
> ><
> >There's a compiler in the kernel?!? I take it you mean that most
> >distributions come with a compiler... ;)
>
> 'fcourse ;)
>
> >This gcc, does it do things like templates? What about member function
> >templates? (one of the reasons I'm geeting VC 6.0 is that VC 5.0 doesn't do
> >member function templates). How old is this gcc? Does it have bugs?
>
> Yes (except for a very minor exception), yes, 0.2 - 25 years ;), propably,
> but I haven't found one yet.
>
> About the age: The first version was IIRC written in the seventies, and the
> newest version in about 2 months old.
>
> >Isn't there any integrated development environments? IE, do you then
> >have to write make files and invoke the compiler, builder and debugger from
> >the command line?
>
> There are some IDEs, but most of them are in a relatively early development
> stage. the LGDC pages (http://sunsite.auc.dk/linuxgames/) list some of them.
> But even if a real superduper-mega-killer-IDE was available, I'd still
> prefer the cmdline. IDEs always put all kinds of junk in your source dir,
> makefiles etc. And I haven't found a single IDE with a decent text editor
> yet ;)
>
> ><Well, the bad thing is that I'm in the middle of a greater change in PFile
> ><so there is no stable code to play around with. But you could nevertheless
> ><already have a look at the code. The internal directory handling code for
> ><example is more or less in its final state. Are you familiar with cvs or
> ><should I prepare a tarball (or zip) of the sources?
> ><
> >I wouldn't exactly say I'm familiar with cvs, but I did manage to get my
> >hands on the code. I wasn't easy though! first I got a program called
> >WinCVS, but after half an hour, I simply had to conclude that it just
> >didn't work, or, more probably, I couldn't get it to work (wouldn't
> >connect). Then I got the "real" command-line driven thing and sorted it out
> >in about half an hour. Had a little problems with it getting my password
> >form the keybord...
>
> *grin*
>
> >I tried to get the thing to compile in VC++, but, as you might imagine,
> >that was impossible. If you could get me the POSIX file handling headers, I
> >think I could get it to working though. It wouldn't build, but then that's
> >ok for now.
>
> Descriptions coming via privmail.
>
> >The make file also doesn't work for VC++. You'd really think that that
> >kind of thing would work the same for all compilers on all platforms, but
> >well, it doesn't :) It stops at the very first line complaining that there
> >shouldn't be a + sign in the line.
>
> Well, VC++ make is primitive compared to GNU make ;)
> And our makefiles also make use of autoconf, so converting them is even
> harder. You'll have to create your own makefiles/project files from scratch.
>
> >Btw, why are you using POSIX-specific functions? Why not just do
> >everything through the standard library?
>
> Because the standard library has no functions for directory reading.
>
> >Something just occured to me: if all the basic functionality has to be C
> >in PenguinPlay, how on earth are you going to get that event system going?
> >It's templated to it's very core...
>
> We won't ;)
> We have a simpler procedural event system for the lower levels
> (cvsdir/src/PenguinEvent/). The one you're talking about is only for the
> higher levels.
>
> >pps. Is the mailinglist usually so quiet, or am I just not subscribed
> >properly to it? This "emzlm" program did send me a message saying that I
> >was subscribed, but there hasn't been a single message for two days.
>
> It is rather quiet, but not *this* much. Did you respond to the mail you
> got from ezmlm? Unless you do that you won't get anything.
>
>
> Christian
> --
>
> Drive A: not responding...Formatting C: instead
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: penguinplay-unsubscribe@sunsite.auc.dk
> For additional commands, e-mail: penguinplay-help@sunsite.auc.dk
>