Chocolate Keen (a "port" of Commander Keen 1-3)

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.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

wiivn wrote:How can I stretch the screen in 16:9 aspect ratio?
If you are not using a display that may suffer image burn-in (like Plasma, CRT or OLED), I still recommend to play in 4:3 if possible. This is how Keen was commonly played when the picture filled (almost) the whole 4:3 sized CRT display back in the 90s. In the case of Chocolate-Keen1, since scaling artifacts are possible on flat panel displays, some settings are used by default in order to try and overcome these.

Otherwise, I think the readme.txt file should have the answer for you and maybe you'd find more things in there to be useful.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

Here is the last update, bringing us to what I call a Beta release of 0.6.0. At this stage, there may still be a few bugs related to accuracy, more kinds of inaccuracy that can be improved, places where the improve may be improved and/or the CPU power usage can be lowered, and more.
However, I think that it is now a feature-complete "port" of the unmodified vanilla Keen 1 v1.31, or at least of stuff actually used by it. If something is never done by unmodified vanilla Keen, there are great chances it is not ported.

A minor note about joystick support: Apart from the limitations described in the change log, I'd say that in the calibration process, there are chances that you do not need to reposition the pad/stick at all. Just leave it on the center and press on what is considered to be the "first button" twice.

*** See the first post in this thread in order to find download links for the last release.

Changelog

November 23rd, 2012 (v0.6.0):
In terms of simulating Commander Keen 1 v1.31, this should be a feature-complete release (ignoring a few potential issues).
- It is now considered a "Beta" release (rather than "Alpha"), since it has probably been relatively stable for a while.
- Basic 80-column text mode emulation is implemented! This is used for a little while when Keen 1 is loaded, as well as for the textual contents seen when quitting vanilla Keen 1.
- The command line arguments can now be shown by Chocolate Keen1 itself on ALL platforms, taking advantage of the text mode emulation. Hence, at least for now these have been removed from the README file, since any update to the arguments may easily be missed anyway...
- The command line argument -ega has been renamed to -egacga and it now does more things than changing the emulated video card's refresh rate. Among these, a larger overscan area is used on the 200-line graphics mode (as observed with an actual EGA). The text mode has also got a 200-line height in pixels (which is compatible with CGA monitors). Somehow, the fact that the observed behavior does not correspond to the EGA when configured to work with an EGA monitor has been spotted just a little before releasing this version... At least, though, things like the overscan dimensions should be similar.
By default, plain VGA behavior is emulated (combined with a VGA monitor).
- A dummy /K (or /k) argument has been added. On vanilla Keen 1 it is used to solve keyboard-related issues on some BIOS variants, while on Chocolate Keen 1 it simply adds a message on the very first few milliseconds of loading.
- Workaround for OpenGL glitches has been removed, since it can't be used now as-is with the changes between text and graphics modes. Well, almost. It is still in use when just toggling fullscreen mode, although it may not help as much as it has before.
- Vanilla-style joystick support is implemented. Note that there are VERY great chances that you wouldn't like the way it works, since it currently determines which pair of game controller buttons will be used, as well as a pair of axes. Oh, and the joystick needs to be calibrated, just like on vanilla Keen 1. The game-port way of game controllers was very problematic anyway... Ah, one more thing:
- OK, a minor bug dating back to the beginning of the game "porting" process has been fixed. What it implies now is that the controller type to use is reset to the keyboard whenever Chocolate Keen1 is loaded. This is also the behavior of vanilla Keen1. Maybe it was done on purpose due to the great issues with joysticks back then...
- Another such bug: Now after the F3 key is pressed to reconfigure the keys, the keyboard is what is used for input (if joystick has just been used). Note that this is the vanilla behavior, and the bug was that the joystick would still be in use afterwards. Truly, it hasn't had a great impact beforehand...
- The sound sample rate used internally can now be set from the command line, using the -srate argument. The current default is now 48000Hz, while before the release of the current version it has been 44100Hz.
An example for a command:
chocolate_keen1 -srate 44100
- With a few exceptions, stdint.h is used now for numeric types of specific sizes (such as uint16_t), rather than types defined by SDL (like Uint16). While there should really be no reason to abandon SDL, it is still better to avoid the usage of some stuff not directly related to SDL, if it can be done.
- Oops... the exe name is "chocolate_keen1" now, not "chocolate-keen1"! Corrected a few references mentioning the latter one.
- There are some more changes on the technical side.
Last edited by NY00123 on Fri Jul 05, 2013 21:02, edited 1 time in total.
User avatar
lemm
Blorb
Posts: 696
Joined: Fri Jul 03, 2009 10:18
Location: canada lol

