Recent Posts

Pages: [1] 2 3 ... 10
Game Discussion General / Re: Cataclysm of Chaos (working title)
« Last post by lordpalandus on Today at 11:53:27 AM »
Well, after working on a few different ways to rebuild the spell buying code, I've devised a solution that works elegantly. It will also make adding new spells significantly easier than the old system and will allow you to keep purchasing spells if you are inclined to do so.

Now I just need to re-add all the old spells to the new system. Just wanted to give a quick update on this, and once I've finished implementing it, and tested it to make sure it doesn't bork again, I should be able to get back on track.
I'm having difficulty with one final part of my code. I am trying to use a delegate or function object to define how input arguments (switches) are processed. My code works 4.0 when not encapsulated in a class. Once I try putting the code into a class, I receive the following error:

Error   C2440   '<function-style-cast>': cannot convert from 'initializer list' to 'ConsoleSwitch'.

Something is going wrong with how I am setting the values of an array of ConsoleSwitch. When constructing ConsoleSwitch, one of constructor parameters is the function to define how that switch parses its argument, which is what is causing the compile time error. Below is what I think are the relevant snippets of code.

ConsoleArgumentParser class takes console input and parses it into a struct called ConsoleArgs for the rest of the application to use.
Code: [Select]
class ConsoleArgumentParser
    ConsoleArgs sortArguments(int argc, char **argv);

    ... Rest of class declaration goes here ...

ConsoleSwitch is a struct that represents an argument (switch) that can be parsed out of the command line. Its constructor takes a function (delegate) that tells the switch how it is supposed to parse the supplied argument.
Code: [Select]
#include <functional>

struct ConsoleSwitch
    ConsoleSwitch() { }

    ConsoleSwitch(string shortSwitch, string longSwitch, function<void(const char* value, ConsoleArgs&)> parseFunction, int numberOfArgs)
this->shortSwitch = shortSwitch;
this->longSwitch = longSwitch;
this->parseFunction = parseFunction;
this->numberOfArgs = numberOfArgs;

    ... Rest of structure here. ...

Below is the constructor for ConsoleArgumentParser, where the possible switches are defined by setting each index of the ConsoleSwitches array. This is where the error is thrown on each attempt to construct the consoleSwitch in regards to the function used to parse.

Code: [Select]
    consoleSwitches[0] = ConsoleSwitch("-H", "--HELP", &ConsoleArgumentParser::parseHelp, 0);
    ... add other possible switches here ...

If I remove the code within ConsoleArgumentParser from a class, everything works fine. See below for working initialization code. I've tried several things, but really don't know what is wrong here.

Code: [Select]
ConsoleSwitch consoleSwitches[]
    ConsoleSwitch("-H", "--HELP", parseHelp, 0),
    ConsoleSwitch("-?", "--?", parseHelp, 0),
    ConsoleSwitch("-D", "--DESTINATIONDIRECTORY", parseDestDirectory, 1),
    ConsoleSwitch("-Q", "--QUIET", parseQuiet, 0),
    ConsoleSwitch("-O", "--OVERWRITE", parseOverwrite, 0),
    ConsoleSwitch("-C", "--COMPRESSION", parseCompressionFormat, 1),
    ConsoleSwitch("-S", "--SOURCEDIRECTORY", parseSourceDirectory, 1)

Any help is appreciated. If we cannot figure it out, I will just leave the ConsoleArgumentParse code wrapped in a namespace and not make it a class and everything will work. Just looking to make it 100%.

News / Re: Outpost 2: Divided Destiny - 20 Year Anniversary
« Last post by Zhall on September 21, 2017, 09:44:21 PM »
Here's to putting the cart before the horse and hoping there will be some Outpost 3 matches soon.
News / Re: Outpost 2: Divided Destiny - 20 Year Anniversary
« Last post by lordpalandus on September 21, 2017, 03:30:30 PM »
Well, you must be in a different timezone than me, as my clock says its the Sept 21st today (west coast, Canada). However, regardless, happy anniversary Outpost 2!

My dad bought me the game when I was in 5th grade, in early 1998. One of my most favorite RTSes in the last 20 years for sure.

Wait. I didn't know eBay existed back pre-2000s.
News / Outpost 2: Divided Destiny - 20 Year Anniversary
« Last post by Leviathan on September 21, 2017, 03:27:59 PM »
Hi all, Happy Anniversary!

