Click here to download the source for Middlecrest.

Feel free to e-mail comments and suggestions to Mallachin at hotmail dot com. Constructive criticism, please! Keep the nay-saying to yourself. Any bugs found can be reported on the SourceForge page for now. I will create a better system at a later date.

Enjoy!
So, those following the progress of Middlecrest have probably noticed I haven't updated the source recently. Actually, that's an understatement since my last update was... November (had to go back and look).

Most of the reason is due to contract work I picked up. I underestimated the lack of time I have to devote to projects outside of my day job, which technically is also another project I work on :) I get paid at my day job. I don't get paid to develop Middlecrest.

The other part of it is that the Middlecrest source code hit a brick wall.

I haven't been the architect of a large and complicated project before. I'm used to taking code written by others, sussing out how another organization's codebase works to do whatever update I am assigned to do, and getting it done. There is a world of difference between doing that and architecting the codebase yourself.

While the codebase is great at generating locations (caves, landscapes, etc.), it is horrendous at generating areas (provinces, which are groups of locations). The codebase wasn't nearly as extensible as I thought it was. I've devoted time to correcting the deficiencies in my object model and it has forced me to re-vamp the code considerably.

I will have a fix for the province issue soon. However, since the re-engineering was so extensive, the roadmap has changed. I will release the province generation code in a bug release (a stripped down version featuring just the province code) and add the old functionality and features incrementally, in future updates.

Hopefully, that explains a few things. Middlecrest is still in development, even though it is in fits and starts :)
Middlecrest update to version 0.2.23

Additions:
*Deities
*Character statuses
*Calendar
*Item Quality
*Item generation based on level
*More weapons
*More armor
*More monsters

...and others!

Bug Fixes:
*Bug fix: Fixed item names that weren't displaying correctly.
*Bug fix: Races now display correctly when using look command.
*Bug fix: Added better seed on name generation so that name sequences aren't repeated every game.
*Added edge case checks when determining armor and weapon damage values.

Updates:
*Updated to SQLite v3.7.9
*Transitioned to C++ Boost RNG.
*Legacy code updates to avoid possible weird behavior and inefficiencies.
*Locations now only populate when entered by player.
*Significantly refactored display, weapon, and spell code.

There are a lot of updates in this release. People who haven't looked at it since v0.1.87.1 will notice many changes. Most of these additions are from the iPAD/iPhone updates I've been working on and I thought I would release those updates for people to see and bash on. Although there is new content, I spent a lot of time doing some internal rewrites of code to accommodate the other added functionality and to move the code into its final form.

Thanks and enjoy!
Continuation of an earlier post, detailing the races of Middlecrest in the latest release.


Lytans - Once possessing the largest empire in Mitrayan history, it stretched across the lands of The Levat, Ispanda, and Zakra. It lapped the shores of Nordlund and claimed portions of both modern Brytholm and the Southern Desert. Ingenious tactics and an open mind to technology and learning allowed them to conquer and lay the groundwork for much of Mistrayan civilization. Most Lytans are educated to a basic level and they were the first civilization to urbanize to a massive degree. They delight in public works and oratory. Their houses of debate served as the seed of the modern Ispandan political system. Their civilization is proud, laying to the east of Ispanda. Ongoing skirmishes with the Levatians have caused bad blood between the two peoples for centuries.

The Lytans are a combination of Ancient Rome, Byzantium, and the Qin dynasty. I wanted an imperial civilization, like Rome, that had once controlled the continent and passed down a legacy of cultural innovations. I also have a fascination with ancient empire cultures that are pre-scientific but still technology-centric.

Abilities and Bonuses: They are one of the only widely literate cultures in the continent. They are bureaucratic and imperial and so many of their other affinities are political or weapon/legion based.

Levatians and Amoricans )
Middlecrest update to version 0.1.87.1

Additions:
*Two new races
*Content additions

Bug Fixes:
*Many! (mostly due to library updates)

Updates:
*SQLite to v3.7.7.1
*Lua to v5.1.4
*C++ Boost to v1.47
*Code re-factoring and database overhaul.

Normally I wouldn't update so soon after a previous release but this version is mostly bug fixes.