Chocolate Keen 2

Post by lemm »

After a little under two weeks of work, support for episode 2 has been added; hence, the project has now been renamed to "Chocolate Keen." This was a collaborative work between ny00123 and myself.

You will need Keen 2 v1.31 to play. If you are downloading the Windows binary package, simply copy chocolate_keen2.exe into an existing Keen 2 directory and play. Also note that chocolate_keen1.exe has been revised. See the first post in this thread to find download links for the last release.

Enjoy!



Changelog

April 11th, 2013 (v0.7.0):
Thanks to Lemm, Commander Keen 2 v1.31 is now supported!
- As a consequence, the project has been renamed "Chocolate Keen" (as a
substitute for the name of... "Chocolate Keen1").
- Technically, the code has been restructured so Keen 2 support can be added.
More restructuring may be done later.
- Some more changes have been applied, mainly to the code layout.
- A few timing related modifications have been applied, done for a hopefully
better accuracy among more platforms. There is still more to improve, though.
For instance, sometime after activating a Tantalus ray it may be impossible to
toggle on/off fullscreen mode for a little while.
- A buffer overflow has been fixed, where the high scores table is displayed.
Actually, it MAY still be produced - if there is a score of 1,000,000,000 or
more... however, it is apparently a problem even on vanilla Keen.
- Fixed drawing of masked tiles. (These weren't really revealed on Keen 1,
while they are much clearer on Keen 2.)
- Fixed a bug in the bridge code (again mostly noticeable on Keen 2).
- An alternative keyboard key chosen for the pogo is actually being set now.
- A few more fixes, here and there.
- There are also (very) minor edits to the changelog within the README file.
Last edited by lemm on Mon Jul 29, 2013 11:10, edited 1 time in total.
User avatar
DoomJedi
Vorticon Elite
Posts: 888
Joined: Mon Dec 14, 2009 11:22
Location: Israel

Post by DoomJedi »

Great work. Very accurate port, well-done! This is a new bright future of Keen!
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

Thanks to Lemm's assistance yet again, Chocolate Keen supports the whole Invasion of the Vorticons trilogy now!
Technically, there are some more changes. See the change log for details.

To play Keen 2 or 3 you need a copy of the desired game. Version 1.31 is supported. Note that while it may get reverted later, a single unified chocolate_keen.exe file is bundled supporting all three episodes beginning with this version.

*** See the first post in this thread in order to find download links for the last release.

Changelog