This month marks the official 20 year anniversary of Outpost 2: Divided Destiny! Sorry to all you Outpost 1 fans that 20 years of OP1 was not marked as such but I think Outpost 2 was a more popular game building on the success of Outpost 1! Searching around the web I found the 22nd of September 1997 as the most common release date mentioned and that's when I set my countdown for over a year ago.. ( Whatever the day... it has been a long time and I'm very please that we're still here, old faces and new! More importantly, is that the game is still here; loved, supported, cared for and updated the best we have time for.

20 Years is a lifetime.. literally, think what has happened in your last 20 years.. A lot has happened for the game as well and we have many dedicated community members who have given their time and expertise to Outpost 2 and the community. Were you 20 years ago? Or when you first picked up the game?

For me, I picked up the game at a friends house via a monthly demo CD that came with a PC magazine. It was the best demo on the CD and we played it as much as we could after school, it even included multiplayer mode. Later that year the same friend bought the game and made a bunch of copies right away so the other brothers in the house could have one and myself.. years later I had worn out that CD and had to ask him to burn me a new one!

I don't recall buying the game (or my parents buying it for me..) so I thought it was only right to get a copy which I did about a year ago from eBay.. I think I may get another.. the original all silver/gray box looks nice and brings back nostalgic memories.

Heres to another 20 years of The Oupost Universe!
Game Discussion General / Re: Cataclysm of Chaos (working title)
« Last post by lordpalandus on September 21, 2017, 02:05:23 PM »
Well, fuck.

While adding the 7th tier of spells to my buy command, the buy command broke. I managed to add the new spells to tiers 1 to 6 without issue. But after adding spells to 7th tier, my buy command now refuses to compile or even load in the UI. I've deleted the entire 7th tier, and the issue remains. I've posted a help request in the other forums. If they can't solve the issue, then the next release will be delayed for anywhere from a few weeks to months.

The purpose of the buy command is to allow players to control the RNG. A problem in RNG heavy games is that sometimes the game will favor you and other times it will give you the finger. The buy command is there to mitigate that RNG so that if the looting of items keeps giving you the finger, then you can purchase the things you need from the store. But if you have no store, then the player has really no way to mitigate that RNG. So if I don't have the buy command in place, then a major and extremely crucial part of the game design will not be present. And as this would help my game stand out from other roguelikes (as most roguelikes lack a reliable way to mitigate the RNG), then its just a rehash of older games.

So, I don't know what I'm going to do if the buy command is permanently borked.


EDIT: Updated my first post of the thread with the current source of V4. If I can figure out a way to get around this situation, I'll gladly keep developing the game and the source will simply serve as a backup copy. If not, then likely I'll just start a brand new project from scratch as the buying system is a critical core functionality of the game, and the game will not play properly without it. It is also, if I would market it, be my competitive advantage over other roguelikes and without it, why would someone play my game over so many other generic roguelikes out on the market already. I'm not trying to downplay the value of the other features that I have, but the entire game design focuses around the ability to mitigate the RNG and without a way to mitigate the RNG, then it will not play properly and will not feel fair.


EDIT2: It appears the problem is localized in my spell purchasing code. This means I won't have to rebuild my entire buy command, but will likely have to rebuild my spell purchasing code. So instead of a repair job of 2-4 weeks, it might take me 2-4 days to repair it.
Projects / Re: OP2Archive Application Development
« Last post by Vagabond on September 21, 2017, 12:55:14 PM »
Hey everyone, we are on the home stretch for completing OP2Archive for Windows.

I finally rewrote the EXTRACT command code into something that makes reasonable sense and is cleaner to understand.

I finished a post build event for RELEASE compilation mode that automatically creates a zip file containing the executable, 2 template archive files, and the readme with the version number included in the zip name.

I created a draft page on the wiki to post OP2Archive at. It will still need a bit more work.

I completed another pass on ReadMe.txt and finalized the command list. I separated out information on how to compile and distribute the software into a separate file called CompileInstructions.txt. I did this because the average user isn't interested in compiling, but just how to use the application. ReadMe.txt points to CompileInstructions.txt for anyone interested in examining the source code.

If someone could read through the ReadMe.txt and CompileInstructions.txt below and let me know if they see any grammatical errors or omissions, it would be helpful. The first dozen lines are the usage statement that will be displayed in the command prompt if you type -h/-?, so let me know if it seems like a reasonable usage statement as well.

Next up is final refactoring and testing of the code.


