Jump to content
IGNORED

Intellidiscs: Weekly development log


Ryan Witmer

Recommended Posts

On 8/2/2020 at 9:17 PM, Ryan Witmer said:

Just wanted to do a little bit of "thinking out loud" about this game.

 

When I do a game project, I always try to identify THE PROBLEM.  What is THE PROBLEM?  It's the one thing that I need to get right, or else there is no game.

 

The best example of THE PROBLEM I can give was from RealSports Curling.  It was possible, however unlikely, for sixteen rocks to be active at the same time in that game.  So THE PROBLEM for that game was how to actually put sixteen rocks on the screen in a way that would work.  The 5200 only offers eight sprites, and four of them are two-pixel wide missiles.  Those wouldn't work at all.  The solution was to build all the rocks out of the playfield.  The player sprites actually make up the rings, and the missiles are used for various vertical lines.  The rocks are, in effect, a really fancy moving background.

 

I first got the idea for a Deadly Discs port way back before my first game, and I quickly identified THE PROBLEM even back then.  In the Intellivision original, there are four enemy types and they're distinguished by color.  Normal dudes are light blue, armored dudes are purplish, leader dudes are dark blue, and the orange dudes show up at 1,000,000 points.  In addition to this, there are four types of enemy weapons.  Normal discs are dark blue, double-damage discs are kind of a dark purple, seeking discs are white, and the orange dudes have white staff things.

 

The 5200 provides eight sprites.  Four of them are 8 pixel wide "players" and the others are 2 pixel wide "missiles."  On the surface, this seems perfect!  There are four people on the screen at once, each has a small weapon!  THE PROBLEM lies in the colors.  There are two ways to do color for the sprites.  Normally, each player has an associated missile that shares its color.  There's also something called "fifth player" mode which allows you set the four missiles to an independent color, but it's one color that all four missiles share.  The 5200 doesn't have enough sprite colors to do this the way the Intellivision does.

 

So, what are the possible solutions to THE PROBLEM?  The first decision to make is whether or not to try to preserve the color-coded approach that the Intellivision used.  It's worth mentioning that the final orange enemies don't throw their weapons, they're just decorative, so there's less of a need to make a solution work for those guys.

 

If the is answer is yes, the color coding should be preserved, how can it be done?  I have one solution and I don't like it.  Flicker.

 

I could flicker between the players and their weapons, changing the color every frame to simulate 8 sprite colors.  Against the mostly black background of the game, this might not actually look that bad.  It also has the advantage of being really easy to do.  The disadvantage is that when flicker does look bad, it looks really bad.  It also breaks hardware missile-to-player collision detection, since the players and missiles will never actually be on-screen at the same time.  I'm not sure I'm willing to give that up.

 

Any other approach that I can think of involves dropping the Intellivision's color coding, at least in part.  This allows some other possibilities.

 

It's clear that the enemies can be color-coded or the weapons can be color-coded, but not both.  So how to differentiate the things that aren't color-coded?  Make them look different.

 

This leads to two approaches:

  1. The enemies all look the same, but are colored based on their type.  The enemy weapons are shaped differently based on their type.
  2. The weapons all look the same, but the enemies are colored based on the type of their weapon.  The enemies themselves look different to represent their type.

Option 2 seems to be the best.  The players are 8 pixels wide, so there's a lot more room to come up with different designs to make them distinguishable.  There's only so much you can do with a 2 pixel wide weapon sprite.

 

So what will I do?  I haven't decided yet.  I'm not exaggerating when I say that this is a problem that's been on my mind for over six years.  I was hoping that after a few 5200 games I would have come up with a good answer, but I'm pretty sure that answer isn't coming.  Now that I'm committed to doing the game, I'll finally have to make a call.  I'm leaning toward different enemy designs, colored based on their weapons.  Time will tell, I guess.  Sometimes the way these things turn out surprises me.

There are a number of solutions ... it may be possible to use raster interrupts.  You can theoretically have multiple enemies as long as they are not on the same hirizontal line, by taking the same player, and having its horizontal position change down the screen.  The player colors can also be changed in this fashion as well.

 

 

Link to comment
Share on other sites

1 hour ago, Cafeman said:

Actually, this is what I was wondering when I asked you how you'd translate it to POKEY.  I don't know if there is a MIDI utility to translate it to pokey chips.  There are A8 sound packages that you can devote a chunk or ROM for in your program, and use the util to compose a tune with various FX, but I've never used those either.  

