Wednesday, August 29, 2007

FLOSS - Richard Stallman

If you are even slightly involved with open source then you have heard about Richard M. Stallman, the founder of the Free Software Foundation and the creator of the GPL. Some people idolize him, others think he is too evangelistic. I personally am envious of his hair. It is not fair that someone over two decades older than me should have so much hair when mine is prematurely falling out.

According to the legend, and I have heard this story from countless sources, Richard saw the need for the FSF when in the early eighties the MIT labs that he was working in received a new laser printer. This printer, as with other printers in the lab, was a shared printer. This means that you would send off your job to be printed and then collect it later. The programmers had the source code to the other printers drivers so had modified this code to send a message to the computer that send the print job once the job was done. This new printer did not have the source code included with it so Richard was not able to add this feature which pissed him off. To throw fuel on the fire, some of his associates were working on third party projects and could not share their code with him due to non-disclosure agreements. Richard decided that he didn't want to live in a world where software was controlled by corporations instead of the programmers who wrote the code so started the free software foundation as a way of making sure that there would always be an alternative to closed source software.

As explained in earlier entries, this lead to a problem. Wanting to give away source code is fine, but in order to make sure that the source code remained free you couldn't just give away the source code. What was needed was some way of making sure that the source code always remained free. And the way Richard did this is with something called the GPL.

Tuesday, August 28, 2007

Breath of Fire 2

Breath of Fire 2 is now available for the Wii virtual console. I have this game for my GBA so will not be downloading this RPG, but if you are looking for a good RPG you might want to give it a try. Not sure why there are so many RPG releases on the virtual console lately, but it is a trend that I hope continues.

Monday, August 27, 2007

FLOSS - BSD Problems

In my last installment (yes, it has been a while) you may have noticed that I referred to the license as the new BSD license. Why the distinction? Older versions of the BSD license had an advertising clause that required people using the source code to include notices in their advertising if the ads mentioned a feature that was derived from BSD code. Of course, this clause was changed to reflect the organization that used the license, so if you used a lot of BSD code - likely in the form of function or class libraries - then your ads may have to contain dozens of notices. This flaw was removed from the license in 1999.

The big problem with the BSD license is that the source code does not need to be distributed. More importantly, changes to the code do not need to be distributed. This means that you can take a BDS licensed program and make improvements to it then distribute the enhanced program without source code. While people would still be able to find the original version of the source code if they searched hard enough, they would have to re-create the enhanced features from scratch.

While it is certainly possible to argue that you have no obligations to release your changes, the creators of the original code you are using were also not under any obligations. The fact that people could use BSD code without having to give anything back to the community is one of the reasons that other open source licenses were created and used, with the most prolific of these being the GPL. Of course, to properly understand the GPL, you first need to know a little bit about it's creator Richard Stallman.

Sunday, August 26, 2007


I have been thinking about what my short term development goals for Blazing Games should be. The fact that the results of the poll were so close actually makes my decision a bit easier because no matter what decision I make it won't be the wrong decision. This is kind of a nice feeling. So, my thoughts are as follows.

First goal has got to be making sure that there is material for my site, even if a big third party project comes along and takes most of my time for many months. To be honest, the best project for insuring I have content is my dozen days project, especially if I do it in the way I originally envisioned.

Second goal is to keep the One of those Weeks and Coffee Quest fans happy. This can easily be done with one of those weeks by keeping my current monthly episode release, though I have an even better idea running through my head which just might come to pass in October. I am not going to discuss this idea because if I do and it doesn't happen then people get mad at me so the best thing is to not say anything until my plans are finalized and everything is ready to go. If I try to keep putting in an average of 10 hours a week towards Coffee Quest Revenge (and I am falling behind in hours, but I will eventually catch up) then once it is done the Coffee Quest fans will have a lot of material that will be occupying their time while I finish off before 4, 5 and 6.

The third goal is to finish off the outstanding projects that I have started. Working on the first two goals will go a long way towards achieving this goal so once I get to the point where I can focus on this goal, the goal will be a long way to being completed.

Once all the above goals have been met, then it is simply a matter of seeing how long I have until more content for the site is needed. I am hoping that by the time I have finished all the above goals that my buffer of releases ready to go will be fairly large. If there is a large enough period between the date that the third goal was achieved and the next date that I run out of content, then I can start work on a really elaborate project. Once caught up, I am going to try and stick to working on one project at a time, though if my buffer of releases is large enough visitors will still get a nice variety.