OP2Archive - Outpost 2 Archive Access and Maintenance
Developed by Hooman and Brett208 (Vagabond)

Allows examining, creating, and extracting files from Outpost 2 .vol and .clm archives.

+++ COMMANDS +++
  * OP2Archive LIST (archivename.(vol|clm) | directory)...
    * Lists the contents and size of all files contained in provided archives.

  * OP2Archive FIND filename...
    * Determines which archive contains the file. Stops searching at first instance.
    * Pulls archives from the directory appended to the provided filename to search.

  * OP2Archive CREATE archivename.(vol|clm) [filename | directory]... [-q] [-o]
    * If no filename(s) or directory(s) provided,
      archives all contents of the default source directory (./archiveFilename).

  * OP2Archive EXTRACT archivename.(vol|clm) [filename]... [-q] [-d destDirectory] [-o]
    * If no filename(s) provided, extracts entire contents of archive.

  * OP2Archive EXTRACT directoryname [-q] [-d destDirectory] [-o].
    * Extracts entire contents of all archives in the provided directory.

  * OP2Archive ADD archiveName.[vol|clm] filename... [-q] [-o]

  * OP2Archive REMOVE archiveName.[vol|clm] filename... [-q] [-o]

  -H / --Help / -?: Displays help information.
  -Q / --Quiet: [Default false] Prevents application from issuing console messages.
  -O / --Overwrite: [Default false] Allows application to overwrite existing files.
  -D / --DestinationDirectory: [Default is './']. Sets the destination directory for extracted file(s).
  -S / --SourceDirectory: CREATE: [Deafault is archive's filename]. Sets the source directory when creating an archive.

For more information about Outpost 2 visit the Outpost Universe (

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +


Unzip OP2Archive.exe using WINZIP compatible decompression algorithm. The typical place to put OP2Archive.exe is in the root OP2 install directory for ease of use, but this is not required.

Open a command prompt. Navigate to the directory containing OP2Archive and type 'OP2Archive -h' to see Usage Message.


If you wish to overwrite a file currently in an archive file, use the ADD command and include the optional argument -O / --Overwrite to allow overwriting the original file.

The ADD and REMOVE command will create a new temp directory with the name ./OP2ArchiveTemp-(RANDOM INT) to store the contents of the archive file while rebuilding it. The ADD and REMOVE command will also eventually delete the original archive file before rebuilding it. If certain fatal exceptions occur during this process such as a power loss, the original archive file may be lost and/or the temp directory may not be deleted. If you are performing ADD and REMOVE commands on a heavily modifyied archive file, consider keeping a backup of the file somewhere. In case of a fatal error in the critical steps for the ADD and REMOVE coomands, you should be able to just recover the archive file from the Outpost Universe website by redownloading the game.


Outpost 2 stores all music tracks except for the track that plays on the main menu in the archive file op2.clm.

If you wish to change out the sound tracks in Outpost 2, you must use specific settings and use the WAV file format.

As a starting point for manipulating audio tracks for Outpost 2, consider starting with the free program Audacity (

When naming audio files for storage in a CLM archive, the filename will be clipped down to 8 characters. Without siginificant modifications to the Outpost 2 application, you must use the names of the audio tracks provided with the stock download of the game to get modified or new tracks to play in game. The game will then select the music tracks as it sees appropriate based on name. So, the Eden tracks will play for Eden missions, etc.

Outpost 2 audio tracks must be formatted as WAV files with the following settings:
 * Frequency = 22050 Hz
 * Channels = 1 (Mono)
 * BitsPerSample = 16

The file size of each WAV audio track (the actual wav data) must be a multiple of 32768 bytes (0x8000). Output 2 fills the music buffer in chunks that large, and doesn't zero fill if a chunk (at the end of a file) is too short. If the file is not a multiple of 32768 bytes (0x8000), some garbage data will be played in Outpost 2 before switches to the next track. The audio data must be zero padded to bring it up to the right size before adding to the .clm file.


Outpost 2 contains references to 3 types of compression, RLE (Run - Length Encoded), LZ (Lempel - Ziv), and LZH (Lempel - Ziv, with adaptive Huffman encoding).

Only LZH was used in the final release of Outpost 2. Only one archive file was compressed, sheets.vol. In subsequent releases of Outpost 2 by the Outpost Universe community, sheets.vol was decompressed and included in the game download in uncompressed format.

OP2Archive is capable of reading and decompressing archives using LZH compression. However, it currently cannot CREATE archives or modify via the ADD or REMOVE file an archive using LZH compression.


Source code may be found at: See the file CompileInstructions.txt in the source code for specific instructions.

+++ CHANGE LOG +++

Ver 1.0.0 (XXSep2017)
 * Initial Release

OP2Archive Compilation Instructions
Developed by Hooman and Brett208 (Vagabond)

If you wish to edit and compile OP2Archive's source code, read this document first. See ReadMe for basic description of project, change log, and instructions on use once compiled.

Source code may be found at: and

OP2Archive is written in C++ and the solution/project files are built for Visual Studio 2017. C++11 and C++14 features are used. The currently expiremental C++ standard library filesystem is used and is supported by both VS2017 and GCC.

OP2Archive depends on the project OP2Utility. OP2Utility requires a Windows machine to compile due to use of windows.h. In particular, the archive read/write code depends on Windows.h. There is some desire to remove the Windows specific code, but the efforts are not yet completed. The project must be compiled for x86.


Post Build Event Notes: When in RELEASE mode, a command prompt script will run once the source code is compiled. If compiling for test purposes, compile in DEBUG mode to prevent the script from running. This script automates staging all required files for distribution. Included in the source code is 7za.exe, the 7-zip command line tool that facilitates zipping the final release package. This is the Windows version of 7 zip and is not compatible with Linux. See for source files and for examples of use.

 1. If changing Major/Minor revision number, set new version number at top of OP2Archive main.cpp AND in post build event batch script.
 2. Run Commit and then push Updates to master repository.
 3. Set Solution Configuration to Release.
 4. Set Solution Platform to x86. (x64 is not currently supported due to some WINAPI code within OP2Utility VolDecompress).
 5. Compile Code.
 6. The following files will automatically be copied into the zipped directory'OP2MapImager 1.0.XXXX' (XXXX is svn revision number):
    * OP2Archive.exe (From Release Directory)
   * VolTemplate.vol
   * ClmTemplate.clm
   * ReadMe.txt (this file)
 7. Place zip file on the Outpost Universe Website.
Computers & Programming General / Re: Catching all required include directories in C++
« Last post by Vagabond on September 21, 2017, 03:55:44 AM »

Thanks for the info. I'll keep trying to nail down all the includes and namespaces used by each .h/.cpp combo as a best practice. Once the module system is out of experimental I'll probably jump on that very quickly. I try to stay away from experimental features when possible (I know we are using the experimental filesystem header!).


I actually want to use the include directories as they are designed, just sort of asking what the best practice is.

Game Discussion General / Re: Cataclysm of Chaos (working title)
« Last post by lordpalandus on September 20, 2017, 09:24:34 PM »
Well, Release v4 is coming along nicely. I had wanted to implement a bunch more things, but would like to get a few of the new systems out for players to try out and give feedback on.

V4 will include:
1) Section 3, and Section 4; this means new room generation scripts, 3 new investigatables for each section, 20 new monsters for each section, a boss for each section and boss loot for each section.

2) The new storytime system. Will be broken up into 3 categories; backstory, journals, and artifacts. Backstory is what it is currently in V3. Journals are found on adventurer corpses, and provide a bit of extra fluff and lore for the player to immerse themselves in. Artifacts has information on the artifacts themselves once you've defeated the boss. Hopefully this gives players that like to read lore and immerse themselves in a world to greatly help out in that regard. I'll be adding in V4 journals for the Sewer Section only, and artifacts for Sewer Section only, but more to follow later. Also, I'll give a bit more backstory entries to read for players interested in reading it.

3) 7th tier spells, particularly Ultra Heal, Ultra Aid, Power Weapon II, and Force Shield II, to name a few of the new spells.

4) Implement a UI option for renaming your equipped items. So, for example, you could rename your equipped longsword into a warhammer; its stats would remain the same, but it might help the player who is trying to roleplay a particular character to help to immerse themselves better.
Outpost 2 Divided Destiny / Re: 1 month push for Outpost 3D
« Last post by Zhall on September 20, 2017, 11:03:43 AM »
Most of them are Fenrisul's model from 2006.

I just happened to have them laying around still.

They are really helping speed things along.

Day 6:

Had some time this morning so I put a nursery together

University, with the U of E emblem

Lasers everywhere!

Got a rivalry going on!

And that concludes week 1!
I'll be taking a break tomorrow to work on something else, then it's back at it on Friday.

Pages: [1] 2 3 ... 10