I believe I have the Atari 8bit Music Composer program.  I wonder if I notated the music in the 8bit and saved the file if it could be ported to the atari 5200.  I don't know what format or if it can even work.  lol.

Link to comment
Share on other sites

22 hours ago, Synthpopalooza said:

There are a number of solutions ... it may be possible to use raster interrupts.  You can theoretically have multiple enemies as long as they are not on the same hirizontal line, by taking the same player, and having its horizontal position change down the screen.  The player colors can also be changed in this fashion as well.

The central problem is that the missile colors are tied to the player colors, and not independent.  Fifth player mode gets you an independent missile color, but it's the same for all four missiles.  Without resorting to sprite flickering or restricting the enemies to specific vertical zones (which I believe the 2600 version does) I can't get the enemy/disc color combinations that the Intellivision can do.  I'm a also using a five-color playfield mode, which means one of the playfield colors is shared with the missiles in fifth-player mode.  I would have to make some serious gameplay sacrifices to match the color scheme the Intellivision uses, and I'm just not willing to do that.  I also have some other surprises planned that would compromised by doing anything too crazy, so I'll just have to get by with a less than optimal solution.

 

Sadly, I won't be able to get much done this weekend because of real life stuff.  Today I went and mopped up a few little things that had been bothering for me a while.

 

In the original game, if a character catches their disc while in the blocking or crouching stance, they immediately stand up.  I've made this happen.

 

Related, you can now throw your disc from the blocking and crouching stances.  I think I had this working at point but I broke it when I made some changes to the crouching logic.  It works again.

 

I also made sure that the disc is thrown from a common position no matter what state the character is in when they throw it.  Previously it was thrown from where ever it happened to be located in the carrying or blocking state.  The new behavior more closely matches what the Intellivision does.

 

I also made sure you can go back to the blocking stance after crouching.  I missed this the first time through.

 

I'm not sure if I'll find time to work on this tomorrow, but if I do it will most likely be to fix up some similar little things.  The next big feature to implement is player damage and death, but that will have to wait for next week.

  • Like 5
Link to comment
Share on other sites

1 hour ago, phuzaxeman said:

Hey Ryan, how is the player damage and death in the game going?

It's closer.  I got the player taking damage and the game ends when your health hits 0.  The damage system is very simple right now, I still need to add the appropriate animation effects and make the player's speed decrease like it does in the real game.  I also haven't dealt with health recovery yet.

 

I fixed some glitches today, the biggest one probably being that the hit detection for blocking was actually totally wrong on one axis.  I've also been trying to nail down exactly when an enemy is considered dead for spawning purposes.  In the Inty game, enemy discs are allowed to continue in flight after the enemy dies, which makes this rather complicated.  I mostly got this whole mess sorted out today, but ended up introducing a bunch of bugs into the wave spawn code so I'm not quite there yet.

 

When the player "dies" the game just goes into a lock-up loop at the moment.  It does look for the reset key while in this loop, so I guess I sort of have game resetting working, after a fashion.

 

I also took the time to test on real hardware today.  It seems pretty good, although the block/crouch key seems to be a little off.  I'm not sure if that's my code, or the unreliable nature of the 5200 keypads.  Needs more investigation.

 

Here's a pointless picture of the game running on my 5200:

 

intellishot.thumb.jpg.791ec2c1184544fd1a02e59ad3faf5b6.jpg

  • Like 6
Link to comment
Share on other sites

8 hours ago, Ryan Witmer said:

It's closer.  I got the player taking damage and the game ends when your health hits 0.  The damage system is very simple right now, I still need to add the appropriate animation effects and make the player's speed decrease like it does in the real game.  I also haven't dealt with health recovery yet.

 

I fixed some glitches today, the biggest one probably being that the hit detection for blocking was actually totally wrong on one axis.  I've also been trying to nail down exactly when an enemy is considered dead for spawning purposes.  In the Inty game, enemy discs are allowed to continue in flight after the enemy dies, which makes this rather complicated.  I mostly got this whole mess sorted out today, but ended up introducing a bunch of bugs into the wave spawn code so I'm not quite there yet.

 

When the player "dies" the game just goes into a lock-up loop at the moment.  It does look for the reset key while in this loop, so I guess I sort of have game resetting working, after a fashion.

 