Additionally, I received interest in doing a mobile version of Middlecrest for the iPAD/iPhone. This is good, considering my financial woes, and could generate a little flow my way. I will switch gears for the next few months as I work to get it ready (not much porting required, as the source is standardized code, but will require content additions and some tweaks). So, I wanted to get some last updates out before I switched my focus temporarily.

Thanks and enjoy!
Middlecrest update to version 0.1.87

Additions:
*Rudimentary quest system
*Character disposition
*Basic guild support
*Look command
*Ranged weapon targeting
*Basic talk menu

Bug Fixes:
*Many!

Updates:
*SQLite to v3.7.6.2
*Significant code overhauls and miscellaneous updates.

This will be it for a while. If anyone wants to contribute to keep the ball rolling, feel free to contact me. Information is in-game and in included readmes. As soon as I'm back on my feet, development will continue.

Thanks and enjoy!
The Middlecrest project isn't finished - it's just been put on hiatus for a bit.

To explain the situation I have to go back a few years. Don't worry, I don't plan on boring you with TOO many details :)

I do a lot of work for other people. I write web applications, I write Middlecrest (well, that's for me, but I do it for you too), and I'm trying to dredge up a job for a mobile web application. Having too much work isn't the problem. I have enough as it is. Finding PAID work is the toughie. All that stuff I just mentioned I do? Yeah, it's pro-bono. I haven't had a paid gig in three years.

I can design and implement a mean web application or I can program a chess game (given enough time) but the economy is so rough out there that it's tough to find work. My area is also overrun with talented software developers so the pickings in jobs are slim and highly, obnoxiously competitive. Portland is a rough market right now and, unfortunately, it's not too much better around the United States and in a lot of the world.

How does this affect Middlecrest? Well, Middlecrest takes time to develop - time better spent looking for a paid gig. I've used up my savings over the past three years and now I need to find money STAT... or risk putting myself out on 82nd for that job that's always hiring. The one where I dress up in heels and purr, "Hey, baby!" at passing cars. No, I kid! Point is: eating is more important than Middlecrest and I need money to eat.

So, I will release an updated version of Middlecrest soonish. It will be chock-full of new features. There are some bugs to work out to get it to that point but they are relatively minor. And then, Middlecrest is officially (formerly, unofficially) on hiatus for a spell. Don't worry. It will be picked up again soon after I have the ducats flowing my way.

And in the meantime, any one know of some work where a slightly hair-brained, wholly inventive, resourceful, and hungry software developer could send his resume? You don't know me from Adam but a tip might be nice :)
Middlecrest update to version 0.1.0

Additions:
*LoS
*Audiere support (no sound yet, just the capability)
*Character name generation

Bug Fixes:
*Bug fix: Fixed the crash that occurred when moving character off the map
*Bug fix: Magic would crash every time a spell was cast

Updates:
*Enhanced help menu
*Updated to-hit/dodge calculation
*Melee weapons now obey character resistances
*Massive internal rewrite and miscellaneous optimizations
and much more!

There is a lot contained within this update, including some prettying of the user interface. I've was trying to release versions as quickly as possible, as soon as I implemented a new feature. I noticed that I was getting less downloads as a result (although I'm sure there were some out there enthused by the development clip). So, I decided to pace the updates so that more features will be available for debugging purposes for each release. Hopefully, this will encourage download and testing! :)

Thanks and enjoy!
Middlecrest update to version 0.0.83

Additions:
*Simple auto-mapping (press 'f' to toggle on/off)
*Support for Lua scripts
*Building data structures (allows things like name of the business/building to be displayed when you walk near it)

Bug Fixes:
*Bug fix: Fixed random movement so not all characters move the same direction

Updates:
*Boost library to v1.46
*Race descriptions (corrected some nits)
*Improved rng and combat damage algorithms so the same number won't be continuously generated in some instances
*Many more internal code improvements

Seems I didn't release v0.0.82 more than 2 weeks ago, but alas it was more like a month ago! :) I've been updating as much as I can, although I spent most of this last month researching Lua and integrating it into the project. Also, spent a ton of time doing many internal updates to the code. Although this release doesn't contain piles of new stuff that the player sees, there are some interesting updates nonetheless.