May 12th, 2013 (v0.8.0):
In a similar fashion to what has recently been done for v0.7.0, support for
Commander Keen 3 v1.31 is now built-in! As a result, Chocolate Keen has full
support for the Invasion of the Vorticons trilogy.
- Even before the addition of Keen 3 support, some more code restructuring has
been added in regards to multiple episode support (and possibly more).
- An example for an experimental decision out of this restructuring:
For now a single executable is used, supporting all episodes. It is still
possible to compile one per episode. Maybe it will be the default setup again
later, similarly to the situation with the source codes for Wolfenstein 3D and
various source ports of it. For now, though, it is not the case.
- An icon is now set for the Chocolate Keen applications. Thanks to Lemm for
suggesting the chocolate bar!
- A few changes have been applied in regards to the timing yet again. As a side
note, it worths to mention that (also applying to earlier releases),
if Chocolate Keen is being run for sufficiently long (let's hope it implies,
say, 12 hours at least), then there IS the possible risk of a timing overflow
glitch occurring at some point. Not sure there's an easy way to take care of
that. Maybe such a way will be found at some point, though.
- A new command line argument has been added: "-uselastinputdevice". On vanilla
Keen 1-3, if you setup a joystick within the game (including calibration), use
it for a bit, quit the application and then restart it, keyboard input will be
forced. Since Chocolate Keen aims to act like vanilla Keen, by default it does
the same thing. With the above argument it will rather use the last selected
input device stored in the CTLPANEL file, if it is found.
- In what may seem to be a controversial decision, the (host) mouse cursor is
now LOCKED in the application's window by default, when fullscreen is toggled
on. To release, use the key combination Ctrl+F10 (also the default in DOSBox
for the same functionality). This works for a non-fullscreen window as well.
You may further (re)lock the cursor by clicking on the window or using the
key combination Ctrl+F10 (again as usually done in DOSBox).
There are a few reasons for doing this. A later point may describe one of them.
- A new "-nocursorlock" argument has been added. When passed to Chocolate Keen,
the mouse cursor will NOT be locked on startup, nor when toggling fullscreen
on/off. As usual it can be locked using the Ctrl+F10 key combo or by clicking
on the window.
- Another related argument, "-alwayshidecursor", has further been added. If one
wants the mouse cursor to not appear in the application's window even while it
is unlocked, this can be used.
- For convenience and/or a case of emergency, the keyboard combination
Ctrl+F9 (again familiar for DOSBox users) can be used for shutting down
Chocolate Keen now.
- A bit of an obscure fact: The vanilla Keen 1-3 executables do contain some
code for (possibly not-comfortable-to-use) mouse input. It might be a variation
of the code from the PC version of Dangerous Dave. While it is possible to
manually edit the CTLPANEL file to use a mouse as the input device,
keyboard input is always forced on startup as mentioned above. Now, however,
Chocolate Keen has the -uselastinputdevice argument. So, similar mouse
support has been implemented. Chances are you wouldn't like to use it every
day, though, so no special command line argument has been added for enabling
the mouse. If you want it, open the CTLPANEL file with a hex editor and set
bytes 4-5 (counting from 0) to the values of 01 00 (i.e. the Little Endian
16-bit value of 1). Afterwards, load Chocolate Keen with -uselastinputdevice.
- It should be noted that, while not commonly used by a single individual,
a secondary game controller can also be used now, again with the help
of -uselastinputdevice. A simple change of the controller type (to 3)
in the CTLPANEL file is possibly not sufficient, though, as a few
calibration-related values should be set. Furthermore, the secondary
controller's buttons can NOT be used to halt the discussion during the
encounter with the Grand Intellect in Keen 3 (which IS vanilla behavior).
- Chocolate Keen can now be compiled in a different "mode" for debugging.
Basically, using the current Makefile, when running an executable built with
something like "make DEBUG=1", the mouse cursor is NEVER locked. Furthermore,
in such a case the cursor is ALWAYS displayed, unless -alwayshidecursor is
added as an argument. The usual cursor lock toggle still works as a toggle for
using the mouse in-game at all, though.
- Fixed a bug or two in regards to joystick support.
- More bug fixes, here and there.
Last edited by NY00123 on Fri Jul 05, 2013 21:02, edited 1 time in total.
User avatar
Levellass
S-Triazine
Posts: 5265
Joined: Tue Sep 23, 2008 6:40

Post by Levellass »

Now this is interesting; I knew there was mouse code, but not how it could be used. I think we may need a patch to stop keyboard being forced.[/quote]
What you really need, not what you think you ought to want.
User avatar
Lunick
Vortininja
Posts: 283
Joined: Tue Jun 01, 2010 10:37
Location: Melbourne, Australia
Contact:

Post by Lunick »

lemm is amazing, xoxo
Lunick is Here
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

After *some* delay with releasing this, well, an update is up. This adds basic control mapping capabilities (say, for simulating keyboard actions in the game while really using a dedicated game controller). Yeah, it may be far from being, er, user-friendly. But, at least the option is there. Furthermore, in an experimental fashion SDL 2.0 can be used if desired. Note that there may be some problems with that, since SDL 2.0 is currently in the "Release Candidate" stage.

*** See the first post in this thread in order to find download links for the last release.

Changelog

