Friday, September 27, 2013

Dev Log: Horror Text Adventure #21

World gen has begun.  Half the code for creating a year's worth of rooms was already in place, I had just forgotten I had already made it.  But I finished it up, and removed the previous manual room-by-room creating I had been doing and instead just made a vector of rooms quickly.  Of course, I only have two types of rooms right now, bedroom and hallway, so it's a bit of an oddly shaped house you've got with 365 bedrooms and/or hallways.  Also, currently, the rooms are like a snake rather than a maze, with room #1 connecting to room #2, and #2 connecting to room #3, with no dead ends or multiple paths.  I'll have to work on that at some point.

While I was in there I also fixed a potential bug (which I had not experienced but the code allowed it) where a room could be overridden in terms of the directional pointer, so a player might go north into a room, and then when they go south they end up in a third room, rather than the first.  That would open up great possibilities for labyrinths, but that might cause headaches for both the player and myself.  It's kind of a cruel joke that I want to discourage, actually.  I want the player to feel lost in a maze, but not lost in the game, if that makes sense.

Sometimes you call a bug a feature, but when it's easily fixable with a one-line do-while loop, there's no point.  One always has to be careful about accidents, and deciding whether they are happy or not.

It's kind of odd: setting up the world gen to allow for 365 rooms makes me feel like I can breathe.  Before, when I was just testing with two rooms, I kind of felt like I'd never get anything done.  Even though fixing up and starting world-gen was only a few lines of code, I guess the 'physical' space allows me to starting thinking of the objects and room types rather than feel cramped.  Psychology!

Tuesday, September 24, 2013

DinoPark Tycoon (A Forgotten Diamond)

I clearly remember the very first game I ever stayed up all night playing.  I think I was around eight years old.  I didn't even realize I'd stayed up all night, I simply decided it must be about bedtime so I ought to stop.  When I checked the clock, I discovered it was 4 AM.  I couldn't believe that my parents hadn't told me to go to bed; somehow I had slipped their radar.

That game was DinoPark Tycoon (of course; what's the name of this post?), and it had me hooked.  It came out the same year as the Jurassic Park movie, so the idea of an amusement park with dinosaurs was very high in my mind.

Basically, DinoPark Tycoon is a business sim like the Sim[X] franchise.  I believe this was before the "Tycoon" franchise, and it's by a different developer.  It's meant to be both a business sim and an educational game, allowing the player to look up the dinosaurs they put in their park.  The info is helpful, like dinosaur diet so the player knows how much food to buy (and whether to buy plants or animals), so the educational content is blended with the game.  This was back in the day when educational games were good at that.

Another example.
You had to manage many aspects of running a park, including buying property, fences, concession stands, dinosaurs, dinosaur food, hiring employees, fixing ticket prices, advertising, paying off loans, and even going to auctions.  You even had to pave new parking lots and put up restrooms.

I pretty sure real theme park managers buy their restrooms and parking lots from catalogs.
I remember I always had a personal goal of making it ten years, but after three a multitude of problems kick in, and after five the park really goes to hell in a hand basket.  Dealing with escaping dinosaurs is the least of your problems.  Vandals, managing employees, dinosaurs getting sick, running out of food, running out of money; all of these problems always seem to hit at once.  You have to maintain a high enough profit or the first to go is your employees.  They will leave the first week they don't get paid, and if the concession stand operators leave, you lose more money, and if the vet leaves, your dinos will get sick or overeat, and if your maintenance men quit, the dinos will break through the fences, and if your tour guides quit, visitors will be unhappy, and if your manager quits, the remaining employees will be unhappy.

It's a great big downward spiral of despair that contrasts with the perky internal speaker music and colorful graphics.

On the other hand, sticking the T-Rex behind the chainlink fence wasn't the brightest idea.
I never got into SimCity, and I always had this notion that it was because there was no win state.  I don't think that's true anymore, because DinoPark Tycoon had no win state, but I was obsessed with it.  I think ultimately a lot can be said for theme.

On the surface, you might assume this is a cash-in on Jurassic Park, and it might be partly true, but this takes a much different spin on the concept.  Jurassic Park is really about the characters trying to escape, but DinoPark Tycoon is much more about building and managing such a park.  For some reason, as a little boy, the management of a dinosaur theme park seemed far more interesting than watching dinos eat lawyers.

I think this game is a bit of a hidden diamond.  I don't know too many other people (except those I grew up with) who ever played it.  There were some similar games, like a licensed Jurassic Park themed game, and a dinosaur expansion to Zoo Tycoon, but I think this one has the right level of complexity (or perhaps simplicity) that helped get me into the genre.

DinoPark Tycoon can be found on most abandonware sites, so if it works on your computer, give it a try.  Even if you don't like SimCity (and I don't), this game might get you interested in simulation games.