Thanks and enjoy!
I recently discovered the advantages of Lua while doing research and doing some reading regarding ToME development. I've known about Lua in name only, but hadn't taken a long look at it until I noticed how much ToME relies on it.

It's an interesting approach and I'm excited about the capabilities to embed scripting abilities into Middlecrest. I've always envisioned the core of Middlecrest to be a library (or engine, of sorts) and this seems to be able to push the direction of the project more into that realm. I can also imagine that as Middlecrest grows, the sheer amount of source to compile will become an unwieldy time sink.

I've identified modules to begin scripting. Transitioning the code into a model where Lua becomes the logic of Middlecrest and C/C++ becomes the engine/driver of the lua modules will take some time. And I'm not sure I will be masterful enough with Lua to be able to convert everything over and compartmentalize things the way I want. I'm not sure enough bindings and support are available for Lua and the language itself is a little wonky.

Bindings for Lua and SQLite seem to be only partially implemented for version 3 (the best I've found so far is a project at 0.7) and seems to require a dll (trying to stay away from Windows-only setups for easier porting... I've been successful so far!). Lua is really high-level and so I'm not sure I will have such a fine control over the program as I have with C and C++, which limits me and I've been unsuccessful at being able to call C++ functions from Lua (which you should be able to... but, I'm still learning Lua). Tutorials are sparse, although documentation seems fair but spartan. And Lua has some wonky aspects to it that are interfering with the learning curve, like having to call the rng function twice on Windows machines, else no random number generation. Things like the rng issue aren't properly documented and probably only known to Lua gurus (or hours of googling and a lucky hit).

All these things may mean the ideal set-up of C/C++ (driver/engine), Lua (game logic), SQLite (data) may be more hybridized (C/C++ and Lua as the engine/driver and logic, and SQLite for data).

May have to see if there are other embeddable and interpreted languages out there for C++?
Updated Middlecrest to version 0.0.82

Additions:
*Added FoV (test by pressing 'f' to toggle on/off).
*Triggers for floor tiles and tied it into the message screen. Now player will be updated if the tile they are standing on triggers an event.
*Intro screen before splash screen to alert players of bugs and important information (feature will only stick around for alpha).
*Color support.

Bug Fixes:
*Altered the starting values of buildings in town to prevent crash at beginning of game.
*Safer type conversion and variable initialization to proof against future bugs.

Updates:
*Updated UI so player messages scroll.
*SQLite v3.7.5
*Refined creature/shopkeeper generation code.

Had a relatively free weekend and I took the time to take a break from working on shopkeeper code. I've included a slough of updates and some bug fixes.

I've decided to hold off on buying/selling for a moment. NPC interaction will be a more monumental undertaking than I originally thought it would be (I thought, hey, I can just get some buying/selling done for shopkeepers... but then realized I needed more generalized interaction capabilities first before I even started the buying/selling code) so I'm going to regroup and figure out my next plan of action.

There's honestly a billion new features I could work on next or code that I could re-factor and extend. I hadn't thought much farther ahead than the current state, in terms of project management. The project is at a place where I could re-tool some of the code, add a few more features, some content, (all told, roughly another month or two worth of work) and I basically would have a fully functional roguelike. This is assuming I don't have any more serious bugs.

I'm beginning to delve into areas where I can start to add some actual Middlecrest features, which is very exciting! But, it's also daunting since these features are the more complicated and involved ones.

Alas, this is a good place to be. I feel like I have accomplished a fair amount, a little bit faster than I thought it would take. I'm excited for the next few months of development.
Development on Middlecrest has slowed of late. Unfortunately, time is a valuable commodity at the moment and the lack of it has curtailed the momentum of getting a monthly or twice-monthly release out :(

However, work has been done!

Shopkeepers are coming along pretty well. They are somewhat live, spawning in their respective business (and not allowed to travel too far from them) and they have a sort of random/hovering movement programmed into them, as they wait for customers. What hasn't been implemented yet is any interaction.

Also, I took a divergent route for a week and coded in the field of view. It is testable right now (the 'f' command will toggle it on/off). It isn't integrated into the code yet since it needs some work, but is there for people to play with it and hopefully find any bugs.

Much of the work has been going into proofing the code against future bugs and solving current ones. Some testers experienced some crashes at the beginning of the game and inexplicably during the middle of the game. I tracked some of the issues down and hopefully they are history, but testing is ongoing.

The next release will feature some rudimentary interaction between shopkeepers, such as talking and buying/selling. The shopkeepers will be expanded also, so that there will be more of them, and some other work will happen with the code base so the program can actually distinguish between a shop building and other types of buildings. The groundwork for distinguishing between various buildings has already been laid in previous development work -- it just needs to be expanded.

So, here is to hoping I get a release out soon here... within the next two weeks :)
Updated Middlecrest to version 0.0.81. This release includes several things:

Extensions
* Basic shopkeepers (although buying and selling not enabled yet)
* Rudimentary skills listing

Bug Fixes
* Doors now open correctly
* Solved crash while on wilderness map
* Entrances/Exits between wilderness, towns, and dungeons now connect correctly
* Items are now removed from inventory when dropped
* Minimized (and hopefully solved) crashes shortly after the title screen

Updates
* Updated SQL library to 3.7.4
* Significantly reduced memory footprint (work still in progress)
* Many small, miscellaneous code improvements
Updated Middlecrest to include races and classes during character generation. The new version can be downloaded here.

Also includes a C++ Boost update, significant code overhaul, and code improvements.
Continuation of an earlier post, detailing the races of Middlecrest in the next release.


Ispandan - After being overrun by various tribes and races for nearly a millenia, Ispandan culture has reaped the benefits. They have evolved to be the foremost cultural force in the world with a burgeoning mercantile culture. Being experienced traders and hagglers, their great fleets ply the seaways of distant ports forming trade alliances. They have taken the best of their cultural influences over the past centuries and have experienced a growing renaissance of arts and culture that has infected the rest of the continent.

Mostly an excuse to feature some Rennaisance-era technology in the game (i.e. primitive firearms, various arms and armor, etc.) and swashbuckling-types, they are mainly a mash-up of pan-European Renaissance culture. Other inspiration includes Spanish culture during the Age of Discovery and AD&D's Sword Coast.

Abilities and Bonuses: They have an aptitude for commerce and trading, seemingly almost second-nature to them. Firearms and long-bladed dueling weapons are fashionable with all levels of society, although more so with the upper class who actually have the means to afford them.

Nordlundians and Zakrans )
Here is a sneak peak of some of the races present in Middlecrest, a description about them, and some development notes.