June 22nd, 2013 (v0.8.2):
- The Chocolate Keen executable name (with no extension or episode number) has
been renamed chocolate-keen, i.e. a minus sign is used as a separator rather
than an underscore. This seems to be more commonly used in one environment and
also corresponds with the executable name of the Chocolate Doom source port.
- Currently experimental feature: Chocolate Keen can target SDL 2.0 now, in
addition to SDL 1.2 as before. Note that while SDL 2.0 is almost ready for an
official release, it is still in the stage of a "Release Candidate" as of now
and some problems are expected.
- While -overlay is *not* available when targeting SDL 2.0, a new -texture
argument has been added. Two more SDL 2.0 related arguments added are -renderer
(to be used with -texture) and -displaynum (currently untested).
- In the SDL 2.0 case, -texture is the default. Otherwise it is -opengl, unless
GL support is disabled in the executable, where -overlay is the default.
- DOSBox-style input mapping has been implemented, with current values saved
using Ctrl+F8. For the ones who want to take advantage of a game controller,
either out of preference or simply since there's no nearby keyboard, this
can be used to map controller buttons to emulated (102-key QWERTY layout)
keyboard keys.
- Note that while the mapper file format may be similar to the one used by the
DOSBox emulator, it is NOT identical. (!)
- Some code handling (emulated) pause key in a special manner has been removed
for now, as it often, well, hasn't done its job.
- Windowed and fullscreen resolutions are now separated: When -surface is *not*
used, these can be specified with -windowres and -fullres, respectively.
- As a consequence, these black bars known for aspect correction are no longer
shown while displaying a non-full window. Basically, when specific window
dimensions are chosen with -windowres, one can think of such imaginary bars
getting removed from the window.
- As a new default, the window resolution is (in each dimension) a specific
ratio of the desktop resolution now (imaginary bars included). Guess which...
- On a relevant note, there are chances that -surface, combined with fullscreen
and SDL 2.0, is going to fail, due to a failure to set a specific screen
resolution. In that case, "-texture -renderer software" can be used for
software rendering with nearest neighbor interpolation for scaling.
- Windows OS specific: US keyboard layout is now forced for the Chocolate Keen
application. Among other things AltGr should behave like Right Alt, rather than
Ctrl+LAlt. Thanks to Tesseract for reporting, along with helpful assistance!
Last edited by NY00123 on Fri Jul 05, 2013 21:03, edited 1 time in total.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

This is a notification of a "clean up" release, marked as "Alpha" again. The reason: Porting to C (from C++). Ones may think of it as "porting back", since it is almost surely the case that the game was originally written in C (along with some x86 Assembly code).

As a side effect, this has seemed to shrink the executable file size! While not the original motivation behind this (as strange as it sounds), it's nice to see it happening.

*** See the first post in this thread to find download links for the last release.

Changelog

July 5th, 2013 (v0.8.3):
- The codebase has been migrated to C (to be more specific C99). This may be
the cause of instabilities, so you have been warned. Note that it is still
possible to build an executable using a C++ compiler (as C++ code).
Furthermore, as an interesting consequence this migration has seemed to reduce
the executable file size. For instance, mingw-w64 has constructed an executable
of size 200704 bytes for v0.8.2, compared to 174592 bytes for v0.8.3.
Furthermore, the executable constructed by mingw-w64 as C++ code requires a few
additional dependencies as shared libraries (libgcc_s and libstdc++). In fact,
for that exact reason the original MinGW has been used so far. If you check the
executable as found in the v0.8.2 ZIP archive file, its size is even larger
(283648 bytes). That may be the case due to some additional code required for
C++ support as an alternative to functionalities loaded from such libraries.
- A minor fix (if not more) regarding the input mapper has been integrated.
- Some fixes regarding SDL 2.0 fullscreen handling have similarly been applied.
Furthermore, in case SDL 2.0 is used, Chocolate Keen should be ready for the
possibly of external fullscreen window resizes (tested with the Unity shell).
- So far, the game's visual contents have filled the screen with aspect
correction by default, unless "-surface" has been specified. This has changed
and software scaling is used for that now (again if "-surface" is specified).
- More generally, some changes have been applied regarding the command line
arguments and scaling. To summarize, one can say that "-scale" has been renamed
to "-scalef", "-noaspect" has been replaced with "-scalet" and a new optional
command line argument identified by "-forcecutfullscreen" has been added. For
more details, as usual one can type something like this: "chocolate-keen -?".
User avatar
Levellass
S-Triazine
Posts: 5265
Joined: Tue Sep 23, 2008 6:40

