SPID3 – Halls of the Clear Creek (DND1 Remake)

I will be posting SPIDs (Slashie’s Project Idea Drafts) in the blog, they will be short ideas for games or other projects I may or may not develop into full projects. May be someone will be inspired by them and save me the trouble of developing them.

Remake Richard Garriott’s DND1 as a classic Ultima game with an overhead tiled view, keeping as much as possible of the original game elements but making it a balanced and fun experience, while at the same time evolving it in a different way than Akalabeth and Ultima 1.

creekMockup

Two years ago, I participated in a contest to recreate the original game so that it could be played in modern computers (as well as introduced into Shroud of the Avatar) the results can be played here

The original DND1 used a teletype as the means of player interaction, it printed the events happening into the world in paper, and the player typed the commands to guide his character through the (deadly) dungeon.

After creating a character (from three possible classes Fighter, Cleric or Wizard) and rolling his stats, the player can buy equipment from the dungeon shop (available items are weapons, armor some utility items as well as food).

Then, once in the dungeon, the player had access to the following commands:

  • Move around: In each of the cardinal directions, after moving the player could fall into traps.
  • Open Door
  • Search for traps and secret doors
  • Switch weapon at hand: i.e. wielding a weapon from inventory
  • Fight: Used when an enemy was next to the player. Combatants would hit each other until missing (savage!)
  • Look around: Since the game didn’t show the surroundings after each action, this would make it print the surroundings as a coded matrix.
  • Save Game
  • Use Magic: Use one of the bought spells
  • Buy Magic: Get access to spells according to player class.
  • Pass
  • Buy HP: Exchange gold for HP.

All these command would be changed as following

  • Move around: Use directional keys instead, moving the player into the map.
  • Open door: Used automatically when moving into a door.
  • Search: ‘S’earch command, would show secret doors and traps.
  • Switch: ‘Z’tats command, allowing wielding weapons and wearing armor.
  • Fight: Moving into monsters or ‘F’iring ranged weapons in a direction.
  • Look Around: No longer needed since the viewport is updated after each action.
  • Save Game: Ctrl+’S’
  • Use Magic: ‘C’ast spell, then the number of the spell, based on the learned Spells
  • Buy Magic: Instead of a command this would be done by talking with the mage shopkeeper (an NPC)
  • Pass: Spacebar
  • Buy HP: Instead of a command this would be done by talking with a trainer (an NPC)

The objective of the game would be the same as in the original: Killing all monsters in a floor and then advancing into the next one (with tougher monsters). There are 8 floors.

A light plot, previous to Ultima 1 and Akalabeth, would be introduced into the game.

Floors would be generated with a layour similar to Ultima 4 SMS dungeons.

Some data from the original:

  • Weapons: SWORD, 2HSWORD, DAGGER, MACE, SPEAR, BOW, ARROWS
  • Armor: LEATHER, CHAIN, PLATE
  • Utility: ROPE, SPIKES, OIL, CROSS, FOOD
  • Enemies: BANDIT, GOBLIN, TROLL, SKELETON, BALRON, OCHRE JELLY, GREY OOZE, GNOME, KOBOLD, MUMMY
  • Cleric Spells: KILL, MISSILE 1, 2 and 3, CURE, FIND TRAPS, WITHSTAND, FIND DOOR
  • Wizard Spells: PUSH, KILL, FIND TRAP, TELEPORT, FIZZLE, MISSILE 1, 2 and 3, FIND DOOR, WALL

 

Age of Storms – Finished!

After doing lots of tweaks and reviewing, I managed to finish my short story: Age of Storms, which is based on the events of the Hearth of Britannia: Lifeblood of the Hearth event.

I also removed the images since I didn’t feel they didn’t fit well (I think the only thing that would fit there would be illustrations by Denis Loubet 😛 )

Some major changes were introduced from the first edition, so take a look 🙂

Page: The Age of Storms

The Age of Storms – A short story