Friday, September 20, 2013

Dev Log: Horror Text Adventure #20

Just a bit of bug fixing this week.  I discovered a bug when the room the player starts in is south of the second room; the rooms didn't realize they were connected.  It turned out I was checking a vector index from 1-6 instead of 0-5 (indexes! -shakes fist-).

I did add couple more terms to the dictionary so the player can move up and down a floor with a few more vocab words.  I always found the the biggest problem with text adventures was that players had to be oddly specific with vocab, so I hope to be able to make it as robust as I can.  Might be a little too much to make a spell check.

I'm trying to figure out how to do a bit of world-building, and considering how to make the odds of different types of rooms.  Right now it's too simplistic, so sometimes you don't want two of the same type of room coming together (so two hallways would be fine, two connected bedrooms would not), but the chance of that happening is too good.  So I'm thinking of adding a variable to each room type that determines the chance of it coming up when a new room is made.  But I think there's a better way to do that, so I'll see if I can figure it out.

Tuesday, September 17, 2013

Dominion: After Dark Part 7

Well, the past six posts of this series have been introducing each card.  Now you can print them out and play them yourself.

Also, if you'd like to have a copy of the rules and errata handy, you can print out the rules pdf.

The only thing missing currently from the rules is suggested sets.  As I come up with them, I'll add them.  I'll also change the errata (and printouts) if any cards change in the future (like I mentioned, Chaplain might become cheaper after more testing).

If you have any feedback, feel free to leave a comment.  It is especially helpful if you play and discover that some cards suck, or are too expensive, or too cheap, or to useless and specific, etc.  I will work to change cards in this set based on player feedback.

Have fun!

Edit Jan 10, 2014: Cards now have the artist name in the lower-right corner of each card.  Some pictures I couldn't "refind" in Google, so they are unknown until I find attribution.

Friday, September 13, 2013

Dominion: After Dark Part 6

Here is the final four cards; basically just odds and ends.

But awesome odds and ends.
Blood Pact was one of the first cards I made, and it's been through many iterations.  Originally, all the cards with monster artwork and names like Wendigo and Zombie had an additional type called Critter.  This was used in a variety of ways, but it really overcomplicated things, so I cut it out and simplified all cards dealing with them.

Originally, Blood Pact allowed you to play a Critter from your hand twice, or something like that.  But ultimately, that was just a limited Throne Room (from vanilla Dominion), so it needed to be reworked.  I tried switching it around to make it a Reaction, so if you played a Critter later in the turn, you would gain a copy of it, but the Blood Pact itself did nothing.  That, of course, was similarly useless.

Anyway, I don't remember all the different things I tried, but ultimately I landed on this, which is like a limited Throne Room, but it gives you options, so giving the card multiple functions helps to balance out the card.

Graveyard was also there from the beginning, and it's also had a few iterations.  Originally the player simply gained an Apparition, but in my attempt to make Apparitions more rare, it got replaced with the new text.

Hunchback is quite a fun one, and like previous cards, it doesn't seem as powerful as it is.  It is a little like Kitten (from my own other expansion Dominion: Good Will), which is probably how Hunchback began.  I like Hunchback a lot more, however, because it's far more versatile.  Not only do you get to do whatever you want with a card, but you have two to choose from.