Post by Levellass »

C, the superior language.
What you really need, not what you think you ought to want.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

And... these thoughts about resource usage have made me spot clear instances of memory leaks! They've been occurring with OpenGL rendering on a few kinds of "video mode" related events, like fullscreen toggles. Furthermore, just to be on the safe side I have made another (really minor) code modification related to retrieving some... information about the (host) video hardware.

*** See the first post in this thread to find download links for the last release.

Changelog

July 7th, 2013 (v0.8.4):
- Fixed a clear memory leak that may repeat while OpenGL is in use.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

============================================
A bit of a long post, part 1 (not much about Chocolate Keen, yet)
============================================

Now, what does anybody think can be a good way to test Chocolate Keen's goal of authenticity?

That's right, reproducing vanilla demo playbacks!
Oh, but wait, is there such a thing at all? Keen 1-3 don't have this feature.

Well, no problem. The original Keen 1-3 executables (at least for version 1.31 as released by Apogee Software) do contain some unused demo-related code. With some amount of patching, these can be made useful (at the cost of losing the ability to restore saved games).

See the following link for a topic about that, with variations of the patch for all Vorticons episodes and sample demo files: http://www.keenmodding.org/viewtopic.php?t=1749

The patch has also been uploaded to the KeenWiki and added to the following page: http://www.shikadi.net/keenwiki/Patch:Demo

============================================
A bit of a long post, part 2 (now about Chocolate Keen for sure)
============================================

Anyway, how is that related to Chocolate Keen again? Well, basically, the patch's behaviors can now be optionally replicated in Chocolate Keen itself, using the new -vorticonsdemomode command line argument. So you basically have the chance to check if a demo is reproduced in the exact same way on vanilla Keen and Chocolate Keen altogether.

As expected, this leads us to a new release.

Oh yeah, for anybody interested in the SDL 2.0 executable for Windows: If it doesn't work, try adding -opengl. Alternatively add -renderer, followed by opengl or software. An earlier issue regarding sound playback should be fixed, though, thanks to an update to SDL 2.0 itself.

*** See the first post in this thread to find download links for the last release.

Changelog