I also took the time to test on real hardware today.  It seems pretty good, although the block/crouch key seems to be a little off.  I'm not sure if that's my code, or the unreliable nature of the 5200 keypads.  Needs more investigation.

 

Here's a pointless picture of the game running on my 5200:

 

intellishot.thumb.jpg.791ec2c1184544fd1a02e59ad3faf5b6.jpg

Great to hear. If you need another tester, let me know and you can send it to me. Just let me know what you wanted tested. My keypads are gold dot upgrades so I would know if something wasn't working. 

Link to comment
Share on other sites

14 hours ago, phuzaxeman said:

Great to hear. If you need another tester, let me know and you can send it to me. Just let me know what you wanted tested. My keypads are gold dot upgrades so I would know if something wasn't working. 

Thanks, there will be plenty of test builds down the road, and I could use as many people as I can get.

 

I think I ironed out all the bugs I introduced yesterday.  Basically, the game was losing track of how many enemies were alive at any given time, which completely screws up the appearance of new enemies.  The way this is working right now is supremely hacky and I don't like it.  I might need to do a significant rewrite of some of this logic.  I decided to use the lowest digit of the score to track the enemy count so I could see it (this digit is normally always 0) and I left that code in there until I'm certain the issues are fixed.  If you see any screenshots with a number other than 0 at the end of the score, that's just debug code.

 

I also fixed up some of the timings surrounding enemy respawns.  They might need a little tweaking still, but there were some bugs in the areas where these timers got reset and started.

 

My coffee maker stopped working this morning, and since a programmer is just a machine that converts coffee into code, I think I'm done for this weekend.  Cleaning up this spawning logic was a big deal, even though it's not the sort of thing that shows up in screenshots and videos.  Next, I need to add the rest of the details to player damage, then I should be able to start adding the other enemy types.

  • Like 2
Link to comment
Share on other sites

Hi guys!
Regarding music it's readily avalilable at vgmusic.com site and it's not very complicacted.

 

I may recreate it in Raster Music Tracker or as note-values (if you wat to use your own routine).

 

Just I would need to know how many voices you want to use (all 4 or less). And what part of music would you want to have in game.

 

Regards

 

m.

  • Like 2
Link to comment
Share on other sites

I mentioned a little while back that something seemed off with the block/crouch key the last time I tested on real hardware.  I discovered that when you press the 5 key while your player is in motion, instead of reacting right away the keypress sort of gets buffered and takes effect as soon as you stop moving.  I've fixed this, and while I'm not 100% sure that's what I was seeing on the real system, it probably was.  The next time I test on my 5200 I expect that issue to be gone.

 

I also added the correct behavior for the player taking damage.  In the Intellivsion game, here's what happens:  If you get hit when you aren't moving, nothing special.  You just go into the hit frame until you decide to move again.  If you get hit while moving, you lose the ability to move in the direction you were going until you release the movement disc or choose a new direction to run in.  Basically, if the enemy tags you, you freeze until you pick another direction to run in, or go neutral and start moving in the same direction again.

 

This all works correctly now.  It actually wasn't very much code, but it took me a few hours of thinking and then figuring out exactly where the pieces needed to go.  The one hit behavior that isn't quite right yet is when the player gets hit while attempting to block.  I won't go into detail about what's supposed to happen here, but my game doesn't handle this case correctly quite yet.  It's close, though.

 

There are still a few pieces of the damage system missing.  First, you're supposed to get slower as you take damage.  I have all the pieces in place for this, but I need to work out some speed tables and connect everything.  Second, damage recovery.  A damaged player will recover health/speed after a certain amount of time.  You also recover completely between enemy waves.  This is mostly the inverse of the first thing to be done, so no big deal.  Just need a timer.  Finally, I need to work out some of the specific details around multi-hit enemies.  The way they take damage and recover is the same as the player, but I'm not completely sure on how being hit affects their movement.

 

I'm fairly confident I can get most, possibly all, of the player related damage stuff done tomorrow.  The enemy stuff can wait until I actually add the multi-hit enemies.  It will be probably be easier to deal with it at that time.

  • Like 2
Link to comment
Share on other sites

16 hours ago, Indiana Quack said:

How often are you checking out every little detail of the Intellivision game?

Not as much time as you would think.  I have the original set up in an emulator so I can quickly go in and check things.  You also develop an eye for these sorts of details after doing enough game programming.

 