Friday, August 24, 2007

poll results

I have finished analyzing the results from last week's poll. Less than two dozen people bothered to vote but those who did varied fairly wildly in how they ranked the five projects. To figure out how people rated the projects, I used a fairly simple technique of averaging the scores. The scores were simply the ranks assigned to the projects. This means that the project with the lowest average would be the most popular. When these numbers were rounded off, I ended up with a five way tie.

This is actually quite significant, in that it means that the difference between the most popular to least popular project is not very high. That being said, I wanted to have a rank of projects so I changed the rounding to 2 decimal places and ended up with the following ranking. 2.62 Ultimate Retro Project. 2.95 Coffee Quest and One of those Weeks. 3.05 Dozen Days Pentalogy 3.43 Books and Articles.

Due to the small sample size, I can't say with certainty how accurately the poll reflects the wishes of my visitors. Likewise, when looking at individual votes, I am fairly certain that a few of the people voting never read my instructions and ranked the projects in the wrong order. While this would not have a huge impact on the results if hundreds of people voted, with only 21 votes this probably has a big impact. Still, after looking over things with the knowledge that I will soon be between paid projects I have some interesting decisions to make.

Thursday, August 23, 2007

Three goals of the poll

The poll on the Blazing Games site is now over. I was quite surprised at how varied the results were. Going by the few emails that I do get, I had expected the results to be fairly consistent along the lines of 1 Coffee Quest, 2 One of those Weeks, 3 Dozen Days, 4 Ultimate Retro Project and 5 Articles. This was not the case. I haven't decided if I will tell you the outcome, but I will now tell you the reason for this poll. In fact, there were three goals for this poll.

First thing that I wanted to do was see how many people would actually bother filling out the form. I wanted the poll emphasized, so I even went as far as postponing the planned release for that day. Sadly, I did not get as many votes as I had hoped. This should probably not come as much of a surprise as the vast majority of the people who visit my site never actually go to the home page. In fact, I suspect that I could stop updating the site and most visitors wouldn't even know. I am not going to do that, at least not intentionally.

Second thing I wanted to see is if my gauge of what my visitors wanted was accurate. By seeing how they ranked projects relative to how I rank them is always useful. The large variety of rankings tells me that my visitors are a lot more varied than I thought. Not sure if this is a good thing or not.

The third goal, which happens to be very similar to the second goal, was the obvious get the projects listed into a rank of highest priority to lowest priority as I am going to finish off these projects, if I can make sure that the most popular projects are getting the most attention then my visitors should be happy. As I have already repeatedly mentioned, this did not work out as I had expected. Interest in all projects tend to be a lot closer than I had honestly expected.

Tuesday, August 21, 2007

Paper Mario - Story

Let us finish off this review of the game by taking a look at the story. The game starts out with a playable cut scene. By playable I mean that you have to go through the motions of the game but are forced into specific actions. This is where you find out that Bowser has the Star Rod which makes him invulnerable. At the end of the battle you get thrown from princess Peach's castle which is on top of Bowsers castle and is floating in space. Somehow you survive the fall. You get discovered by friendly Goomba's and get taken to their "town" where you end up on a quest to find a hammer. Once found, you get Goombario as your first party member. You then need to travel to Star Summit to find out what is going on. This requires crossing a bridge guarded by the first boss, the King Goomba. Crossing the bridge leads you to the main town and from there you can go to Star Summit where the story really starts.

It appears that not only did Bowser steal the Star Rod from the seven star spirits, but he also locked up the seven star spirits in seven different locations. You, obviously, have to rescue the seven star spirits in order to gain the power to counter the star rod so that you can beat Bowser in a fair battle. This leads you to to a variety of areas including (in random order) a Volcanic Jungle Island, a Frozen Wilderness, Space, a Fortress, a Haunted House, a Desert, a Toy Box and Flower Fields.

Between the chapters you get to control Princess Peach as she tries to gather information that she feeds to Mario via Twink (a young star). Gathering this information leads to stealth sequences that can be somewhat annoying if your timing is poor. There is also a cooking sequence that is quite interesting and a quiz show that she gets to compete in. The one combat she is involved in is really just an extended cut scene where you don't really have any options at all but have to go through the motions.

Overall, for 1000 points this game is a must-have game if you enjoy role-playing games.

Monday, August 20, 2007

Paper Mario - Inventory