July 29th, 2013 (v0.8.6):
- The bundled SDL2.dll file has been updated, solving a minor sound bug
in case the SDL 2.0 path is chosen on the Windows platform.
- A new "Vorticons Keen demo mode" has been implemented. Basically, it lets
you record and playback demos, as do vanilla Keen 4-6 (although Keen 4-6
can't just playback new demos without importing these in some way). It has
also been implemented as a patch for vanilla Keen 1-3 a bit earlier, so these
can be used for finding NON-vanilla bugs in Chocolate Keen. It is actually
the case that the vanilla Keen executables (without patching) contain
some unused code handling demos. The patch takes advantage of that.
- As a consequence of this, a fix to a function used for setting "game ticks"
(a kind of a moment measured in internal time units) has been applied.
- Furthermore, a typo in a function responsible for calculating jump heights
(and more) has been fixed, again as a result of demo playback tests.
- On an unrelated note, a minor fix to the main menu code has been applied.
- A minor error in the vorticon walk function has also been fixed
(before implementing demo playback). It's again all about == vs = in C...
- Furthermore, yet another instance of invalid memory access and a possible
memory corruption in some drawing function has been fixed, reproduced during
the Keen 3 finale when an image loaded from a file to a chunk of memory
generally used for map data is to be displayed. To anybody wondering about
the usage of map data storage for an image, that IS vanilla behavior.
User avatar
Levellass
S-Triazine
Posts: 5265
Joined: Tue Sep 23, 2008 6:40

Post by Levellass »

An interesting addition. This may lead to a spate of Vorticons mods with demos.
What you really need, not what you think you ought to want.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

In case somebody is not entirely sure what I'm talking about, you can simply check the following video:

https://docs.google.com/file/d/0B_K_B54 ... edit?pli=1
Levellass wrote:An interesting addition. This may lead to a spate of Vorticons mods with demos.
Thanks for the comment! About mods with demos, that sounds like an idea, although I can see a few general problems with that:
- In modifications of Keen 4-6, other things tend to have higher priorities. When it comes to memory and executable size limits, demos may easily be left behind.
- The ones behind modifications may not want to spoil too much.
- It'll probably be better to use an alternative demo patch for Vorticons Keen with less issues. Examples: Be able to load a saved game, have more compact demo files and also store the player's position on the world map before entering some level within such a demo file. The latter point is related to a vanilla Keen bug described in the above mentioned topic on Keen: Modding. (Another alternative is fixing the bug - which may have unexpected results in some vanilla Keen 3 levels, at least.)

Once a better patch is available (and maybe even if not so), though, it is true that one may be able to take advantage of demo playback capabilities for the purpose of having an in-game cutscene.
NY00123
Vorticon Elite
Posts: 508
Joined: Sun Sep 06, 2009 19:36

Post by NY00123 »

The following update is more about changes to functions handling graphics (and a bit more) than new features (if any). These include some optimizations and relocations of workflow from the CPU side to the GPU.

*** See the first post in this thread to find download links for the last release.

Changelog

August 18th, 2013 (v0.8.8):
- While it probably won't matter for many users of Chocolate Keen, the
licensing terms have been updated, so the whole application is (re)licensed
under the GNU GPL v2 and any later version now. Previously, only code sections
taken off the Commander Genius project had been marked as such.
- Now that SDL 2.0.0 is released, the bundled file SDL2.dll has been updated
yet again.
- This release has several changes regarding graphics handling. In fact, some
of these are not far from a rewrite. While various drawing functions have not
really changed, the situation is different when it comes to (emulated) video
mode changes, fullscreen toggling and more. These changes include restructuring
of code and some optimizations. A few specific changes are to be listed here.
- If OpenGL output and bilinear interpolation are both requested, a framebuffer
object (or FBO) is used for doing a first-step zoom (optionally based on an
input to the -scalef argument) by a GPU, if supported. The older behavior of
software zooming is applied if this approach is unsupported or the -nofbo
argument is specified. Basically, the FBO lets one use GPU resources as an
alternative to system/CPU resources, especially with a large scaling factor
(say 3 or more).
- Similarly, if an SDL 2.0 build is run and the SDL 2.0 renderer is requested,
along with bilinear filtering, then a secondary texture is used as a render
target for hardware zoom.
- When text mode is in use (e.g. when quitting via an in-game dialog),
a copy of the textual contents stored in (emulated) EGA memory is cached.
This is done so actual graphical updates are done only when ones are required.
It results in a significant decrease in CPU usage.
- When SDL 2.0 is used and a software surface is requested (using -surface),
less system memory should be consumed, at least on Linux with X11. While it may
be possible to take advantage of hardware acceleration in some way even with
the -surface argument being specified (with the cost of more memory required),
it seems like this is far from useful. -opengl or -texture should be the way
to go for hardware acceleration anyway (with SDL 2.0).
- Although not exactly tested, Chocolate Keen tries to revert to a software
surface in a few cases of problems. There is probably more to do, though.
- A dedicated function used for printing a warning or error to console has
been added, used as an alternative to direct calls to printf and fprintf.
For now this is not more useful than before.
- A long standing sound bug has finally been fixed. It is the case that the bug
has not always been reproduced, but whenever it has, it would be noticeable
during the whole Chocolate Keen session, at least with specific sound effects.
It is basically the result of a few chunks of memory, used for storing sound
effects, not getting initialized.
- Another minor sound bug has been fixed, based on the difference between
a signed mathematical operation (multiplication by -1) and a seemingly
similar unsigned operation (with a clearly different meaning).

EDIT (December 14, 2013): Wow, that's a late minor edit done to the changelog, correcting a minor typo. Chances are there are more grammatical errors...
Last edited by NY00123 on Sat Dec 14, 2013 19:57, edited 1 time in total.
Post Reply