I was going through my e-mail archives today looking for a particular topic, when I inadvertently stumbled upon the actual birth of Christmas Carol! It's a conversation I had with Joe Z. during December 2010, while working on my port of Pac-Man. We were commenting on the colour limitations.

It's funny how things turn out. It started out as a quick-and-dirty distraction and it ended up taking over my life for a significant period of time. Notice those fateful words at the end of the first message, "I'll continue with Pac-Man after Christmas."

Well, I've seen that movie and I know how it ends!

Anyway, below is the full conversation, at least those pertaining to the Birth Of Christmas Carol, which occurred at noon on Sunday, 19 of December, 2010. Watch the story unfold and read how the characters came to life. I've included the different versions of the ROMs as they were sent throughout the conversation.

Subject: Re: Pac-Man auto-pilot test

From: DZ-Jay

To: Joe Zbiciak

Date: Sun, 19 Dec 2010 11:55:22 -0500

On Dec 19, 2010, at 11:44, Joe Zbiciak wrote:

> You're using color 13 (light blue, which is a bluish purple). Is color 12

> (pink) too close to red?

Exactly. Color 13 was the only one that worked for Pinky. #12 looked more like bright Fuchsia than Pink, and so was too close to red--at least in jzIntv.

> As for the eyes... yes, low res is a pain, isn't it?

Tell me about it! *sigh*

dZ.

P.S. I decided to take what I have of Pac-Man right now and transform it into a quick and dirty game with a Christmas motif by changing the sprites and the maze. This is just as a "treat" for the guys on the list. I think I can pull it off in a couple of days, since it's mostly graphics changes. The logic will be just stupidly scripted antagonists moving around.

I hope to have enough time to even include Arnauld's tracker playing a little Christmas ditty. It should be cool!

I'll continue with Pac-Man after Christmas.

dZ.

Subject: Re: Pac-Man auto-pilot test

From: DZ-Jay

To: Joe Zbiciak

Date: Sun, 19 Dec 2010 18:29:12 -0500

On Dec 19, 2010, at 11:55, DZ-Jay wrote:

> P.S. I decided to take what I have of Pac-Man right now and transform

> it into a quick and dirty game with a Christmas motif by changing the

> sprites and the maze. This is just as a "treat" for the guys on the

> list. I think I can pull it off in a couple of days, since it's mostly

> graphics changes. The logic will be just stupidly scripted antagonists

> moving around.

>

> I hope to have enough time to even include Arnauld's tracker playing a

> little Christmas ditty. It should be cool!

>

> I'll continue with Pac-Man after Christmas.

Here's a first test. I just redrew the background and re-configured the maze. Right now it's just blue blocks (ice cubes?), but I plan on changing it soon. The ghosts are there for testing, they will go away soon. Pac-Man will be replaced by a little elf sprite. The antagonists will be two: one ghost and an evil snowman. The power-pellets have turned into magical snowflakes. The fruit will be a wrapped present.

The game is called "A Christmas Carol: The Ghost Of Christmas Presents". Yes, that's "presents," as in gift

Here's the premise:

An evil snowman has stolen Santa's Christmas presents and hid them away in a cave near the North Pole. The cave is haunted by the Ghost of Christmas Presents, who enjoys very much the company of wrapped packages and will not easily let them go. Santa has sent Elvin the elf to hunt down the snowman and bring back his presents.

You must avoid the Ghost and retrieve the package from the cave before the evil snowman returns and kills you. There are four magical snowflakes strewn around the cave which, when touched, will temporarily make Elvin invincible.

BTW, I played around with it for a couple minutes and found a couple minor

bugs. In the first screen shot, you can see that I managed to get PM to

stop at a "dead end" at a half-card boundary (ie. I turned at the right

spot, and I think the cornering logic did something funky, since you have

some wide-open spaces that it's not accustomed to yet). In the second, PM

is stuck. Once he hits the indicated spot, he stays stuck.

--Joe

Subject: Re: Pac-Man auto-pilot test

From: DZ-Jay

To: Joe Zbiciak

Date: Sun, 19 Dec 2010 20:13:07 -0500

Regarding the half-card boundary, that was by design, but admittedly a stupid idea. I thought it would give the sprite a bigger range of motion, but it just ended up being weird. The other bug (screenshot #2) was real: That tile had a an open exit toward the wall, so as soon as Pac-Man enters the block, he can't get out. I fixed that. I also removed the half-card movement, so the Pac-Man can only move within the center of the paths, as you would expect.

The "maze" is defined as an ASCII map with exit attributes. What you are finding are those boo-boos such as this:

........ .######.

........ #......#

...^.... #......#

........ #......#

.....>.. #......#

...v.... #......#

........ #......#

........ .######.

Where a tile has an open exit pointing to a wall. I think there aren't any more. I'm working now on a simple Auto-Pilot script to move the Ghost around the maze. That way I don't have to worry about AI (at least not for the ghost).

dZ.

Subject: Re: Pac-Man auto-pilot test

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 19 Dec 2010 20:36:02 -0600

On Sun, Dec 19, 2010 at 8:28 PM, DZ-Jay wrote:

> Gosh, I saw that one, sorry. I think that's all of those.

Cool.

> The "maze" is defined as an ASCII map with exit attributes. What

> you are finding are those boo-boos such as this:

>

> ........ .######.

> ........ #......#

> ...^.... #......#

> ........ #......#

> .....>.. #......#

> ...v.... #......#

> ........ #......#

> ........ .######.

Ah yes, that makes sense. You can make similar sorts of "inconsistent world

data" in Space Patrol by placing rocks and craters too near each other.

Leads to some fun graphics glitches.

> Where a tile has an open exit pointing to a wall. I think there

> aren't any more. I'm working now on a simple Auto-Pilot script

> to move the Ghost around the maze. That way I don't have to worry

> about AI (at least not for the ghost).

Coolness! :-)

--Joe

Subject: Re: Pac-Man auto-pilot test

From: DZ-Jay

To: Joe Zbiciak

Date: Sun, 19 Dec 2010 21:54:43 -0500

OK, got the script ready! The Ghost goes on a pre-determined pattern, and your goal is to avoid him. Right now, collisions are not being checked, so it's just visual. Collisions are detected easily with the Pac-Man engine: it's a matter of comparing the virtual tile coordinates of the sprites after every move.

Attached is the latest build with the Ghost script. In case you are curious, I have attached the script file. I also include the maze source file, in case you feel adventurous and want to play with the configuration (or search for more inconsistencies).

I can honestly say that this silly, simple game is about 80% complete!

Oops! There's a rather big bug: When you eat an energi^H^H^H^H^H^Hmagical snowflake, the ghost disappears after flashing white. I went cleaning up the code that loops through four ghosts at a time and I may have messed up something there. I'll deal with it tomorrow.

Talk to you later!

dZ.

Subject: Re: Pac-Man auto-pilot test

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 19 Dec 2010 21:02:34 -0600

I was just about to report that. Guess you found it on your side. :-)

Yeah, the AI state machine stuff can be easy to mess up in unique ways. I

remember having some weird crashes in SP when trying to get ships to exit,

for example.

Subject: Re: Pac-Man auto-pilot test

From: DZ-Jay

To: Joe Zbiciak

Date: Mon, 20 Dec 2010 06:42:53 -0500

OK. I fixed the frightened color issue. Although in this mini game, the frightened mode should just make the elf twinkle (for invincibility) instead of changing the ghost.

I also altered the script to introduce pauses every so often, where the Ghost looks around. Sometimes he does a "double-take" before moving

It's all definitely non-random, but my focus is to use my already existing assets, and I don't have any AI or random elements pre-fab. I'll spend some more time in the maze (my wife wants me to add Christmas trees), and then I'll start working on collisions.