tron_desktop.thumb.png.b3b4e591f67705367717023d8c4307aa.png

  • Like 2
Link to comment
Share on other sites

This morning I got the health system working for the player.  The enemies still need some work, but the multi-hit enemies aren't in the game yet so at the moment it doesn't matter.

 

When the player gets hit, he will slow down like he's supposed to.  The recovery timers are also in place, after four seconds you will recover one point of health/speed.  You're also restored to full health every time a complete new wave is spawned.

 

I also made an adjustment to the reinforcement timer.  I had it set to six seconds for some reason, but the Intellivision manual claims the correct value is ten seconds, so that's what I plugged in.

 

I'm posting a new build, which I'm calling the "barely playable" build.  As always, there's a build identifier 256 bytes from the end of the ROM.  It currently says Preview build 3, 11/1/2020.

 

There are a few known issues with this build:

  • The player doesn't react correctly when he's hit while in the blocking stance.  The correct behavior is to drop the blocking stance and go into the hit animation, but then resume the blocking stance once the player moves the stick again.
  • I've had a lot of problems with enemy discs not getting erased properly when they die.  I thought I had this fixed, but I just saw it again while testing.  You may see this, there's nothing you can do about it.  I just need to fix it.
  • There's no proper Game Over handling yet.  The game will freeze when you die, but the Reset button will work.  Right now the Reset button only works in this frozen state.  I also haven't implemented the Pause button yet.
  • The last digit of your score will behave very strangely.  I'm currently using it to track some internal information for debugging purposes, just ignore it.  In a real game, it's always 0 anyway.
  • There's still no sound of any kind.
  • The pursuit algorithm for returning discs is still really sloppy.  I need to fix it.

If all of that hasn't scared you away, here's the current ROM:

 

intellidiscs.bin

  • Like 7
Link to comment
Share on other sites

Fixed a few bugs today and found of bunch of new ones, so typical Saturday, I guess.

 

While browsing the Intellivision game manual for information I noticed for the first time that the player is supposed to regain health when you teleport through the doors!  I never knew this!  I guess I just somehow missed that every time I looked at the manual.  I've gone ahead and implemented this, but I'm not sure I've got it quite right.  In my game, it happens instantly, but I think there's a slight delay in the Inty game.  This makes sense, because without that delay you could just quickly bounce back and forth through a pair of doors to restore your health.  I need to investigate this further.

 

I decided to ignore some of the crazy bugs I'm seeing for the moment and push ahead with the difficulty ramp.  I got the system in place, which is the most important part.  With this I can start bringing on the other enemy types once your score gets high enough.  Here's what I have done do far:

 

Level 0: < 2,000 points

At this level, you only see the basic enemies and they're one step slower than you are.

 

Level 1: 2,000 - ??? points

At 2,000 points, one enemy in each wave of three will be the same speed as the player.  Also, sometimes the reinforcement enemies will have this speed as well.  I don't know the exact odds of this happening, so I went with 1/3 since it matches the full wave composition.

 

Not much, but like I said earlier the system is there, so now it's a matter of studying the original game and figuring out where the difficulty changes occur and what exactly they are.  The armored and leader enemies show up at 10,000 points, the guard enemies at 1,000,000.  This is documented in the manual.  Most of the more subtle changes will just take time to figure out.

  • Like 1
Link to comment
Share on other sites

At the 10,000 point range when the new guys come in, how does the Intellivision game decide when to give out the white disc that continuosly follows you like some kind of heat seeker? Small thing Im sure, but another part maybe to think on You are really covering things I never knew about the health restoration on the doors either

Link to comment
Share on other sites

21 hours ago, Indiana Quack said:

At the 10,000 point range when the new guys come in, how does the Intellivision game decide when to give out the white disc that continuosly follows you like some kind of heat seeker?

My gut feeling is that the white disk starts showing up at some point threshold above 10,000.  In the last test I did, I saw one of the leader guys show up with one of the double-damage disks right when I hit 10,000.  Need to play more to figure out when the white ones start getting handed out.

9 hours ago, mr_me said:

Enemies seem pretty random but after a while you stop seeing the light blue and purple warriors.

Based on what I've seen so far, you will always get one of the "advanced" enemy types at 10,000.  I expect that at some point you will always see two, and then eventually three, phasing out the basic enemies.

 

I added a couple more difficulty points today:

 

Level 2 is 3,000 - 6,999 points.  At this level, two of the basic enemies will be fast.