Last week I was at the Hearth of Britannia: Lifeblood of the Hearth ]|[ event which was awesome. I got to make countless new friends, as well as meet very interesting people including Lord British, Denis Loubet, Manda, Iolo, Warren Spector and many others.

And, since I couldn’t get this out of my head, I decided to write a short story based loosely on some of the events that happened there, put together in a single timeline. I hope you enjoy reading about The Age of Storms!!

tournament

Ultima 7 Turn Based Combat for Exult

Ultima VII is a great game, I still remember around 1998 when my aunt bought a Pentium PC with “multimedia”, CD-ROM and a Sound Blaster card. It even had dialup Internet!

In a time where all you could find around were CDs with Shareware demos, I found a treasure among the driver CDs: Ultima VII, Ultima Underworld, Savage Empire and some other awesome games were included as some sort of samples of the power of Creative Labs’ Sound Blaster card. They even came with a small thick book bundling the manuals for all of them.

creative
Thank you, Creative Labs

Funny enough, getting these games to run was actually quite complex… most of them required tweaking things around, but it was worth it… I played the heck out of all of them (Except Wing Commander Academy, which for some reason I never liked too much, and the Mahjong one because… well, it was Mahjong.). These games were a defining part of my life… I learned English reading these manuals and playing these games made my interest in game development grow even more…

Back on track, Ultima VII is a great game… I still remember once I finally managed to make it run how a world came alive in my aunt’s computer screen. It felt so massive… the graphics looked so vivid, the music was so great, the world was alive with everyone living their own life… I think I didn’t actually get to play thru the game back then, but it left a great impression on me.

Screen Shot 2016-02-07 at 1.00.57 AM
Hint: There’s something creepy in the stables

That being said, there are two things that have always bothered me about Ultima 7:

  • The weird overhead perspective: Although I have been pointed out that it’s actually pretty effective for gameplay over other projections, since less space is hidden by walls.
  • The combat.

Combat is an important part on cRPGs. In some cases it’s the only type of conflict, and you need conflict to control the pace of the game.

Now, imagine you are playing Chrono Trigger (another cool game, a bit more widely known). Imagine you meet a group of enemies but instead of going into battle mode all your party members just pop up and run toward the enemies, while the party of enemies rushes to your characters and starts breaking through them. You don’t have a chance to think thru and use spells or items, everything happens so quickly that after 2 seconds your party is dead.

Cyccave
Just sit through the battle and hope everything goes well (Image from Ultima Wikia)

That’s basically what combat in U7 felt like. You were never in control. What a wasted opportunity, specially since previous games had contributed a great share to how tactical battles were handled in computer RPGs!

I must note that the game provided you with the opportunity to set up a combat mode for each of your party members, you could set them to attack the strongest or weakest opponent, among many other options. However, this didn’t really help much to engage with the game once combat started.

Screen Shot 2016-02-07 at 12.59.12 AM
Granted, dark blue on black isn’t very readable 🙂

Exult is one of the oldest and more popular Ultima fan projects; it allows you to run all the games using the Ultima 7 engine in modern platforms. It’s not a remake… it takes the data files from the original games and uses them to run a custom made engine, adding a lot of options for improved user experience in addition to making it dead simple to run in about any modern computer.

But, there’s another thing that Exult allows doing, it gives us a chance to fix things we don’t like about the original game. And that’s what I intend to do!

xrotate1
Some years ago there even were some efforts to provide a different perspective change (it wasn’t included in the main version for technical reasons)

I want combat in Ultima 7 to be more interesting, more relevant, more tactical. I want to try and make it turn based.

The idea is pretty simple:

  • Exult already supports pausing in combat
  • We must detect when the party engages in combat and auto pause.
  • From here the player can either:
    • Move around a limited number of steps
      • This one may probably be the most complex thing to detect
    • Attack a monster (either melee or ranged)
    • Cast a spell
    • Use an item
    • Pass the turn
      • Requires adding a button to the UI
  • Once the player does any of these, the game resumes for about half a second, and pauses again if still on battle and the player is still alive.

So far I have checked-out Exult’s source code and set up my dev environment with help from dominus. I started looking around a bit and found out pausing and resuming the game can be accomplished using gwin->get_tqueue()->pause(SDL_GetTicks()); and gwin->get_tqueue()->resume(SDL_GetTicks());

I’m planning to meet with dominus next week to discuss my idea with him and maybe get some pointers 🙂

Ultima Castle Map Generator: Day 8

Ok, I think I’m done at least for now… I just can’t get something out of my head once I start, this kind of mini projects hijack my mind and derail me from other things I really should be doing, but I’m ready to give this a rest.

day8

It’s done! You can check it out online at http://slashie.net/ultimacastlegen (images are not preloaded so it may take one or two generated maps for graphics to show up)

You can also check the source code at github (It’s not super beautiful, but it was fun!).

As it stands, it generates a single floor layout of a castle based on the design of the old Ultima games, specially Ultima 5. It goes roughly through 4 phases:

  1. Defining a high level structure of the rooms to be placed.
  2. Splitting the available space into rooms, based on the high level structure.
  3. Assign the rooms a given function.
  4. Fill the rooms with the appropriate furniture and contents, based on its function.

During day 8, I did the following

  • Fill the remaining space after the initial room expansion, to ensure most of the space in the castle is used to place rooms.
  • Build throne room, staff quarters, guest rooms, castle lord quarters, dining rooms, kitchens, libraries and halls, furnishing them with all sort of stuff based on the reference material.
  • Render 14×16 pixels sprites instead of 16×16 (high fidelity)
  • Enhance connection of the central feature with the rest of rooms
  • Clean spaces in front of doors to ensure walk-ability.
  • Add treasure chests with secret doors
  • Remove some room types belonging to other floors (forge, for instance)

There is certain room for improvement, and there’s of course the question of adding the basement and additional floors (and connecting all together!). But from what I see, that would take a bit of time.

Doing this generator was pretty interesting… I learned a couple of new tricks I hope will be useful for other projects in the future.

Have fun!

Ultima Castle Generator: Day 7

Screen Shot 2016-02-01 at 11.47.25 PM

Rooms are now linked together, to do this I explore the rooms recursively, starting from these west and east of the courtyard; I scan the map for nearby rooms on each direction, recording the limit segments and then I pick a random place from the segment to place a door. Then I explore the connected rooms repeating the process, as a result the whole map is connected.

Additionally:

  • Rooms’ minimum size is now bigger, in turn the generator now rejects structures in cascade, in case it’s unable to place or assign the rooms
  • Entrance is now split on an in-castle portion and an outside castle segment.

Next up:

  • Finishing entrances and wall corridors
  • Working on the rest of room builders
  • Add moat and drawbridge
  • Put kitchen next to dining rooms

Ultima Castle Generator, Day 5

castleDay5

There’s not a LOT of advancement today, but I decided to skip some steps and go right into the tile renderer (using just floors and walls, without the room’s contents).

From here I noticed some small inaccuracies to be fixed (Notice for example the differences between the west and east towers in the image above), as well as some stuff to be polished on the rooms generator (like adding a minimum width and height for rooms to prevent 3 tile big rooms from happening).

I also created a simple random terrain generator; that one will have to be completed to add the moat, may be.

Ultima Castle Generator: Day 4

ss2

I’ve implemented the following:

  • Beautiful symmetry, basically allowing the castle to be “almost” symmetrical vertically. I love how it ended up, with small changes on each side.
  • Allow specifying rooms to be placed in the north of the castle
  • Allow specifying mandatory rooms south of a given room
  • Allow specifying preference for “big” rooms

Following is still pending for the Room Generator:

  • Allow specifying rooms to be placed next to each other (i.e. put the kitchen next to the dining rooms)

Then I’ll work on the “third level generator” to create the tile map.

If all goes well get ready for some cute screenshots tomorrow.

Ultima Castle Generator: Day 3

Ok, I must confess I’m a bit obsessed over this. I’m sorry, I can’t help it.

Lots of advancements today, here’s a sample of the current results. You can check it out online here

castle1

Today I created the RoomsGenerator; it takes the high level castle structure as an input from the CastleStructureGenerator and based on it it generates a set of rooms and places them on the map.

I also created the Canvas Renderer in order to be able to visualize the results in a graphic way, this in turn helped me tweak some size parameters on the structure generator.

Placing the towers, walls, entrances and central feature was not very complex, the challenge was filling the remaining space with rooms…

area1

Since the area to be filled is not rectangular (the main hall and the entrances should not be covered), doing recursive subdivision such as the one I made for the Stygian generator was not going to work; I thought as an option I could generate smaller rectangular areas from the big area and apply subdivision to each, but since the scale was so small (32×32 for the full map, about 13×20 or less for the area to be subdivided), I knew subdivision was going to be troublesome.

In the end I thought on doing something I rarely do: placing rooms by brute force. Initial results were not very good with lots of unwanted empty space. I was about to explore other options…

initialBeruteforce

…but then, I figured I could make the rooms grow to fill the empty space! 🙂 As a result architecture looks a bit more “organic” than the one generated by subdivision, with less “long lines”, which is good for small maps like this one.

I’m pretty happy with the current results, following are the next steps:

  • Enhancing the room generator to have in consideration what rooms should be placed next to each other
  • Creating the third level generator which actually renders the rooms into tiles and places all decoration and stuff.
  • Connections between rooms will be added by the third level generator (that should suffice for the scope of the generator).