Generally speaking, Middlecrest's world is low-fantasy, so all the races could be considered "human" in generic RPG terms. The extent to which traditional fantasy races like dwarves, elves, various fae, goblins, etc, and how they will be incorporated into Middlecrest, is still to be decided. The tact, however, is to treat those races like their mythological counterparts -- more withdrawn and unconcerned with the world, uncommonly seen, and tending more other-worldly affairs. They typically won't be playable (except maybe some half races).

* * *


Southron - To the south of Ispanda sits a vast, unforgiving, inhospitable, and remote desert. The inhabitants have been forged by unrelenting conditions into a strong and stalwart people. The desert's remoteness has cut them off from most of the world and their culture stands in stark contrast to the civilizations surrounding them. They are largely a mystery to others, since their land offers very little in trade, value, or other interest, although the peoples of the southern deserts do rely on their neighbors for luxury and exotic goods. Very few venture into the deserts to see the secrets of this secluded people.

Inspired by the module Dark Sun (Advanced Dungeons and Dragons, 2nd edition), the ideas for this character race are taken from historical Aztec cultures, with some slight Egyptian touches, and a healthy dose of weirdness.

Abilities and Bonuses: The harsh environment they live in generally makes them more hardy than other races, and able to resist high temperatures. They are generally more versed in simple martial weapons (staves, slings) and unarmed combat. Due to their scarce environment, they generally have an aptitude for thievery and scavenging.

Brython and Keltian )

Update...