Oh, and a slight change of title. The game is now "Christmas Carol vs. The Ghost of Christmas Presents." Carol is the elf, you see. (Please don't kill me

If December 19 was her day of birth, then December 20 was Carol'schristening. On this day, all pretenses of Pac-Man were left behind and the discussion centered around what was becoming a new game in its own right: Christmas Carol vs. The Ghost Of Christmas Presents. We see the recognizable sprites for the first time at very close to their final form. Also notice that the original maze design is rather close to what eventually shipped as "Haunted Hollow" on the finalized game, candy and all.

Subject: Xmas Carol vs. The Ghost of Christmas Presents

From: DZ-Jay

To: Joe Zbiciak

Date: Mon, 20 Dec 2010 22:40:02 -0500

Hello:

I thought you'd like to see the latest version. Not much in the gameplay dept., but at least we have somewhat recognizable sprites: Christmas Carol is a green "elf," and the Ghost is, well, a ghost--different from a Pac-Man one (at least slightly so). Carol is a single sprite right now, but it'll eventually be two, to give it more color.

I modified the Ghost script a bit, and updated the speeds of the sprites to a more "gamey" feel. Tomorrow I'll work on actual game play. I still need to add the presents, which are the object of the game.

"candy" doesn't seem to be optional. If you want to clear the level you

must eat it all.

If I recall correctly, you have 3 potential dots per square that you can

set, leading to 8 possible cards. What if you instead just had 7 different

graphics of a larger candy munched to varying degrees from the sides? I'm

not sure how well you could cram that into an 8x8 tile, though. Just

throwing a brainstorm idea out there.

At any rate, it's looking pretty cool and on track for Christmas!

--Joe

Subject: Re: Xmas Carol vs. The Ghost of Christmas Presents

From: DZ-Jay

To: Joe Zbiciak

Date: Wed, 22 Dec 2010 06:13:27 -0500

Thanks for your comments!

Regarding the "candy": it would be too much work at this point to change them to be bigger, not because of the graphics (that's easy), but because of the whole 4x4 virtual tile configuration. The problem is that something like this,

........ ........

........ ........

........ ........

........ ........

.......# ........

........ ........

........ ........

........ ........

not only represents that two of the dots are missing, it represents that there is a dot in the virtual tile that straddles both 8x8 cards. If I turn the three dots into one larger bon-bon, would that dot represent that the bon-bon is 2-thirds eaten on the left tile, or on the right? I'll play with it later if I have time left over (though my list of "things to improve if I have the time" is almost larger than what I actually need to do to finish!)

I'm trying to keep as much of the code "as is" as I can. So far, I've barely have had to write any Assembly code to get it to this point. I think this is another strong argument in favor of SPLINT: Although this game has nothing to do with it directly, it shows how with a basic set of tools encapsulating game logic and graphics handling, simple yet cool games can be built very quickly.

The things that will give me trouble now are the things that I never finished for Pac-Man: collision detection, death/end-level handling, multi-sprite overlays, music, sound effects, etc.

Oh, and the candy so far is not optional, like you said. They are the Pac-Man dots, so the game already is set up to count them down to the end of the level. I'm thinking of changing that, though I'm still undecided; perhaps I can incorporate that into the game "story", just for added kicks. Something like "Carol loves candy so much that she really can't bring herself to waste them!" (OMG, I suck.

Regarding the ice cube color, it does look better in Cyan, thanks! However, it does look too bright, and the white Ghost seems to be lost in it, but I think this is a matter of getting used to it. I've been staring at it as a dark-blue maze for months now! Perhaps it'll look even brighter when I add the (also white) evil snowman.

In any case, it's simple enough to change: just tweak a constant in the map-building script, re-build, and run.

Take a look at it with cyan. No other changes are in right now (I spent the latter part of the evening Christmas shopping and wrapping presents, so I went straight to bed).

Attached is the latest progress of the quick-n-dirty game. The changes are as follows:

1. The gifts are shown (single color for now; I plan on using a sprite for the ribbons to add another color).
2. The level does not end when the candy is eaten--in fact, it doesn't end at all right now. I changed the counter to track the gifts picked up, instead of the pills. Unfortunately, that counter is not yet enabled.
3. I changed the sprite speeds: the Ghost goes a bit faster, and Carol the Elf goes a bit slower.
4. "Stun" time (when you eat the "magical snowflake" is also shorter.
5. Collisions against the gifts are working, though disabled, because I haven't finished writing the code to erase the gifts. It just happens behind the scenes.
6. New title screen... more Christmassy, and displays the full game title. (I hope to have enough time to actually draw a nicer one, but for now it'll do).

It's all going well, though progress is slower than expected, because I have to balance game time with work, life, and actual Christmas time merriment.

Joe, once again I appreciate all your help and input. If you have any other suggestions, please let me know. Even if I can't fit everything by Christmas day, and this game turns out lame, I'm sure that I can eventually revisit it and make it worth while. I believe it has great potential.

> 1. The gifts are shown (single color for now; I plan on using a sprite for

> the ribbons to add another color).

> 2. The level does not end when the candy is eaten--in fact, it doesn't end

> at all right now. I changed the counter to track the gifts picked up,

> instead of the pills. Unfortunately, that counter is not yet enabled.

> 3. I changed the sprite speeds: the Ghost goes a bit faster, and Carol the

> Elf goes a bit slower.

> 4. "Stun" time (when you eat the "magical snowflake" is also shorter.

> 5. Collisions against the gifts are working, though disabled, because I

> haven't finished writing the code to erase the gifts. It just happens

> behind the scenes.

> 6. New title screen... more Christmassy, and displays the full game title.

> (I hope to have enough time to actually draw a nicer one, but for now it'll

> do).

>

It definitely all looks pretty cool. I like the gifts (can't wait to see

the bows). I do think the cyan works better than the dark blue, and I like

the much shorter stun time. It's more like shaking your head saying "wha?"

than a long drawn out thing like it was before.

> It's all going well, though progress is slower than expected, because I

> have to balance game time with work, life, and actual Christmas time

> merriment.

>

Holiday fun? No way!

BTW, I've been doing a bunch of improvements and optimizations to AS1600.

Are you willing to beta-test for me? You're on OS X, right?

>

> Joe, once again I appreciate all your help and input. If you have

> any other suggestions, please let me know. Even if I can't fit everything

> by Christmas day, and this game turns out lame, I'm sure that I can

> eventually revisit it and make it worth while. I believe it has great

> potential.

>

I agree! It's definitely pretty neat. Focusing it on Christmas gives it a

nice tightness of scope, too, which is actually a good thing in my mind.

Even if you can't get it done by Christmas day, I think if it lands at all

during the holiday season, it would be way more than welcome. :-)

Once I've got my cartridge manufacturing up to speed, I wouldn't be

surprised at all to see collectors ordering it in physical form.

--Joe

Subject: Re: Xmas Carol vs. The Ghost of Christmas Presents

From: DZ-Jay

To: Joe Zbiciak

Date: Thu, 23 Dec 2010 05:08:33 -0500

On Dec 23, 2010, at 01:10, Joe Zbiciak wrote:

> It definitely all looks pretty cool. I like the gifts (can't wait to see

> the bows). I do think the cyan works better than the dark blue, and I like

> the much shorter stun time. It's more like shaking your head saying "wha?"

> than a long drawn out thing like it was before.

Yeah, the old long delay was the original Pac-Man's "frightened" time. Little by little I've been updated the look-up tables of speeds and timers and customizing them to what works better for this game.

Don't hold your breath for the bows, they're just a cross that covers what is transparent of the gifts right now.

> BTW, I've been doing a bunch of improvements and optimizations to AS1600.

> Are you willing to beta-test for me? You're on OS X, right?

Certainly! Especially now when I've using it constantly. I am in OS X, yes.

> Even if you can't get it done by Christmas day, I think if it lands at all

> during the holiday season, it would be way more than welcome. :-)

I'm fully aiming to have it ready by Christmas, though I'm not expecting it to be like a "real" game. I mean, I haven't had time to design a proper level. Nothing is random, and it's way too easy. But it'll look cool

> Once I've got my cartridge manufacturing up to speed, I wouldn't be

> surprised at all to see collectors ordering it in physical form.

Subject: Xmas Carol progress

From: DZ-Jay

To: Joe Zbiciak

Date: Thu, 23 Dec 2010 08:07:42 -0500

Joe,

I have more progress! The Elf now picks up the gifts. I removed the countdown from the pills (now "candy") and applied it to the gifts, so that the level ends when the four gifts are eaten^H^H^H^H^Hpicked

My wife had the idea of having the Elf loose a gift when he collides with the Ghost. I think it's great, but to simplify matters, I'll make it so that all gifts are reset to their starting positions when the Ghost and Elf collide. I'll also reset the gift counter. This would add a challenge to the game, if it weren't for the fact that it is too easy to avoid the Ghost.

I'll work on the Evil Snowman tonight, and try to get some rudimentary AI (based on what I was working on Pac-Man for Blinky) so that he at least chases the Elf and add some difficulty. The idea is that a timer will start ticking when the level starts, and eventually it will trigger the Evil Snowman after a few seconds. Between the chasing Snowman and the stupid Ghost getting in the way, hopefully there'll be enough game play.

Can you tell me how the game looks so far? I'm kind of tired so I can't be really sure, but I think I may have gone overboard with the gifts. Is it me, or does the screen look too busy? If it does, I'd appreciate any suggestions you may have on making it more palatable.

Other things of note: There is a slight delay of two frames when eating candy (I decided that more than a distraction, it's a hazard, though it gives you points). There's also a slightly longer delay (three frames) for picking up a gift. Oh, and I made the maze larger by two columns. I'm planning on displaying the score on the three empty cards in the top-right corner. The gift counter (a single digit) shall go on the top-left corner.

because Carol has some work to do at the beginning. It doesn't seem any

more cluttered than, say, Thunder Castle.

It looks like the end-of-level test is broken in this build. Or is that on

purpose?

--Joe

Subject: Re: xmas carol: more gifts!

From: DZ-Jay

To: Joe Zbiciak

Date: Thu, 23 Dec 2010 23:05:44 -0500

On Dec 23, 2010, at 22:57, Joe Zbiciak wrote:

> I think it looks fine. It's maybe a *tad* cluttered, but that's just

> because Carol has some work to do at the beginning. It doesn't seem any

> more cluttered than, say, Thunder Castle.

I'll check it tomorrow with a fresh mind and perhaps I'll find out that it'll be better if I remove 1 or 2 gifts.

> It looks like the end-of-level test is broken in this build. Or is that on

> purpose?

Fark! No, it's not on purpose. I just added code to keep score, and I broke then gift-counter test. I have some optimizations there (carried down from Pac-Man) where the test is slightly removed from the actual instruction that sets the status flags, and twice already I find myself injecting code between the two, by mistake, and end up messing up the flags. I'll fix it now.

Thanks!

Subject: Re: xmas carol: more gifts!

From: DZ-Jay

To: Joe Zbiciak

Date: Thu, 23 Dec 2010 23:14:45 -0500

On Dec 23, 2010, at 23:06, Joe Zbiciak wrote:

> Here it is... jzIntv with source debugging capability.

>

> To use:

>

> 1. Assemble with the flag -j<file> where "<file>" is the name you want

> to use for the source map file.

> 2. Run jzIntv with the flag --src-map=<file>.

>

> That's it.

>

> jzIntv's debugger will load in the source map, find all the source files,

> associate them with locations and so on. Make your terminal window wide and

> enjoy!

whoa! I'll take a look at it right now!

In the meantime, I fixed the end-of-level bug. Also, I made Carol's hat bounce up and down while she's walking. (Still working on that Snowman!)

Bugs, bugs, and more bugs! It seems that the Evil Snowman brought with him a host of nasty bugs. This is what happens when working furiously for five days in a row, with little sleep. While debugging and tweaking of the main code continued, a side effort was underway to design and implement the Evil Snowman. I had a clear vision of what I wanted to make, it was just a matter of giving it shape. The menacing look of the Snowman finally arises, and the game code finally frees itself from its remaining vestiges of it's Pac-Man ancestry.

Subject: snowmen test

From: DZ-Jay

To: Joe Zbiciak

Date: Thu, 23 Dec 2010 23:58:54 -0500

I'm about to quit for the night. Would you mind doing me a favour and wading through this bunch of screenshots and let me know which one you think is the best looking "Evil Snowman"?

I rigged the Ghost to load with the Snowman sprite, so it only has one color. Most of these tests are variations of the face and head. By the way, you have to imagine a pair of twig arms flailing about as it walks around. I was partial to #2, but now I like #6 better (which happens to be a last minute fix-up I just did).

Thanks!

dZ.

1: top hat

2: carrot nose

3: beady eyes, button nose

4: beady eyes and top hat

5: topper hatter

6: screaming banshee

7: Mad-eyed moody

Subject: Re: snowmen test

From: Joe Zbiciak

To: DZ-Jay

Date: Thu, 23 Dec 2010 23:05:43 -0600

I like shot0015 the best, but mainly because I think it's the funniest / most fun. It's an over eager, over friendly Snowman.

Otherwise 12 or 14.

Subject: Re: snowmen test

From: Joe Zbiciak

To: DZ-Jay

Date: Thu, 23 Dec 2010 23:07:18 -0600

I was going by the filenames... shot0012 and shot0014 are the two with the hat (#4 and #5 in your list), and 15 is the screaming banshee (#6).

On Thu, Dec 23, 2010 at 11:05 PM, Joe Zbiciak wrote:

> I like shot0015 the best, but mainly because I think it's the funniest /

> most fun. It's an over eager, over friendly Snowman.

>

> Otherwise 12 or 14.

Subject: snowmen test

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 24 Dec 2010 05:04:49 -0500

On Dec 24, 2010, at 00:07, Joe Zbiciak wrote:

> I was going by the filenames... shot0012 and shot0014 are the two with the

> hat (#4 and #5 in your list), and 15 is the screaming banshee (#6).

Good morning!

That's my favorite too. I'll use that one.

Thanks!

dZ.

Subject: Re: Assembler request

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 24 Dec 2010 07:22:10 -0500

That's work! I can just quickly assemble with the flag and check the listing.

By the way, would you mind testing something for me? I added a counter to the Snowman attack. It is right now set to 15 seconds, but the timer is paused during "frightened" mode, offering you more time to explore the cave. Frightened time takes about 3 seconds, so if you eat all magical snowflakes, you'll add 12 seconds to the timer, delaying the Snowman attack for 27 from the start of the level.

Empirical testing (without actual Snowman or attack mode) shows that this is a comfortable time to pick up most of the gifts and eat some candy on the way. (Once the Snowman attacks, he'll most likely eat you!)

Right now, when the timer hits the CPU just HLTs, to signal the trigger. Can you tell me if it "feels" OK, or if you have a better suggestion?

Thanks!

dZ.

On Dec 24, 2010, at 07:08, Joe Zbiciak wrote:

> dZ,

>

> How about a flag that just disables all "LISTING" directives? Perhaps

It seems reasonable, although I don't know how aggressive the Snowman will be. If the Snowman is super aggressive, it might be too short. This mechanism reminds me of the pterodactyl in Joust, although the timeout there was much longer. (There was also quite a bit more going on.)

Anyhoo... it's time for me to get some sleep now. I ended up staying up all night and I'm a bit loopy now.

Subject: Re: Assembler request

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 24 Dec 2010 08:54:01 -0500

On Dec 24, 2010, at 08:47, Joe Zbiciak wrote:

> It seems reasonable, although I don't know how aggressive the Snowman will

> be. If the Snowman is super aggressive, it might be too short. This

> mechanism reminds me of the pterodactyl in Joust, although the timeout there

> was much longer. (There was also quite a bit more going on.)

The screen was much larger too. But that's exactly what I'm going for: take too long and the "invincible" Evil Snowman will come and attack!

> Anyhoo... it's time for me to get some sleep now. I ended up staying up all

> night and I'm a bit loopy now.

I opted for going to sleep for a few hours, and now I can go all day on this.

Good night!

dZ.

Subject: xmas carol issues

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 24 Dec 2010 18:18:35 -0500

Joe,

I've spent almost the entire day implementing the path finding logic for the Evil Snowman, and I can't get it to work. I'm on a mental block right now, so I decided to skip the Snowman, at least for now. I really wanted to have a release for tomorrow (as a Christmas present), so I'll just put the Snowman with an Auto-Pilot script, going really fast to get in the way of Carol, and just be a nuisance.

I didn't get time to play with the tracker, so no music or sound effects either. I also had this cool idea for a title screen, and Auto-Piloted sprites introducing themselves, but that's also out the door. Oh well.

I guess the marketing department will have to make do with a half-ass, unfinished game if they want to hit the shelves this Christmas season. LOL!

At this point, I'll just try to get the game to look as nice as possible. I'll work on the overlay sprites to add color to the gifts and Carol (and maybe some twig arms for the Evil Snowman), and I'll call it a night. It is Christmas Eve, after all.

Next week I'm off on vacation, so if I feel like it I'll play with the Christmas Carol game some more.

I thank you very much for all your assistance, and wish you a very happy Christmas!

Regards,

dZ.

Subject: xmas carol: Evil Snowman, Second Class

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 24 Dec 2010 20:57:23 -0500

Hello:

I programmed an Auto-Pilot script for the Evil Snowman; that'll have to do for now. I also animated him so that he wobbles about. He is missing the wailing arms, but I can already imagine it, in my head it looks really funny

No collisions yet, that comes next. Oh, and I also am merging the input of both controllers with XOR. Could you test it in the your Intellivision if you have the time? I'd like to know how it runs there.

That's it!!! INIT_ATTACK() initializes the script pointer to the beginning. The script works by doing something like:

Face Left, move until tile(x, y)

Face Up, move until tile(x, y)

However, if tile(x, y) is not reachable by moving in the direction it is facing, it'll just continue going.

Thanks, that's it!

dZ.

Subject: Re: xmas carol: Evil Snowman, Second Class

From: Joe Zbiciak

To: DZ-Jay

Date: Fri, 24 Dec 2010 21:24:57 -0600

There's definitely something goofy with the attack counter at any rate.

When the bug happens, I see INIT_ATTACK getting called repeatedly, so

something is turning it into a recurring task.

Subject: Re: xmas carol: Evil Snowman, Second Class

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 24 Dec 2010 22:35:12 -0500

I think you're right. I thought my PAUSE_TIMER checked to see whether the timer had expired and skipped it. I'll have to check, but I think that's why it's not really easy to reproduce: it's whatever non-zero value happens to be there; could be a few seconds or a few minutes!

dZ.

Subject: Re: xmas carol: Evil Snowman, Second Class

From: Joe Zbiciak

To: DZ-Jay

Date: Fri, 24 Dec 2010 21:36:41 -0600

Your PAUSE_TIMER is fine.

To get Snowman to misbehave, pick up a snowflake BEFORE he comes on screen.

(ideally, very near where he comes on screen)

You need to set the delay count to be odd rather than even so DOTIMER won't copy the retrigger value over.

Working all night on Christmas Eve, with the clock ticking on my self-imposed deadline, I came upon a crossroads: I could release a rough-cut game that although respectably good, fell short of my original vision; or I could continue working on it for a few more days and turn the game into the beautiful gem I envisioned. With Joe's encouragement and support, the decision was easy: Let's do it!

So after a quick and refreshing power-nap, I spent most of Christmas morning and part of the afternoon working on fixing bugs and polishing the game. The most marked progress came the next day, when the game finally got sound effects--immediately, it felt like a real game.

In this chapter, we see the introduction of proper AI for the Snowman and Ghost. Plus, the Magical Snowflakes finally fulfill their purpose: helping Carol avoid the Snowman.

Subject: xmas carol update

From: DZ-Jay

To: Joe Zbiciak

Date: Sat, 25 Dec 2010 12:52:07 -050

Joe,

Attached is the latest version of the "Christmas Carol" game. Not many enhancements, more like bug fixes and tweaks. I'll dedicate the whole day tomorrow to implementing the Snowman path finding logic, which should bring the game to about 85% complete. Once that is done, I'll work on displaying the score. I don't expect that to take too long. I'll use a simpler variation of GroovyBee's code I've worked out.

Some notable changes in this version are:

1. When you collide with the Ghost, it "steals" your presents. That is, they are reset on the screen, and the end-of-level counter reset. Gift points are also subtracted from the player score (there's gotta be a point to the Ghost, you know). (By the way, if you want to see your score, just set a "watch" in the debugger on "PLAYER_SCORE" ($030A). It uses my Pac-Man scoring logic, with double-word extended arithmetic.)

2. I fixed another one of those "yellow" flicker bugs due to the Color Stack advanced bit not set properly. This time, it was in the function that re-draws the gifts. I saw first hand this morning and knew exactly what it was from your comment yesterday.

3. Fixed a bug in the ORIENT_SNOWMAN() procedure which prevented the Snowman sprite from changing orientation when moving in different directions. You'll now see it face down, left, right, and up (with its back towards you), depending on the direction it is facing. The changes are subtle (for instance, the difference between "horizontal" orientation and "down" is only the eyes a pixel lower), but in my opinion they are effective.

4. Updated the Snowman animation to be smoother, and rounded up the head a bit more.

5. Reduced the Snowman Attack delay to 10 seconds, as you suggested. I think it is too soon. Let's see how aggressive the path-finding logic makes him, and we'll tweak it then.

6. When the level starts, during the "Get Ready!" pause, the assets are introduced in the following order: First the maze is shown with candy and static snowflakes; then the sprites and gifts are displayed; and finally the level starts and the snowflakes start twinkling.

BTW, I've gotten pretty good at getting all the presents without hitting the

ghost and without the Snowman coming it, and without using any of the

snowflakes... I think this might argue for a shorter Snowman time.

Subject: Re: Game tuning

From: Joe Zbiciak

To: DZ-Jay

Date: Sat, 25 Dec 2010 01:52:22 -0600

I take that back... I do end up eating one of the snowflakes near the end.

Maybe the snowflakes shouldn't delay the Snowman?

On Sat, Dec 25, 2010 at 1:52 AM, Joe Zbiciak wrote:

> BTW, I've gotten pretty good at getting all the presents without hitting

> the ghost and without the Snowman coming it, and without using any of the

> snowflakes... I think this might argue for a shorter Snowman time.

>

Subject: Re: Game tuning

From: DZ-Jay

To: Joe Zbiciak

Date: Sat, 25 Dec 2010 02:03:30 -0600

An animated GIF version of my exploits is attached...

And revising something I said earlier... Maybe the Snowman delay should be much shorter, but delayed by snowflakes. That way, if you try an end-run like I did in the attached, the Snowman will come out quickly and quash you. If you take your time a little and eat a few of the snowflakes, the Snowman won't come out so soon. You get rewarded for exploring a bit.

Thoughts?

--Joe

Subject: Re: Game tuning

From: DZ-Jay

To: Joe Zbiciak

Date: Sat, 25 Dec 2010 06:50:08 -0500

Cute! I agree. That's actually what I was thinking when I read your previous message: shorter attack delay, but keep snowflakes delay.

Regarding goals, I'll follow your advice: I'll work on finishing up the path finding algorithm of the Snowman (the scripted pattern of the Ghost is not bad, but the scripted Snowman on top of it seems rather, hum, vapid).

After that, I'll display the score. I'm keeping the points low and aiming to use 3 digits only.

Then, it's tracker time! I found the music scores for various Christmasy songs; in particular, I always intended to use "Winter Wonderland" for at least the title screen.

Sound effects... well, once upon a time, I was good at sound design and synthesis; and I was pretty good at being able to mimic various traditional video game sound effects (that was the natural progression of my "Axel F" tracker ; but that was in the age of knobs and sliders. I know my way around filters, LFOs, ring modulators, etc., but I wouldn't know how to apply this to the PSG. Not to mention that my skills must have rusted shut through the years.

Fun fact: Playing with my sound effect generator back in the TurboPascal days, I was able to reproduce most of Pac-Man's sound effects. The most notable of them, the "waka-waka" of Pac-Man, I stumble upon quite serendipitously. Turns out it's a simple frequency sweep from low to high, then back down, really fast (that makes one "waka" cycle). The secret, as I recall, was in the delta chosen for the frequency steps and a very slight delay between the steps: a higher delta with longer delay, gives a more "jaggedy" sweep, which sounds closer to a "crunch." (By the way, the sound effect when eating a ghost, is almost the same one but with a higher step, and going from low to high only, thus more like "crunchy.")

Well, enough ramblings for now. I guess all this was to say that I could use your help in making sound effects for Xmas-Carol.

Thanks, and Merry Christmas!

dZ.

Subject: Re: Game tuning

From: Joe Zbiciak

To: DZ-Jay

Date: Sat, 25 Dec 2010 13:32:04 -0600

On Sat, Dec 25, 2010 at 5:50 AM, DZ-Jay wrote:

> Well, enough ramblings for now. I guess all this was to say that I could

> use your help in making sound effects for Xmas-Carol.

>

I'd be happy to help. What effects would you like? I imagine there won't be any explosions.

As for the tracker, we should probably set it to only use 1 channel. Then we could have two different sound effects active on the other two channels. That would limit your tune capability to tunes that don't rely on chords, but is that so bad?

Let's do this! :-)

--Joe

Subject: Re: Game tuning

From: DZ-Jay

To: Joe Zbiciak

Date: Sat, 25 Dec 2010 14:57:32 -0500

On Dec 25, 2010, at 14:32, Joe Zbiciak wrote:

> I'd be happy to help. What effects would you like? I imagine there won't

> be any explosions.

Well, I haven't given it much thought, really. This is my wish list of sound effects:

1. Carol walk

2. Carol picks up present

3. Carol eats candy

4. Carol picks up a magical snowflake

5. Ghost steals presents from Carol

6. Snowman attack starts

7. Snowman "kills" Carol

8. Level end

Of those, the really important ones I would say are:

2. Carol picks up a present

4. Carol picks up a magical snowflake

5. Ghost steals presents from carol

8. Level end.

And here's a first draft of my impressions of these sounds:

1. Personally, I have the Donkey Kong mario squeak in my head when Carol walks, so perhaps a squeaky sound for that.

2. A two or three note "ding".

3. A "crunch" of some sort.

4. A whitenoise "poof" sound.

5. Some sort of "pop" sound.

6. A "scream" sounding sweep. For some reason, when I think of the Evil Snowman I picture Calvin's graphic Snowmen sculptures (from Calvin and Hobbes), that's why in my head he runs around with flailing arms, screaming like a banshee.

7. ???

8. ???

> As for the tracker, we should probably set it to only use 1 channel. Then

> we could have two different sound effects active on the other two channels.

> That would limit your tune capability to tunes that don't rely on chords,

> but is that so bad?

That's fine. If we need chords, we can always go the C=64 SID way: rapid-fire arpeggios, which sound cute as hell. I don't think that'll be necessary, though. I think a single track of Jingle Bells, Winter Wonderland, or anything like that will suffice, and let's face it, most Christmas music has been reduced by now to mere single-tone jingles.

Idea: We can increase the tempo when the Snowman attacks!

> Let's do this! :-)

Yes, lets!

dZ.

Subject: Re: Game tuning

From: Joe Zbiciak

To: DZ-Jay

Date: Sat, 25 Dec 2010 14:01:57 -0600

For #8: How about an end-of-level jingle instead, perhaps using the 3-tone mode of the tracker to play chords? That's what Space Patrol does and it's rather effective, IMHO.

I'm working on isolating my sound effect engine from Space Patrol in a separate ROM. I'll use that to work on sound effects for you. Hopefully integration with your engine will be pretty smooth once I get the effects worked out.

I'll send you a demo ROM + source as soon as it's running, which should be pretty soon. Then I'll set about chopping out the Space Patrol effects and putting in Christmas Carol effects.

--Joe

Subject: Re: Game tuning

From: DZ-Jay

To: Joe Zbiciak

Date: Sat, 25 Dec 2010 15:16:30 -0500

On Dec 25, 2010, at 15:01, Joe Zbiciak wrote:

> For #8: How about an end-of-level jingle instead, perhaps using the 3-tone

> mode of the tracker to play chords? That's what Space Patrol does and it's

> rather effective, IMHO.

That's perfect.

> I'm working on isolating my sound effect engine from Space Patrol in a

> separate ROM. I'll use that to work on sound effects for you. Hopefully

> integration with your engine will be pretty smooth once I get the effects

> worked out.

My engine is just a dispatcher from the ISR (using the TIMER and TASKQ queue). About the only thing that runs in "real-time" is the controller-input, which is hard-wired to the "idle" task of the queue. The only thing that this game does that requires ISR is cycle the GRAM of the sprites. I include the ISR handler at the bottom of this message for your reference (hint: only the "@@__level" state has been implemented so far). The listing file I sent you yesterday should contain the definition of the macros. If not, let me know.

> I'll send you a demo ROM + source as soon as it's running, which should be

> pretty soon. Then I'll set about chopping out the Space Patrol effects and

> putting in Christmas Carol effects.

Thanks, but please be aware that I won't be able to play with it today. I have company coming over and I have to get the goose in the oven soon. I'll be working on the game full time starting tomorrow, though.

dZ.

Subject: Re: Game tuning

From: Joe Zbiciak

To: DZ-Jay

Date: Sat, 25 Dec 2010 21:14:41 -0600

Ok, so I did up some draft sound effects for you. I wasn't able to make a good "crunch" sound with the white noise generator, so I went with a tlink sound instead. Keypad 1 through 7 should match up with your original list:

1. Carol walk

2. Carol picks up present

3. Carol eats candy

4. Carol picks up a magical snowflake

5. Ghost steals presents from Carol

6. Snowman attack starts

7. Snowman "kills" Carol

For #7, I went with an attempt at a Psycho-like "Eee! Eee! Eee! Eee!". Most of these sound effects should work out OK with tunes in the key of C major or A minor, I think. I pulled out my ECS keyboard and actually tried various note combinations in order to get a good feel for what tones to use.

These are awesome!!! (#8 reminds me of the old Autobahn song by Kraftwerk, with synthesized car sounds.

Here are some suggestions:

- #2 is great but a bit too close to Donkey Kong barrel jump.

- I personally think that neither #8 nor #5 work for the stolen presents. Perhaps something with a sharper attack, and decaying "Bong!" sound?

- #6 (nice one!) I think should decay the ramp-down much faster, Idunno.

- I think #7 should be at a lower octave (it reminds me too much of Frogger).

For a first draft, these are very nice.

Thanks Joe,

dZ.

Subject: Sound effects

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 26 Dec 2010 11:06:21 -0600

dZ,

Starting a new thread since the other was getting pretty long. :-)

For the "presents" notes, how about a sped up version of the first four notes of "Silent Night" (C, D, C, A)? That would keep with the Christmas theme, too.

--Joe

Subject: Re: Sound effects

From: DZ-Jay

To: Joe Zbiciak

Date: Sun, 26 Dec 2010 12:12:25 -0500

Is that for picking up the presents? I think that will be good. (I just played the four notes on my keyboard really quick and it sounds cool.)

dZ.

Subject: Re: Sound effects

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 26 Dec 2010 11:55:09 -0600

Yep.

I've implemented that and made a few other tweaks based on your suggestions: Tightened up the pacing of the Snowman effect, and moved the dying effect to a lower octave. Also, just as a code cleanliness thing, I switched to using defined constants for all the notes. Makes the code much more readable, and it highlighted a couple places where I wasn't using the note I thought I was. So, a couple effects sound *slightly* different now.

Still gotta come up with an effect for when the ghost swipes the presents.

> Is that for picking up the presents? I think that will be good. (I just

> played the four notes on my keyboard really quick and it sounds cool.)

>

> dZ.

>

Subject: xmas carol: eureka!

From: DZ-Jay

To: Joe Zbiciak

Date: Sun, 26 Dec 2010 18:40:55 -0500

Joe,

I've finally cracked the path-finding nut! Turns out my algorithm was faulty, and I wasted almost half the day stepping through code trying to find why it wasn't doing what I wanted it to.

It took all of 2 minutes to start writing the algorithm in pseudo-code when all of a sudden I saw the flaw, et voilá, I have one nasty snowman chasing me.

I'll send you an update real soon.

dZ.

Subject: xmas carol: eureka!

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 26 Dec 2010 17:44:34 -0600

dZ,

Cool!

I just sat back down to hammer out the stealing-presents sound effect. I'll send you an update when it starts sounding good.

--Joe

Subject: Sound Effects draft 3

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 26 Dec 2010 20:42:57 -0600

dZ,

I've cleaned up the sound engine a bit, removing some cruft that (I think) is no longer needed. I still don't know about the stealing-presents sound effect. I've got something there, but so far I'm not positive I like it.

If you look in "sfx_demo.asm", you'll see it's pretty easy to use the engine.

Also, the Snowman scream uses two 16-bit words for its pitch interpolation.

> I've cleaned up the sound engine a bit, removing some cruft that (I think)

> is no longer needed. I still don't know about the stealing-presents sound

> effect. I've got something there, but so far I'm not positive I like it.

Can you try reversing the sweep for the stealing-presents sound? I think that "good" sounds should have happy tones and upward scales, while "bad" sounds should have lower, darker tones and downward scales. The Ghost stealing your hard-earned presents is definitely a "bad" sound.

Regarding the scream, my wife and I concur that the first half is excellent, while the last sustained tone kind of leaves it dry. Can you sweep it down all the way at the end? That's what I meant by "faster decay" in my previous suggestion, pitch decay as opposed to volume.

Other than that, they're great! (we love the "Silent Night" melody!)

dZ.

Subject: Re: Sound Effects draft 3

From: Joe Zbiciak

To: DZ-Jay

Date: Sun, 26 Dec 2010 21:36:43 -0600

dZ,

Ok, so I made the scream start and end on the same note, and I reversed the ramp for the stealing-presents sound effect. Looks like we're converging pretty quickly on a sound effect set. :-) Hopefully it won't be difficult for you to integrate it into your game. I've tried to keep it fairly self-contained and reasonably clean.

OK, I implemented the "Flip" logic. Actually, that was logic implemented in Pac-man for the Ghosts that I took out for this game. This is some ugly code! I spent some of the day cleaning up the ugly code and removing the Pac-Man references. This game has now graduated to an "official game," rather than the hack variation of Pac-Man that it started out being.

But it's getting late and I've been pretty much messing up the code again. I won't be playing with your sound effects engine tonight (it's getting late already and I'm running on about 12 hours of sleep for the past three days in total).

You know, even with the flip and confusion of the Snowman, it's still pretty challenging. Any further suggestions?

I decided to try to incorporate the sound effects engine. Works like a charm! I'm only playing "Carol_Walking" right now, but I realized an issue: She walks faster than the sound effect! How can I test whether the sound is already playing to skip the call?

dZ.

Subject: Sound Effects testing...

From: DZ-Jay

To: Joe Zbiciak

Date: Mon, 27 Dec 2010 01:35:03 -0500

Here you go, stand in awe and marvel at the fruit of your hard work!

I put all the sounds in, except the death of Carol, for I haven't made the collision detection and death ritual yet. (I never got a round to implementing death in Pac-Man, though there is a state transition/dispatcher handler for it.)

If you still had any doubts, the "Steal_Presents" sound works rather well

I added a 1-second "Early Warning" after the Snowman scream until the attack begins. We can tweak that if necessary. There may be some bugs also, especially in timing. I haven't been writing very efficient code tonight. I'll try to clean up the code tomorrow.

I'll play with it again tomorrow morning and see if we need to tweak the volumes or something. The "Enter_Snowman" sound feels like it's missing something, the ramp up scream is very good, but then... It feels rather, I don't know, ersatz, if you know what I mean.

I have to say that, with the sounds, it *feels* more like a real game. There's some serious gameplay here, too. I was thinking that now that I have a path-finding mechanism, rather than have the Ghost on Auto-Pilot, we could have him iterate through the list of presents, targeting each one in turn. That way, he'll be just walk around "tending" his presents (it is his cave, after all .

I'll play with that tomorrow. Tonight, I sleep!

Oh, by the way, in case I haven't mentioned it lately, the sounds are fantastic! I very much appreciate your work and all your assistance.

I agree that there needs to be something more to go with the Snowman while he's carousing. How about a Snowman Walk sound effect? I'm thinking a tympani-like sound alternating between A and F, just like his scream, just several octaves lower. Or maybe A and E---that sounds a little better when I tried it on the keyboard. I could just have the Enter_Snowman sound effect fall into this once the initial scream wears off. You'll just need to be sure to call "SFX_INIT" when Carol dies or the level ends. (You need to anyway in the second case in order to play the end-of-level jingle.)

And yes, all of my concerns about "Steal_Presents" are erased.

I'll whip up that tympani and see what you think.

--Joe

Subject: Re: Sound Effects testing...

From: Joe Zbiciak

To: DZ-Jay

Date: Mon, 27 Dec 2010 01:35:34 -0600

I think this just might work... what do you think?

Note that the "Snowman_Walk" is actually a different sound effect number from the "Enter_Snowman"--it just does the sound effect number switcharoo under the hood. The downside is that you can now get multiple copies of the Snowman_Walk running in the demo. Amusing and harmless, I suppose. You can press 'clear' to call SFX_INIT and reset them. Currently, that's the only way to reset that sound effect.

I am sorry for the delay, but I just needed some sleep. I like it a lot! I discovered something cool rather unexpectedly: if I call the effect again slightly out of phase, it gives a sense of urgency by "doubling up" the timpani!

I have to see how I can reliably phase them.

dZ.

Subject: Re: Sound Effects testing...

From: Joe Zbiciak

To: DZ-Jay

Date: Mon, 27 Dec 2010 11:43:37 -0600

dZ,

I know how it goes with the sleep. You get making some exciting progress on something and even though you're dog tired, you stay up waaaay too late and keep going. :-) I was surprised that you stayed up to integrate sound effects at all after the holiday crunch. No worries!

As for doubling up the tympani: One downside of doubling them up is that you quickly run out of sound channels. If you double them up on an unexpanded Inty, you're out of sound effects channels (since I only use 2 of the 3, reserving the 3rd for music).

--Joe

Subject: Sound Effects testing...

From: DZ-Jay

To: Joe Zbiciak

Date: Mon, 27 Dec 2010 12:46:36 -0500

On Dec 27, 2010, at 12:43, Joe Zbiciak wrote:

> As for doubling up the tympani: One downside of doubling them up is that

> you quickly run out of sound channels. If you double them up on an

> unexpanded Inty, you're out of sound effects channels (since I only use 2 of

> the 3, reserving the 3rd for music).

Well then, let's not do it. The single timpani sound is perfectly fine.

After almost two whole weeks of intense coding with very little sleep, the game is finally taking shape. More importantly, the sound effects and AI provide a depth to the game that was conspicuously lacking before.

With every new revision, the game gains more life. Christmas Carol now feels like a real game, and the play mechanics are distinctly its own. See how it all comes together at the end as we conclude our story in this final exciting chapter of The Birth Of Christmas Carol.

Subject: Xmas Carol (almost full game)

From: DZ-Jay

To: Joe Zbiciak

Date: Mon, 27 Dec 2010 16:07:32 -0500

Joe,

Here it is! Some very cool things are in there, along with some major bugs fixed. It seems pretty stable, though it surely requires more testing. Below is a list of the notable changes:

1. Snowman collision

2. Carol Death

3. Game Over screen

4. Snowman targets ghost properly

5. Sorry, still "Manhattan Distance" will fix that shortly.

There's other stuff, but I can't remember now what else.

I have a few suggestions for the sound effects, if you don't mind:

1. Carol_Walk: could you make the sound shorter? Repeating it while she's walking gives the impression of a slower walk than what you actually see. Just tighten the decay of the second "plink".

2. Got_Present: Seems that the last note is not being decayed, for it ends abruptly (you can also here the *click* of the PSG turning off the channel). I don't know how flexible your SFX engine is, but is it possible to have it release sharply instead of cut off?

3. Enter_Snowman: Could we decouple the scream from the timpani? Both are very cool, but I could use them at other times if they were separate.

4. Carol_Dies: Is it possible to reverse the sweep ramp on the last tone? so that it sounds more like a "bweep! bweep! bweep! bewoop!"?

5. Whoosh: (I added this to Carol_Dies on the Snowman/Elf collision). Can you lower its pitch a tad, just slightly, sot that it doesn't sound so close to the Got_Snowflake sound?

If none of these changes make it, the sounds are still very cool as is.

I'm going to take a break right now and come back in an hour or so to work on the player score.

> major bugs fixed. It seems pretty stable, though it surely requires more

> testing. Below is a list of the notable changes:

>

> 1. Snowman collision

> 2. Carol Death

> 3. Game Over screen

> 4. Snowman targets ghost properly

> 5. Sorry, still "Manhattan Distance" will fix that shortly.

>

> There's other stuff, but I can't remember now what else.

>

> I have a few suggestions for the sound effects, if you don't mind:

>

> 1. Carol_Walk: could you make the sound shorter? Repeating it while she's

> walking gives the impression of a slower walk than what you actually see.

> Just tighten the decay of the second "plink".

>

Easiest is to just change the pitch-bend rate and keep the same cutoff frequencies. I'm currently stepping by 8 each iteration. I upped it to 10 for both, which should be 20% shorter. (Due to how it's currently set up, I can't do odd counts, but I can change that if necessary.)

> 2. Got_Present: Seems that the last note is not being decayed, for it ends

> abruptly (you can also here the *click* of the PSG turning off the channel).

> I don't know how flexible your SFX engine is, but is it possible to have it

> release sharply instead of cut off?

>

My engine is as flexible as assembly code, since it really isn't a sound interpreter of any stripe. All the actual sound programming is still fairly manual. The sfxeng.asm stuff just manages dispatch and resource allocation, really.

> 3. Enter_Snowman: Could we decouple the scream from the timpani? Both are

> very cool, but I could use them at other times if they were separate.

>

Sure. I'll just have the scream end as it did previously. You can already trigger the Snowman_Walk effect directly in the version you have today.

> 4. Carol_Dies: Is it possible to reverse the sweep ramp on the last tone?

> so that it sounds more like a "bweep! bweep! bweep! bewoop!"?

>

Should be possible.

> 5. Whoosh: (I added this to Carol_Dies on the Snowman/Elf collision). Can

> you lower its pitch a tad, just slightly, so that it doesn't sound so close

BTW, did you want me to revert the change on the Carol_Dies effect? Thanks to the power of Subversion, I have the older version handy.

Subject: Xmas Carol (almost full game)

From: DZ-Jay

To: Joe Zbiciak

Date: Mon, 27 Dec 2010 17:48:34 -0500

nah, it's cool. I'll keep it. I also have all your drafts in SVN, so I can always put it back.

I'll be working on the score tonight, and depending how that goes, I expect to play with the tracker afterwards.

Then it's sprite overlays and level variable tweaking, and we have an honest to goodness game! And it's an original concept!

Right now Pac-Man doesn't feel like such a notable project to me anymore. I will finish it, though, and it'll be the best and most faithful port; but it won't ever be an original.

Thanks for all the help.

dZ.

On Dec 27, 2010, at 17:35, Joe Zbiciak wrote:

> BTW, did you want me to revert the change on the Carol_Dies effect? Thanks

> to the power of Subversion, I have the older version handy.

>

Subject: Xmas Carol (almost full game)

From: Joe Zbiciak

To: DZ-Jay

Date: Mon, 27 Dec 2010 16:53:03 -0600

dZ,

Always glad to help. :-)

BTW, I went ahead and coded up an SFX_STOP in case you change your mind about it. And I put the older Carol_Dies back in the sfx.asm, under an IF 0/ELSE/ENDI so you can switch back and forth as you please.

Please test it at your earliest convenience, and let me know if there are any problems with it.

One more thing: I changed the "Manhattan Distance" path finding logic to use MAX(dx, dy) instead as you suggested. The results are mixed: On the one hand, the Snowman seems more aggressive, especially when on a straight line. On the other, he also looses his way more often. I'm torn between them. I include both for your judgement.

Perhaps there's a bias I could add. I'll think about it some more tomorrow morning.

In any case, I'm done for the night. I'll talk to you tomorrow, when I hopefully will have music in.

My first impression of max(x,y) is "Comically bad!" But, then, I still see the occasional "huh?" with the Manhattan code.

I think there might be something else going on here.

--Joe

Subject: Re: xmas carol: SCORE!

From: Joe Zbiciak

To: DZ-Jay

Date: Tue, 28 Dec 2010 01:42:15 -0600

dZ,

I think you need to add some sort of progressive difficulty to the game. Otherwise, you could end up like I did in the attached, trivially overflowing the score count. For example, you could bring the snow man in earlier and earlier. Or, after a few levels, make the ghost start targetting Carol, but perhaps only after Carol has gotten N gifts, where N decreases with each subsequent level.

I shouldn't have been able to rack up 1000+ points that easily. :-) In theory, since you can get 100 - 150 points per level and you have a 3 digit score, you don't want anyone to get past level 6 or so. I guess the other thing you could do is give a "congrats" if you get beyond a certain level, and then end the game.

--Joe

Subject: Re: xmas carol: SCORE!

From: DZ-Jay

To: Joe Zbiciak

Date: Tue, 28 Dec 2010 08:12:44 -0500

I agree, and that is trivially easy! I am still using Pac-Man's level data tables, so most of the game variables are per-level, including the speed of the sprites and the "stun" time. I did not put the Snowman Attack timer there, but it should be simple to do. I figured that once we had a game we could tweak those values to make them work better.

We have a game, so we shall tweak.

First thing, I do not agree that such a simple game (and with 3 digits of score, fercryinoutloud!) should have a potential score of 120+ points per level. May as well make the stack 3 words high too and have some real fun smashing core!

Second, I like the idea of counting the gifts. That's kind of what the Ghosts in Pac-Man do, and I already have a mechanism for that.

One more thing I am playing with right now (I think I mentioned this before), is to apply the path-finder to the Ghost too, but have him target all his presents in a pattern (like scatter mode). He'll occasionally pause and look around like he does now, but he'll move in a less predictable way. By changing the order of the targets (and maybe introducing some spurious ones too) we can make him even more of a nuisance.

P.S. Did you notice in your score that Pac-Man made an appearance?

dZ.

Subject: Game over oddness

From: Joe Zbiciak

To: DZ-Jay

Date: Tue, 28 Dec 2010 15:35:49 -0600

dZ,

Here's another fun one: If you die while the ghost is stunned, he remains stunned during Game Over, giving the impression of someone running around shaking his head trying to get the voices to go away.....

--Joe

Subject: Re: Game over oddness

From: DZ-Jay

To: Joe Zbiciak

Date: Tue, 28 Dec 2010 16:40:50 -0500

Oh, yeah. I saw that. It's a "known issue" (LOL!)

It's because the Auto-Pilot implements the "Wait" command by using a timer, but all timers are reset at the end of the level. This cause the Ghost to remain in "Stunned" state.

It's in my list of things to fix, but thanks for pointing it out! I should make a list before I forget about these things.

I also cleaned up the code immensely so as to make it easier to work with. I've been commenting every function also, most of which were just hacked together last week.

I'm about to take a break soon for a few hours. I'll pull another all-nighter. I'm hoping to start playing with Arnauld's tracker tonight!

dZ.

Subject: New Snowman Attack Mode!

From: DZ-Jay

To: Joe Zbiciak

Date: Wed, 29 Dec 2010 01:52:11 -0500

Joe,

I implemented the new Snowman Attack Mode. This mode works by reading various level variables from the Level Data Table. Among these are the speed of the Snowman, how many gifts will trigger it, and additional time-out values. There are actually two modes, akin to the Cruising Elroy in Pac-Man: during the first mode, the scream is played followed by a short delay before the Snowman comes in and attacks. At this point, a timer for the second mode engages. When the second mode is triggered, the Snowman speeds up by a factor of 10, and the scream is played again to give you some urgency.

Moreover, the first mode is triggered in two ways. First by the number of gifts remaining, and if no gifts have been picked up for a while, by a secondary time-out counter. Every time Carol picks up a gift, the time-out counter is reset. Also, every time Carol picks up a Snowflake, the timer is paused throughout the duration of the "Stun" mode.

Eventually, either the time-out or the number of presents left will trigger the Snowman Attack, providing for a more challenging game.

I like how everything is going, but it seems now clear that the Ghost is not doing much. The Snowman provides some challenge, but there is pretty much *no* obstacle before he arrives. Once you learn the pattern (and let's face it, it's not such a complex pattern), you can pretty much run the same route for every level with ease.

This means that I need to add some variety to the Ghost movements. I'll get cracking at it tomorrow. I'll implement the "gift-seeking" mechanics so that the Ghost can run around the maze looking for his presents, and just getting in the way more effectively.

Attached is the latest build. Please let me know what you think. I also include the "level_data.asm" module for your perusal. Perhaps there is something you may want to tweak and knowing the original values can give you an idea as to what to expect.

A few explanations about the level data:

HEX_RATE(X): Percentage rate in Hexadecimal; X% of 60 fps

S_FRAMES(X): Seconds in frames; number of frames in X seconds

STUN_TIME(X, Y):Stun the Ghost for X seconds, flashing Y times within that span of time.

And lastly, only the first three values of the SCORE_POINTS enumeration is used. The rest are more of an inside joke.

Good news on the Christmas Carol front: I have implemented the path-finder logic for the Ghost and it works much nicer than the pre-selected pattern from before. In the process, I broke the "Stunned" mode and the collision detection of the Ghost, so I'm working on fixing those right now. But in case you are curious, I have attached the game as it is right now.

The Ghost "AI" works like this:

1. Pick a number from 0-7, representing a gift

2. Target gift, counting virtual tiles as it moves

3. When the counter reaches a pre-set number of tiles, re-target (go to step #1)

4. If the Ghost reaches the gift before the counter reaches its trigger point, re-target (go to step #1), and reset counter to zero.

5. Otherwise, continue moving until the any of #3 or #4 conditions are triggered.

It is a very simple AI, more like "Artificial Stupidity," but as you can see in this demo, it's rather effective. It gives the impression that it is actually "protecting" his packages

I need to also add the pauses every so often to look around, which I thought was very cute of the old version.

I have good news! I've been able to track down a bunch of those weird errors I was having. I managed to fix my stack overflow by removing all those unwarranted DIS/EIS I had all over the place, which caused my *looooong* initialization routine to be re-entrant. The same ISR being called three times in a row smashed the stack just enough to overwrite the first two words in System RAM. Guess what was the first one of those? The Elf "normal" speed. Figures.

I re-wrote or re-organized my initialization routine to be much more smooth and stable. I also synchronized the game engine, which I had not done. That right there helped a lot.

Anyway, game-play seems solid now. I'm going through the entire thing and reviewing the code to make sure it is working as expected. Tomorrow I'll play with Arnauld's tracker and just try to put a simple and short hook. No more time to get fancy.

There's one thing that bothers me right now, but that doesn't seem to affect anything so far: The collision detection routines are called on every frame, yet a sprite may remain in the same tile for more than one frame (scaled speed and all). This means that, say, the test for Ghost-Carol collision is called over and over for as long as both remain in the same tile. This includes the sound effect being called multiple times (though your code I believe ignores them while the first one is playing).

I guess I should implement some sort of semaphore, but I have nothing ready at the moment. I'm still thinking about how to best solve that. Any thoughts?

In any case, please test it if you can and let me know if you have any suggestions, comments, issues, or any feedback at all. This is crunch time for me to get it ready for tomorrow night.

There's I think only one more known issue (there may be more, but unknown): I saw this morning a yellow flicker when I picked up a gift, due possibly to an interrupt occurring in the middle of advancing the color stack. I thought I fixed those as you suggested, but I'll double check.

The last two things I want to implement tonight as part of the game-play is the return of the cute pauses that the Ghost did before as part of his "script;" and a "wake up" trigger of the Ghost, which will cause him to target Carol when she picks up a gift (after all, you are in *his* cave, taking *his* presents). My idea is that the Carol target will remain until his next natural retargeting point: when his tile counter reaches maximum. Depending on the timing between Carol and Ghost, this could be 1 tile, or 50! So, hopefully, more challenge, and FUN!

Thanks for all your help, it has been invaluable for this game. I'm almost there. If I had more time, I'd get more fancy with it. Of course, I *will* get more fancy because even if I am releasing this weekend, I'll continue playing with. It's not burnt in ROM... yet.

BTW, I think the game is hilarious and great fun so far. Ask my wife, I busted up laughing sitting down to play it just now with a fresh mind after waking up. (Yes, my sleep schedule is toast.)

I'm not 100% sure you need in-game music, or if you have it, you only need it until the tympani shows up. Title screen, intro and game over are the first places I'd focus on getting a ditty, and I don't think it's as important to get those "in-key" since they're not competing with sound effects. (And even so, with a minor tweak we can have the tracker transpose for you by shifting the base of the note table if needed.)

--Joe

Subject: Re: Xmas Carol: The Debugged Files

From: Joe Zbiciak

To: DZ-Jay

Date: Fri, 31 Dec 2010 00:16:26 -0600

*chuckle*

BTW, the Snowman direction-facing is re-broken....

Subject: Re: Xmas Carol: The Debugged Files

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 31 Dec 2010 01:41:12 -0500

Here's a new build with a few bug fixes:

- Snowman Attack time-out counter is working properly: it starts at the beginning of the level, and gets reset every time Carol picks up a gift. It also is paused during "Stunned" mode. This acts as a "time-out" in case the player takes too long to finish the level: one way or another, that Snowman is coming out!

- The Snowman Attack gift count trigger is also working as intended: It is separate from Carol's gift count, so even if the Ghost steals all her presents, the attack gift still remains in place.

- Snowman Attack has three phases:

1. Warning: triggered as mentioned above; lasts 3 seconds for the first 2 levels, then its 2 seconds, and less in higher levels. The "Snowman_Enter" sound effect is played as the warning.

2. Attack #1: when the warning expires, the Snowman comes out and the "Snowman_Walk" sound effect is played. At this point, a timer is started for the next phase,

3. Attack #2: when the Attack #1 timer expires, the Snowman speeds up, and the "Snowman_Fast" sound effect is played.

Snowflakes and gifts affect the Warning timer. All the other timers are set depending on the level data.

(I'm saying that with a laugh, just because it's so out of character for this game. This game has given me more smiles.... )

BTW, it does crash in a strange way if you try to leave the title screen.

Hmmm....

Subject: xmas carol: no weeds

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 31 Dec 2010 09:26:54 -0500

Joe,

Try this version on the console. It should not crash, though it still has the curious problem I was trying to illustrate before: that the Auto-Pilot is engaged not necessarily in the center of the tile.

I think I figured it out, and it's not a real "problem" per se, it's an artifact of the Auto-Pilot kicking in while moving. For Pac-Man, and all else in Christmas Carol, when checking the "center of a tile" it uses a "virtual tile." The cornering logic even accounts for this to keep in the center line or cut the corner, depending on the sprite.

So, the Ghost is doing what it was always intended to do: move a "virtual tile" (4 pixels), checking if he is in the center, and re-targeting. Except that I added a new factor: look-around if its tile counter reached zero.

So... for the sake of the look-around feature, I guess I should be checking the center of a BACKTAB tile, and not just a virtual tile. Either that, or account for in-between tile-ness when re-targeting after the Auto-Pilot, considering that it may be in between. I think the former would be simpler.

I'm on it now... I'll let you know.

dZ.

Subject: Ghost in the weeds: fixed (maybe)

From: DZ-Jay

To: Joe Zbiciak

Date: Fri, 31 Dec 2010 16:38:56 -0500

Fixed! I just made the Ghost pick a direction of the available ones in his current tile when he gets out of Auto-Pilot. Works like a charm.

Good news! I implemented multiple lives (right now it's three), and bonus life every 225 points (that's the same as three levels completed with perfect score). I hacked your "sfx.asm" file and made up a sound effect for it (it's very cheesy because I didn't bother to figure out how your sound effects engine worked, so I just dabbled until something sounded acceptable, and the game didn't crash). It is reminiscent of Pac-Man's own bonus life sound, an alarm sounding "DING! DING! DING!". Carol's lives are displayed on the top-left corner, opposite to the score. Next I plan on displaying the level number, somewhere at the bottom.

Regarding music, I couldn't it to work. I didn't spend much time on it, but honestly, I didn't feel like cracking my brain to figure it out after all I've been through so far. I sent an e-mail to Arnauld asking for help, but I don't expect much at this point.

So the question is... is it ready? Is it good enough to show? I plan to continue polishing it for some time later on, and eventually I'd like to get it down on carts with better artwork, multi-layered sprites, multiple levels (which should be simple)--and of course, music! But the goal was to turn the Pac-Man engine into a cute, Christmas-themed, one-off game for people to enjoy during the holidays; and I think I have fulfilled that in spades.

Attached is the latest build. It seems to be stable, and works rather well. More than once, while testing it, I found myself having so much fun that I would forget what I was doing, and just got into the game. That is, until a bug would show up and jarred me out.

Please let me know your thoughts, and if you have any other suggestions to improve it.

If DZ-Jay is the "Daddy" of Christmas Carol, does that make Joe her "Godfather"?

Thanks for sharing this - I like knowing what went on behind the scenes....

Actually, when I started gathering the e-mails for the story, I was thinking more like Pac-Man is Carol's daddy.

However, by the third day of development, it was already obvious that there was very little Pac-Man left. As a matter of fact, the game engine and framework was eventually re-written three times by the final release of the cartridge game.

I have toyed with the idea of returning to the Pac-Man project, but I firmly believe that it would be easier and better to start from scratch by using Carol's final engine--which originally was meant for Pac-Man.