Inventory within the game is only usable by Mario and is very limited as there are only 10 slots. Quest items, such as keys are kept in a separate inventory so you never have to worry about items needed for the game. Items can be broken down into two basic categories. Items that heal you and items that cause damage on your opponents. Since combat items can only be used once and generally are not powerful enough to wipe out your opponents, I found the combat items fell into a use them if you find them but don't bother buying them category. Healing items are much more handy. These tend to either restore Heart Points or Flower points. A few items will heal both, but these tend to be items you make by going to Tayce T. the cook.

Cooking is a really interesting aspect of the game. You give one item to the cook and get a different item in return. This can be coded by using a simple table. After you find the cook book, the cook can use two items. This again can be done using a simple table look up. What makes cooking interesting is the simple fact that by combining a HP healing item with a FP healing item you will often end up with an item that restores both FP and HP, which is good as you then need fewer inventory slots.

The ten inventory slots, while filling up quickly, are supplemented by 32 extra slots that are available by storing items at store. What is really nice here is the fact that you can put stuff into storage at one store and reclaim it at another store. This means that you can make a large pile of Shroom Steaks (a life shroom and a mushroom) and put them in storage. There happens to be a store in Bowser's Castle so you can withdraw these steaks just before you go into the final boss battle.

Sunday, August 19, 2007

Ranking Woes

As anybody reading this is probably already a regular visitor you have probably already seen my ranking poll that I have out this week. If you are not familiar with, how the heck did you find this page and why haven't you checked out the link on the side especially considering the name of this blog? The outcome of this ranking poll is important to me as it will dictate the priorities I give the 5 outstanding projects that I am working on. Some of you may be about to point out that the five projects on the list don't cover all the outstanding projects that I talked about. This is partially true, I have postponed a couple of projects until the five outstanding projects have been completed. Though, what a lot of people didn't know until now is that the Dozen Days project is going to contain at least a couple of the projects that I have talked about doing.

While I should probably be saving this discussion until after Thursday, I am pointing all this out now to point out something that I have discovered. It seems that some of the people voting either have very interesting project interests or are not reading the instructions or noticing the worst and best text above the poll choices. Granted, this best and worst text was added to the header Friday evening when I first suspected that at least one person had accidentally put their choices in the wrong order. The thing is that many of these strange votes happened yesterday so the qualifying text on the table had already been added.

At the same time, I have to entertain the possibility that these votes are actually valid. It could just be my personal opinions that are getting in the way. Still, one particular vote really confused me which is why I am sure that some people are ranking the projects in the wrong order. I could be wrong so the only fair policy is to count all the votes and hope that the number of people casting votes in the proper order (1 is the best, as in number 1 or the winner or first place). That said, if you haven't voted yet, please pay attention and make sure your choices are in the proper order.

Saturday, August 18, 2007

Paper Mario - Level Advancement

When you defeat an opponent that is at a higher level then you, you gain star coins. For every 100 coins you obtain, you gain a level. Whenever you gain a level, you are given the opportunity to increase one of your three properties. The game is fairly well balanced so the choice is almost always a difficult one as you could use all three. There is an upper limit on all of these properties. The upper limit is a bit lower than I would have liked, but I am one of those level up my character style of role-playing game player.

Note that opponent level information is not present in the game, so I am making an assumption about the way star coins are rewarded. I am assuming that all opponents are given a level and that experience is simply max(0, opponent_level - player_level). If I was coding this, I would have done this slightly different. I would probably make the coin counter go up to 1000 instead of 100 and have each opponent given an experience value based on the difficulty of that opponent. I would then reward experience using max(1, opponent_xp - player_level). This way, players would always gain at least 1 experience point for suffering through combat.

Party members only get leveled up when you find a special type of block in the world. These blocks will only work once and initially will only advance a character to super level. Once you reach Yoshi's Island, you will be given an object that will allow you to use those upgrade blocks to raise characters to ultra level.

Friday, August 17, 2007

Paper Mario - Combat System

The combat system in Paper Mario is a menu based system. As mentioned earlier, there is a first attack feature on the main map so you or your opponent may get a free attack. Once this is out of the way, Mario and his companion each get an action. Once these actions are performed then each of the opponents get a turn. You can face up to four opponents at a time.