Lastly comes Voodoo Queen, which pretty much ties together every new mechanic I made.  You can gain a Charm or an Apparition, and there is a funky Reaction that can be triggered either by yourself or another player.

Next post on this will be the full rules and errata, as well as a pdf of the cards so you can print them out yourself and enjoy!

Tuesday, September 10, 2013

Dev Log: Horror Text Adventure #19

The player can now pick things up. Woot!

It was mostly just a question of comparing the second word of a "take <item>" command with the names in the room's item vector.  If it matched, push the item to the player's inventory and splice it out of the room's.

Now, however, the big problem is becoming capitalization.  Just to make things easy, I originally made it so everything had to be typed in lowercase, but I didn't think about that when I made the item names in caps.  So the player couldn't pick anything up without saying "take <ITEM>"!  For now I just changed the items to lowercase names, but I think next I really need to make that more convenient.

So next up will probably be taking the player's input and passing it through some kind of filter that takes every letter and makes it the uppercase version of that letter (unless it already is).  It shouldn't be tough to simply subtract 32 from the ascii code of any letter with a value between 97 and 122; the main thing is getting one letter at a time from the input.  I already chopped it up into individual words, but I'm thinking what I may have to do is cut it into chars, send it through a case switcher (not to be confused with case switches!), then slam it all back together, before THEN passing it on to the word chopper.

I'm sure I've also got a few bugs to fix with the player taking items code (like the room description needs updating), so I've got a bit of mechanical cleanup to do before getting into a new mechanic or feature.

Friday, September 6, 2013

Dominion: After Dark Part 5

We've introduced all of the new mechanics for this expansion (unconventional Reactions, Charms, Apparitions, and Poltergeist), so all that's left is a few more odds and ends to round out the set.

Money / Get away / You get a good job with good pay and you're okay...
Let's say the mini-theme of these four cards is money, just for snicks and giggles.

Funeral Home is a surprisingly powerful card, even if only for the basic bonuses.  Add to that a powerful (though rarely used) Reaction, and I almost want to make the card worth $6.  It doesn't look quite as powerful as it really is, which makes it a steal for its price.

Hanging Tree is a variation on Salvager (from Dominion: Seaside).  I haven't tested this one much yet, so I'm not sure if ultimately it should cost more.  You might use it just to trash a Curse or maybe a Copper, for instance, and it wouldn't do too much good for you.  However, I think it might be slightly more powerful than Salvager, so it might need to be more expensive.

Knocker is a fun little Treasure card.  It acts similar to some Dominion: Prosperity Treasure cards like Bank.  The key is to be careful that you don't wind up with it being the only Treasure in your hand, or you'll have to trash it if you use it.

Wendigo was one of the earliest cards I came up with, and like Funeral Home, it doesn't seem like much at first glance, and it's expensive, but worth every bit of it.  The bonus you get varies based on the number of previous Actions you've played, so it can really add up.  I think of it slightly like a variation of Library (from vanilla Dominion).

Next post will be the last four cards from this expansion.

Tuesday, September 3, 2013

Dev Log: Horror Text Adventure #18

I did a little bug-fixing and house keeping on the text adventure.  First, I reordered the Main code so the display function was called last, after the rooms were made, so the directional description displays properly (so the player knows there is a room connecting it).  I also added a couple more ways to let the player type to move, so they can say "move", "go" or "head" and then a direction to get where they want to go.

The big thing was cleaning the code and dramatically reducing the size, both in the Room class and the Interface class.  I finally broke down and changed the six directional pointers (which connect rooms together in a doubly linked list) into one vector of rooms pointers.  Since the pointers are no longer named by direction, I have to put in a comment that 1 = North, 2 = East, etc. But it saves a lot of room so I'm not duplicating code, and can instead reduce large If statements into quick For loops.  I think I may have cut around 50 lines of code by doing that (and I perhaps more will be saved in the future).  It's a trade-off between cleaner code versus readability, but I think it was worth it.  I do want to find a way to fix one more bulky section dealing with that, but I don't think it matters too much just yet.

Now, didn't I promise being able to take objects last time?  Next time...