Oct. 13th, 2010 01:56 pm
Released a small, incremental update of Middlecrest here.

Mostly bug fixes and BOOST updates, but also some additions to the magic system.
One thing I definitely am not is a graphic designer. I've known (dated, even) graphic designers and people who do graphic design as a hobby. While I've learned a trick or two from them, that is about the extent of it. Tricks don't produce good design. My college art classes were a disaster, mind you.

So, here's the conundrum: I have a UI that I have to design with a somewhat limiting medium (ASCII). While some would say, "Dude, use something else, for chrissakes!!", I say, "Dude, development is a exercise in minding the quicksand". Said differently, I only have so much time I want to devote to certain aspects of design and implementation and I know that I CAN devote my time to learn curses. That's relatively simple for me to do. Also, non-ASCII graphics are a turn-off for some roguelike players. So, nyah!

Given this design decision, I've been reading some articles on roguelike UI's, coupled with my own experience of having to deal with user interfaces and those tricks I learned (yay, tricks!).

One article was rather interesting. Although, the article is somewhat crude, the ideas presented are worthwhile. Essentially, the article dovetails with many of my own thoughts on roguelike UI, regarding the steep learning curve. Many roguelikes have massive amounts of commands to memorize and it is rather frustration having to look at the manual every 5 seconds. I've never been good at memorization by rote, so having to memorize a billion key-bindings is no good for me. It makes me feel for the newbies.

Solutions )

So, any other interesting ideas/approaches to ASCII-based user interfaces?
A first post, just to introduce a few things...

As somewhat described in the profile, Middlecrest is a pet project I've been working on. One of the things that always fascinated me about open-ended games like the Elder Scrolls series is that, unlike traditional RPG's, linear story lines are not the focus; how you progress in the game world is completely at your whim. You can decide to advance through their guild system, earn reputation with various nobles, or advance through other factions within the game. Level increases were determined by how much you used your skills and not by how many experience points you farmed. While some of those features are somewhat ubiquitous now, back then they were essentially unknown to most gamers and it gave the games a unique draw that was all their own.

The Elder Scrolls release that always fascinated me the most was Daggerfall. It was probably the most ambitious release in all of the Elder Scrolls Series (although, other releases contained small innovations of their own). Unfortunately, due to time constraints and somewhat due to the borders they were pushing, many of the ambitious features weren't implemented. What was implemented, was the quest generation system, the procedurally generated dungeons, landscape, and weather, and spell maker.

What wasn't implemented was the constantly evolving world. Daggerfall split its game world into different provinces that could war and conquer each other. Whereas in traditional RPG's, the world changes as you advance through the mainline quest, Daggerfall took the opposite approach and attempted to implement a game where the world changes independently of you.

Why a roguelike version of this type of game, you may ask? Well, I'm a software developer, not an artist, nor would I want to take on a project that would require such an immense amount of work as a graphical game without a team (which, I don't have). Even with a team, games can take years to develop. Not for me, thanks :)

I wouldn't say no to possible graphical upgrades (I even have some possible ideas if it were to go that way) but I would need more manpower and expertise. I do have experience with 3D libraries and some OpenGL programming, although I'm no expert.

What I can do really well, however, is design data structures and algorithms that the game relies on. A roguelike allows me to concentrate on those endeavors. Additionally, much of what Daggerfall promised was on-the-fly generation of content. Roguelikes are the same way.

I've coded up many aspects of the game, including fledgling magic systems, basic level generation, and various character types. Many more things are designed, but not implemented.

One of the first things that needs to be done is get the code up in some way for people like you that are reading this blog to download. That is the first order of business. My first "release" will be an alpha version that will show funtionality -- it will not be a full game (maybe a simple minigame). I'm closing in on my first release and will always have updated links for whatever stage the project is at. I don't have a current unix-like environment to test it out on, so I can only say that the code works on Windows-based platforms (although my choice of languages and coding style was chosen so ports would be easy).

As I update where my project lives, I will add entries to the dev blog. Unfortunately, you will have to suffice with reading about it :)
Page generated Jul. 11th, 2014 08:30 pm
Powered by Dreamwidth Studios