Mario has a basic jump attack and a hammer attack once he has acquired the first hammer. In addition to these basic attacks, more advanced jump and hammer attacks can be performed if you have the appropriate badge equipped and enough flower points. Each badge has a badge point cost so you are limited to how many different types of attacks you can have. There are also badges that are defensive in nature and some that give you other abilities. The most important badge to me is the quick swap badge that lets you swap out your companion while letting the replacement companion still get an attack. As an alternative to attacking, Mario can use an item or use a star power (once star powers have been acquired).

The companions can only attack or swap. Swapping a companion for a different one takes up the companion's turn unless the quick swap badge is equipped. Each companion has their own set of up to four attacks, based on the level of the character. The first attack is free, while the other attacks cost Mario flower points. Many of the special attacks do things such as put the opponent(s) to sleep. One of your companions can make you invisible for a turn making the opponents miss you when they attack. While this sounds great, the designers play-balanced this power by having that companion unable to act the following turn.

The monsters attack Mario pretty much exclusively, with the rare attack on your companion only having the effect of temporarily knocking out your companion for a number of turns. As the companion can not use items or heal Mario, you do occasionally end up in a situation where Mario is dazed, frozen, or asleep and the only thing you can do is hope that Mario's heart points last until he recovers or your companion wins the battle. This is a very big flaw but thankfully does not come into play too often.

There is a slight arcade element to the combat. Every attack has an arcade action (timing related for the most part) that can cause the attack to do extra damage. For the most part this is not a requirement but there are a few monsters that you will encounter for which you will do no damage unless you get the bonus damage to register. Very poor design. Damage can also be reduced by clicking on the action button just before the opponent hits you. I almost always took full damage.

Thursday, August 16, 2007

Paper Mario - The Party

The party in the game, not including Mario, is very limited. In fact, coding the party would be very easy to do as the only thing that you would have to track is a 2 bit number for each of the members indicating the level of the character. Party Members only have three levels. Their starting level, super level and ultra level. You can have up to 8 members tagging along with Mario. You gain members as you progress through the story. While the game pretends to give you a choice about taking the member or not, the end result is always that the character joins the party.

While you may have eight members in your entourage, only one member may be with Mario at a time. Swapping out the character can be done at any time, so this isn't that big of a limitation. Each character has a special ability that can be used. These abilities are used to solve the various puzzles in the game. In fact, at the end of the game you will find yourself swapping characters constantly to get through the final chapter.

Mario, as the hero, is a bit more complicated. He has three attributes (and later gains a fourth one) that grow as he advances in levels. Heart Points are your health, Flower Power are your "magic" and Badge Points control how many special abilities you can have. Levels are gained by collecting star coins which are earned by defeating opponents. If you are a higher level than an opponent, you no longer earn star coins but still have to fight the opponent anyway. I wrote a rant about this subject earlier.

Wednesday, August 15, 2007

Paper Mario - Basic Game Play

The game is a 3D game with all the characters in the game being 2D, hence the word Paper in the title. This is a fairly simple thing to code as all you need to do is to use the artwork for the characters as an alpha-mapped texture placed on a plane. The 3D view is simply a camera that is essentially on a rail. The position of the camera would the be based on the horizontal (x) position of the character. The world is broken into small chunks, so only a small amount of the world needs to be loaded into memory at any give time.

The player's interaction with the environment is fairly limited. You basically can walk over things, use your action button on things (for reading signs) or can use your hammer on things. Monsters and NPCs do exist and can be interacted with. Bumping into a monster will take you into the combat system. There is also a first attack feature that allows you or the monster to gain a free strike simply by purposely attacking in the game screen.

Non-player character interaction is very limited and amounts to a simple static dialog message. Static may not be exactly the right way of describing it as the message does change as the game progresses based on what chapter you are on or which character you have with you. This, of course, leads to the rather lengthy topic of your party.

Monday, August 13, 2007

A new Darkness

As anybody following this blog knows, I was for the longest time complaining about the lack of RPGs on the Wii Virtual console, with the Release of Paper Mario being a pleasant surprise. The week after Paper Mario, Shining Force was released but until last week I was not able to play this game due to the fact that I was working my way through Paper Mario. Last week I finally finished Paper Mario, so I picked up Shining Force, hoping that someday they would release the very first game in that series Shining in the Darkness. Today, they released Shining in the Darkness but as I am a week into Shining Force, I am going to have to wait a while. I don't know much about Shining in the Darkness, but from what I heard it is a more traditional dungeon romp style role-playing game as opposed to Shining Force which is heavily dependent on tactical combat but I won't know for a few weeks yet. Still it is nice to know that decent RPGs are finally making their way to the virtual console. I personally hope that the Dragon Quest (also known as Dragon Warrior) series makes it's way to the virtual console as I played through the first one when I was house sitting for my aunt years ago and loved it.