Level 3 is 7,000 - 9,999 points.  Here, all the enemies will be fast.

 

I have the code in place to detect the next level, 10,000+, but I haven't actually made use of that information yet because I would need to start coding up the advanced enemy types.  This is probably where I'll start next week.  The armored enemy is simple, I just need to make a slow enemy with 2 hit points.  The leaders are a bit more complicated.

 

I adopted a new cat this weekend so I need to spend some time helping her out.  I'm happy that I was able to get the difficulty system in place this weekend, so I'll leave it there for this week.

  • Like 1
Link to comment
Share on other sites

Alright, here we go!

 

large.tron_armor.png.b5d2aacb8333edb57b2180a233030a2a.png

 

Got the armored enemies implemented today.  They take two hits and recover exactly like they should.  I also patched up a couple of bugs.  Tomorrow I might start working on the leader enemies.  Not exactly sure how complicated they will be to implement, but I should be able to at least get some of the basic stuff done.

  • Like 9
  • Thanks 1
Link to comment
Share on other sites

I wasn't able to get as much done today as I hoped, but I got some of the foundation work for the leader enemies in place.  Right now they appear, but they don't do anything special.  I need to work out some of the specific details of their effects.

 

A leader is supposed to make the other enemies faster and somehow more accurate.  Faster is easy, I'm not really sure what it means for the enemies to be more accurate in game terms.  I've never noticed any difference in their aim, but I'll keep looking.

 

Also, initially the leaders will spawn with either a normal or double-damage disc.  Some casual testing has me thinking that the seeker discs show up at 20,000 points but I need to do more detailed testing to confirm this.

 

So basically, I need to code up the leader effects on the other enemies and the different disc types.  I need the code to both apply the leader buffs when they appear and remove them when they die.  The double damage disc should be pretty easy to handle, I just need to inflict more damage on hit.  The seeker disc needs some more research into the original game before I pin its behavior down.

 

Once the leaders are done, I think I'm going to start trying to put together the recognizer fights.  In the interest of not getting in trouble, I think I'm going to call it the "Identifier" instead.  I have some ideas for how this part is going to work, but I'm sure I'll run into a bunch of stuff I didn't think of when I try to actually make it happen.

  • Like 1
Link to comment
Share on other sites

On 11/16/2020 at 6:50 AM, Indiana Quack said:

Id say since you’re close to thinking about the Recognizer er Identifier, this would be close to completion? The guards that come in at a million points get worked in after the Recognizer? Just giddy about the progress you’re making on this!!!

It's definitely moving pretty quick, especially considering I only touch it on weekends.  The end of a project always kind of sneaks up on me.

 

After the leaders, guards, and recognizer the game will be at a state that I like to call "gameplay complete."  There's still a lot of work to be done though.  Bug fixes and adjustments, thinks like proper pause/reset support, the title menu, the different control setups and so on.  There's also no sound yet, so that all needs to be done still.

 

I also have a secret feature that needs to be done, but that will be revealed later.

  • Like 3
Link to comment
Share on other sites

The double-damage leader discs are now in place.  I've also made sure that when you block a special disc, the replacement disc is just a normal one, so that's already there for when I get around to working on the seeking disc.

 

I'm having a bit of trouble figuring out how I want to implement the leader buffs to the other enemies.  I need to spend some more time with the original game trying to figure out exactly what's going on there.  Once I get this all straightened out, I'm going to continue working my way up the difficulty ramp until the seeker discs show up.  Right now I'm pretty sure this is at 20,000 points.

 

When the seeker discs are done, the leaders will be complete and I'm going to start working on the recognizer fights.  I expect it will take me a few weeks to get the recognizer stuff completely working.  Tomorrow I'll try to push a little farther past 10,000 points and hopefully come up with a plan for finishing the leaders.

  • Like 2
Link to comment
Share on other sites

Unfortunately I was just really tired today and didn't get any coding done, but I did do quite a bit of research into the effects of the leaders on the other enemies.

 

I spent a few hours observing the original game and I'm just not seeing the effects that the manual describes.  I've definitely seen cases in the past where a game manual describes something that's wrong, and I'm not sure if that what's going on here.  I plan to do more research, but if the manual is wrong and the leaders are just normal enemies that occasionally have special discs it will make the programming a whole lot easier!

 

Hopefully I'll feel better next weekend and I can more done on this.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...