Saturday, August 11, 2007

SCO Loses to Novell

I have been following the SCO vs IBM lawsuit at so I was pleased to find out that the Novell vs. SCO case has had a summary judgment in favor of Novell. For those of you who are not following these cases, here is a simplified summary: SCO is suing IBM because they said that IBM violated their UNIX license when it contributed code to the Linux project. Novell is suing SCO because they claim it is them and not SCO who hold the UNIX copyrights and that SCO is just a middleman acting against IBM without their authority. This means that IBM has pretty much already won it's court case.

What does this have to do with games? Not much, but it does have a lot to do with open source as Linux is one of the biggest open source success stories. While most games are not open source (though I do release a lot of my games as open source), there are a lot of open source libraries (such as the PaperVision 3D library that I am experimenting with for use in my upcoming Coffee Quest Revenge, Before 4, 5 and 6 games) that games use.

Thursday, August 9, 2007

Some possible ideas I am thinking about

As I said in the Blazing Games update, interesting things are underway. One of the things that I am doing won't be disclosed for a couple of weeks and may annoy a few people depending on how the experiment turns out. Other things, if I can finish them, might be a bit of a surprise. One thing I am thinking about is doing a podcast that would take a look at how games actually work. I've seen a lot of podcasts about games, but none about how they work. An alternative to the podcast, or perhaps a supplement, would be a series of games that had a mode that revealed how it worked.

Wednesday, August 8, 2007

FLOSS - New BSD License

There are many times when people don't care if other people make money off their work or not. All they really care about is that they are given credit for their work. This is especially true of students who quite often want their work spread as far as it can so that potential future employers can see their work. This is especially true in the software field. Copyrights prevent the easy spread of ones work, while releasing something to the public domain means that while other people can see your work, they are under no obligation to tell people about the fact that the work is freely available or that you were the person to create the work. They can (and often do) take full credit for the work for themselves.

This is where it would be nice to have a middle ground between copyright and public domain. Guess what? You can already do this. Copyrights allows you to dictate what rights you give a person. You do this by creating a license for your work. The interesting thing is that unless a person has a license to use a copyrighted work, they are not allowed to distribute that work. The creators of copyrighted materials give permission to people by licensing their work to them. Open source licenses work the same as other licenses, but are granted to anybody who wants to agree to the terms of the license. In fact, because copyrights forbid anybody from using the work without the owner's permission, unless the distributor of the copyrighted material agrees to the license being offered to them by the copyright holder, they can not distribute the material.

One of the simplest of the various open source licenses is the BSD license. BSD stands for Berkeley Software Distribution and was named after the Unix variation that the Berkeley University released. The simplicity of the license helped to make it a fairly popular license among open source developers due to the fact that it is a very short license that gets right to the point.

Copyright (c) ,
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


Even non-lawyers should have no trouble understanding what that means. The license lets anybody distribute or change the software as long as the source code or documentation contains the license, which means that credit will be retained if the source code is distributed with the software.

Tuesday, August 7, 2007

Paper Mario - Review Overview

I am going to start a very in depth review of Paper Mario, which I just completed over the long weekend. This will be a bit different from other reviews you might read because I am going to go into depth about play mechanics of the game using my programmer's hat to explain how I would have coded the game if I was working on it and my designer aspect to point out game design aspects that I thought were well done and things that I would have done different.

Why am I doing this? To be perfectly honest, this is something that I do every time that I play a game. The difference is that I never write down my thoughts. While there may not be anybody interested in what I think about games that I am currently playing, writing things down allows me to focus my thoughts and will hopefully improve my own games.

For those of you who just read reviews to determine if you should get the game, read the summary I wrote when I first purchased the game to see if the game is something you want to play. Then note that I am giving this game a letter grade of A. For 1000 points (US$10) you really do get your money's worth out of the game. It took me about 40 hours to finish. While it is probably possible to finish the game faster, I would say that even if you rushed through the game, it would still take over 20 hours to finish.

My next few installments will cover the basic components that make up the game. After that I will quickly run through the game pointing out some story specific elements and finish off with a rant about why I hate bosses. I should remind anybody who is reading this that my FLOSS entries and drafts of making One of those Weeks will continue.

Sunday, August 5, 2007

FLOSS - Public Domain Problems

Even though it is a long weekend in B.C., I haven't posted an entry in my FLOSS series for a while so figured that I would take the time to do so now.

Once you have made changes to a public domain item, those changes are copyrighted by you. This means that you can take existing public domain material and by just making a few minor changes to it create a copyrighted work. Disney is very good at doing this, with a huge number of their films being based on public domain material. While there is nothing to stop someone else from creating a Snow White from the original public domain sources, people automatically associate the work with Disney. Likewise, Disney lawyers don't like competition so if you do try to create your own version of Snow White, be careful not to take Disney created elements and use them in your version, even if they are logical extensions of the original work.

So, from a software standpoint, releasing your source code directly to the public domain is doable, but anybody who wants to can then take your source code, make a minor change, then start selling a product using your source code without compensating you. If the entity that is copyrighting your work is promoting their modified version you can end up with a situation where people are paying for work that you wanted them to have for free. In fact, if they promote their work enough, your original work may become an obscurity. They don't even have to mention the original work or who created it, so they may also be taking credit for your hard work.

Friday, August 3, 2007

Revenge 3D plans

Last week's vote on Blazing Games was about posting my PaperVision 3D tests to the coming soon area of Blazing Games. The coming soon area is a page where I post the current build of the site selected project. Currently this page has a pre-alpha build of Coffee Quest Revenge on it, but with 100% of the few people who voted wanting to see my Paper vision tests you can expect to see spinning cubes soon.

Some regular visitors to Blazing Games may remember what I did with Coffee Quest GL. This was my attempt at using JOGL and required that I spent time re-learning Open GL. In fact, had there not been a lot of people who for some reason or another had problems running Coffee Quest GL, I would have stuck with Java for my Coffee Quest development instead of switching to Flash.

What I am going to do is follow the same basic steps used for Coffee Quest GL. I am going to start with a spinning cube. Figure out how to texture the cube. Turn the single cube into the basic structure of the level. Add doors to the mix at which point the 3D code can be incorporated into Coffee Quest Revenge and game development for that game can continue.

The current Blazing Games poll is about the movement speed already in the game. With the poll being out less than 24 hours, I have already received an email pointing out that 2D movement doesn't reflect what 3D movement is like. I suppose that is a valid criticism, but once the game is further along I can always revisit the issue.

Wednesday, August 1, 2007

Making One of those Weeks episode 15, part 4

Within the initialization of the game, we have to set up the different “constants” that are used to reflect the states of the rock and walnut. We are using ActionScript 2 still, so constants are not true constants but are simply variables who's value never is changed once set.

// Rock states
O15ROCK_NUT = 2;
// walnut states
O15NUT_NONE = 0;
O15NUT_HUSK = 1;
O15NUT_ROCK = 2;
O15NUT_NUT = 3;

The rock may appear to be a complex beast, at least if you quickly look at the large chunk of code below used to control it, but really is quite simple once you think about what the four possible states of the rock are and what happens in each of those states.

function rockAction()
invState = inv_movie.getInventoryMode();

if (invState == O15INV_STATENORMAL) {
if (ootw15_rockState == O15ROCK_NUT) {
ootw15_rockState = O15ROCK_SHELL;
ootw15_walnutState = O15NUT_NUT;
showMessage("I got the nuts, and I'm not even playing poker!");
} else
showMessage("It is a very big rock. Too big for me to pick up.");
} else if (invState == O15INV_STATESTICK)
showMessage("Hitting the rock with a stick isn't going to help!");
else if (invState == O15INV_STATEROCK) {
if (ootw15_rockState == O15ROCK_HUSK) {
ootw15_rockState = O15ROCK_NUT;
ootw15_walnutState = O15NUT_ROCK;
showMessage("That worked, but now the walnut has to be cured by leaving them in a cool dry area for a few weeks. Thankfully this one is meant as a gift so I won’t have to do that.");
} else if (ootw15_rockState == O15ROCK_NUT) {
showMessage("The walnut has to be cured before it should be opened. Besides, it is suppose to be a gift.");
} else
showMessage("Wow. Banging two rocks together makes a sound!");
} else if (invState == O15INV_STATEHUSK) {
// the only time there is a husk in inventory is before this point
// so we don't really need to do any checks on rock state.
ootw15_rockState = O15ROCK_HUSK;
ootw15_walnutState = O15NUT_ROCK;
} else