"The future of gaming can be summed up in two words -- Pong and Joust" --Otter on rec.games.video.classic |
Introduction FlapPing (formerly "JoustPong") is an original game for the Atari 2600 by Kirk Israel. This page was the game's development journal. Let's Play! Currently, the easiest way to play the original JoustPong is JoustPong online. (You can also play the retitled FlapPing which has the honor of being the Stellerator Embedded sample program.
You can now play the 2600 version in your browser! Go to the Virtual Atari JoustPong page -
you can click the select button or use the arrow keys to get the game mode you want - against a computer opponent (the atari) an easy computer (the teddy bear) or a human (the winged pong bat),
with our without the "Poorlords Walls". Player 1 uses space bar, Player 2 uses period key....
|
podcasts -- 2021 February 7 |
A few updates... a while back the Stellerator Embedded developers asked to use FlapPing as their sample program so it's another way to play it in your browser! Today I added JoustPong in the browser as well, just to have it locally. (In other news - now when I dabble on the 2600, I usually do it in batariBasic - see loaded4Bear and Sisyphus.) |
podcasts -- 2017 June 23 |
Hey you know what else came out in 2004? Podcasts! And like 13 years after, JoustPong got its due (ahem) on Episode 1 of Jeremy Penner's Fringe Gaming Podcast. (Full disclosure I know Jeremy reasonably well, and we share an interst in hyper-indie game making and the commmunities that support it.) |
flapping js -- 2014 February 22 |
I made a browser-friendly version of FlapPing in Processing.js!
|
midi music -- 2012 February 8 |
http://midis.atari2600land.com/ - tried to dig up this Atari 2600 MIDI music site with a remix/cover of JoustPong/FlapPing title music. |
joustpong is like a circus -- 2009 January 3 |
So, lately I've been digging Britney Spear's new song Circus. And now I know why...
Here is the title screen to my original Atari 2600 game JoustPong: And here is a excerpt from Circus, around 1:18 in... COINCIDENCE??? I THINK SO! Considering the inspiration for the JoustPong theme was a cross between a badly tuned toy ukulele and half-memories of what Super Mario Brothers 3 sounds like when paused (actually I think the riff is chromatic), I probably don't have too much of a case here. Actually, other people can here the similarity, right? |
art attack -- 2005 February 8 |
I thought I'd enhance this entry with a quick history of the
brilliant work artist
Dave "Liveinabin" Exton
has done for the FlapPing revamp. (He made the orignal coverart
and manual layout as well.)
His first inspiration was some concept art for the game Ico...here's what he sent me to tell me what he was thinking about... Shortly there after, he came up with this lovely, lovely sketch...unfortunately he says he doesn't have the fullsize version any more. This my slight modification to it, where I showed him where I thought the logo could go... As you can see it's a great, lonely-feeling piece with great texture. I liked the idea of having the logo small, and not blocking the sky. This is the version he sent me next...he says that the lines are an unfortunate necesity to make the art stronger on the cart itself... I wasn't crazy about how cluttered it looked, and I don't really need my name on it...just an Alien Bill Logo, and then one for Atari Age...so this is the final art: I like the "artsiness" of just having icons, no names on the front save for the title. The border around the icons is mostly to ensure that it doesn't look like alienbill is running around the scenery. Incidentally, his first idea for the Title was this: It's a pretty cool idea, but I thought it would be hard to make the modern font / tech font distinction on the title screen, so he came up with this kind of flintstone-y (in my mind at least) chunky font, which except for the color (he first sent it in red) is what we ended up using: Good stuff! I think it mapped out pretty well on the title screen, as you can see at the start of the previous entry. UPDATE! Either I whined enough or Mr. Exton finally recognized my stupendous sense of aesthetic judgement, but he redid the art in his original softer style...and was even able to give me a fullsize photoshop file I plan on making into a poster. So, minus the "FlapPing" text (which I deleted from the image) and the icons, here is the new art: |
flap-ping like the phoenix -- 2005 February 7 |
So, Atari made a stink about using the name "Pong"...now
I'm pretty sure "Pong" is on the verge of being a generic term...
certainly judging by the Google results, it seems Atari has been
lax in defending their "intellectual property".
Anyway, JoustPong is no longer for sale at AtariAge, but I'm working on a slight revamp...Thomas came up with the brilliant name "FlapPing" (sometimes written "Flap-Ping".) Liveinabin has made up a great new bit of cartridge art for it, I'll post that later. Meanwhile, here is a new ROM with the new title screen. I've changed the "CPU" icon so it's no longer a Fuji, and fixed that small bug, so now when you win a 3-pt game the winning score flashes "W" not just "3". Today's Source / Today's Binary |
it's out there! -- 2004 March 26 |
I guess I "owe" this page a small write up of my time at PhillyClassic, talking with people about the game and selling around 30 copies. It was a lot of fun and I left feeling more positive about the game in general than when I got there, people seemed to groove on it.
JoustPong is now for sale at the AtariAge store. Seems to be selling pretty well, so if you want to get a version with the T-shirt, you better move quickly! Dirty secret: there is a tiny conceptual 'bug' in the current release; after playing it with people, and spending more time on the Poorlords mode (which, I've decided, not only looks better but plays much better as well, it really mellows out what can be too harsh of a game) I noticed that when someone wins poorlords, the score display stays at "3", it doesn't switch to "W"....whoops! |
no more mudpong -- 2004 March 14 |
Well, it wouldn't be a release without at least one last minute bug! Eric Mooney's sharp eyes caught that sometimes a button push would cause the wing to move, but not actually move the player. At first I thought he was just mis-seeing intertia, but no, it was a bug. In the course of investigating a fix, I realized that sometimes a slow collision w/ the floor would cause the player to bounce properly, but other times the player would just stick... aspiring 2600 geeks will be interested to know that the fix involved stopping ignoring of the fractional byte when adusting the players position to be resting on the floor, seeding it with a large constant instead. Everyone else, just know I fixed the sticky floor bug! (If for some reason I hadn't been able to fix the bug, I would've suggested adding some handwaving about "muddy floors" to the manual, since it actually did a pretty good impression of that. But the manual was already printed, so I had no choice but to fix the dang thing.) Oh, and I did lighten up the floor and ceiling. I think they were about the darkest shad of grey besides black the Atari has--almost unseeable on my 36" TV in the daylight. Today's Source / Today's Binary |
stick me with a fork? -- 2004 March 13 |
Sweet jimminy crickets, I may actually be ready to call it a ROM.
First off, in non-programming news: the shirts arrived! They came out really well and at a good price. (Call Salisbury Sales, ask for Josh, custom-T's are fun.) My friend Jane is modelling one here. Also, Dave Exton put the manual in a nice format...but you gotta shell out for the game if you want to see it ;-) Alright, back to the game... Chris Tumber did some awesome detective work to figure out what was going wrong with my program on the supercharger. Turns out it was kind of a supercharger specific problem...maybe sort of. It had to do with this clever "PHP Trick" the kernal Paul Slocum crafted for me depended on...sometimes it was grabbing undefined values, and it would set the "decimal mode" bit on the 6507 chip, which means every time I tried to compare two numeric values, things were borked. That's fixed, and along with cleaning up my kernal clearing code, now my ROM works on Z26, PCAEWin, and Stella...Mac users can get in on the action. TODO NOTHING! Well, I may decide to make the grey bars at the top and bottom of the game a bit lighter. It looks a bit dark on my big TV. (Incidentally, with my subwoofer and speakers going on that TV, the music sounds pretty amazing.) Done
Dang, this journal has gotten long...I'm a slow programmer I guess! Today's Source / Today's Binary |
behold, i am become shiva, destroyer of kernals! -- 2004 March 10 |
I was hoping to wrap things up tonight but I'm getting a terrible
bug trying to do some very basic things and I'm calling on Stella list for help.
Today's 'working' Source / Today's 'working' Binary Today's 'broken' Source / Today's 'broken' Binary |
doing it manually -- 2004 March 9 |
So close to finished, I can almost taste it.
Fixed a stupid typo bug (class forget the "#" befre a numeric constant) w/ the new ball launch code that only showed up on an actual 2600 (Z26 is oddly much more forgiving of that, in general) and spent a lot of time getting accurate ball vertical speed range limiters, so it doesn't go too flat or too sharp. But actually spent the most time today working on the content for the manual. That was kind of fun. Today's Source / Today's Binary |
the final countdown -- 2004 March 8 |
Trying to wrap things up! Added a fun little 3...2...1 countdown and make it go off in a
random direction at the start of a game. Al's final suggestion is making it so the ball won't flatline quite so much. Then all I have to do is fix up the AI, and I think I'm ready to call it a game! Today's Source / Today's Binary |
new england classic gamers, ho! -- 2004 March 7 |
This is the version I'll be demo'ing today at New England Classic Gamers.
Today's Source / Today's Binary |
beyond compare -- 2004 March 3 |
ITEM: the other day I finally got around to see if my buddy
Ranjit's hand-me-down Diamond Rio
mp3 player (32 megs) could be used to feed Atari binary WAV's into
the supercharger...yup, though it didn't work at all consistently
until I downloaded RazorLame
and had it translate the MakeWav sound file at the highest possible bitrate.
I figure I should burn a CD w/ the sound and bring a discman as backup...though
the MP3 player/supercharge combo looks very cool. ITEM: I've started thinking about how to package this game for PhillyClassic. I'm working with Al to get shirts printed up, logo shown here...pretty snazzy, I think. ITEM: once this is done, I'd like to go back to my old 2600 programming tutorial 2600 101 and add a lot to it Possible topics include: - subpixel motion - exact horizontal positioning - music basics - big playfield assymetrical graphic (failure of 40 pixel) - cleverness like double player kernal - PCAEwin debugger / listfile - (math comparison stupidness) - flicker vs / intelligent sprite reuse; - that 6502 simulator - COMPARISONS (like 6502.org tutorials page) - tricks like using PF or player graphics for binary read out ITEM:then of course there's the game itself. I learned signed/unsigned comparisons are tricky, that's why one of the two tutorials at 6502.org is dedicated to 'em (hence today's title's weak pun) Thanks to Eric Ball for showing me the way Biggest changes in the game: "Poorlords" now stops at 3 pts (having to break the wall down AND get 10 pts was taking forever) but more importantly, I made the vertical motion of the ball 16 bits. I'm still trying to figure out if the ball speed should just be the speed of the player that hit it (though checked so it can't exceed a certain value) or a combination of its previous speed plus the speed of the player who hit. I think the former might be the best bet, but I'm releasing a version with both. The last change I might make is having the horizontal speed of the ball decrease as the vertical increases. I don't want to go crazy getting it perfect w/ SIN and COS lookup tables, some kind of simple subtraction might do the trick. Today's Source / Today's Binary (copy speed) / Today's Binary (add speeds) |
another month, another update -- 2004 March 1 |
|
lead (day) ing ahead -- 2004 February 29 |
Not as productive a day as I had hope, alas .
I put in that pterry sound I worked out yesterday. Also,
I (think I) put in variable ball vertical speed, based on the speed
of the player it hits, but it seems to usuall just resort to "1"...
Today's Source / Today's Binary |
the slow slog of progress -- 2004 February 28 |
Some more progress.
Today's Source / Today's Binary |
getting there -- 2004 February 27 |
More progress...mostly Paul Slocum based...
The rainbow might not stay. But Al has some interesting ideas: -since the ball color is tied into the wall, maybe slowly cycling colors would be a good compromise w/ the rainbow all. Maybe flash the screen when a point is scored, or flash the players score when its at 9...also I might want to add a teddy bear select to make the computer easier or harder.... ;DONE
Today's Source / Today's Binary |
so much stuff! -- 2004 February 26 |
What a couple of days I've had! Paul Slocum gave me a brilliant
"kernal" routine that draws both player on either side of the screen
using the same player graphic, by using the 2600's duplication feature.
So clever! So I spent a lot of time working my game around that.
Another big change is an idea from AtariAge Al about the computer...he pointed it out it flaps just to fast, so I put in a rate limiter which does an excellent job of making the game a bit easier. Also, Pterry is flying around in a cooler pattern, and the title screen has been enhanced. So here's the stuff I still gotta do, and then all the stuff I did today... High Priority Todo:
Today's Source / Today's Binary |
welcome pterry! -- 2004 February 22 |
Wow, I had probably one of my single most productive, self-debugginest days like, ever.
I've added the charcter Pterry from Joust into the mix. Currently he (she?) flies
in the middle of the screen, adding a bit of chaos into the mix. I need to revamp
how the ball bounces off of Pterry (right now, the way the ball bounces depends
on which sprite he's sharing, and the vertical speed of the ball doesn't change
because of it) and also get Pterry doing a bit more swooping, not just going back
and forth on the screen. Still, I'm happy... it's a lot tougher than it looks
to add in a character. Also, I went back to a simplified ball rebound algorithm, but when I thought about why it was so difficult, I realized the ball was moving too fast. So I made the ball horizontal speed start using fractional positioning, and slowed it down, and it makes the humans better and the computer a bit worse. It's so cute how I keep writing this little journal like someone's actually reading it. Still, it'll be good reference for me in the future, and some aspiring programmer might find it...I dunno, inspirational, how I can be so mediocre and slow at this but still keep making progress. Today's Source / Today's Binary |
bounce to the ounce -- 2004 February 18 |
Trying some experiments with the ball speed after it hits the player...here it's based on where the ball
strikes the paddle. I don't think it works so well. Feh.
BUT! I got my Atari music mojo working, a decent little riff and beat during the titlescreen. Today's Source / Today's Binary |
buggin' -- 2004 February 15 |
Well, I'm proud of myself that I really focused in and debugged the phantom
brick issue that had been bugging me for so long, by setting up special test
cases and finding out what caused the problem...basically, if it detects a
ball/wall collision, it looks at the ball position and figures out what brick
got hit. It turns out, though, that the ball could hit two bricks at once,
if it was exactly in between them. Fair enough, the game would round off and
the top brick would get removed...but if the ball hit between a brick and
the empty space above it, the program would happily still try to "remove the
top brick"...which was already gone, duhhr. So now it just does a trick...
it KNOWS the ball hit, it then sees if the brick it's gonna remove is already
gone, and if so, removes the one below instead. But now I have another bug...and I put in some decent debugging stuff, but to no avail. I'm experimenting with variable vertical speeds for the ball. For my first attempt, I was just gonna grab the hit player's vertical speed (the integer byte of it, now that I'm using sub-pixel speed and positioning) and make it the vertical speed of the ball. But, as you can see with today's ROM by just letting the player fall--speed'll be zero--the ball's rebounding up. I added diagnostic, left player's score is set to the binary version of left player's speed (integery byte), right player's score is set to the bits of the ball's vertical speed. The player's speed meter is about what I'd expect, but the ball's speed seems to be -1 as soon as it hits. And I couldn't see anything in between the collision and the meter display that changes the ball speed. Today's Source / Today's Binary |
you call this progress? -- 2004 February 12 |
Simple little bug fix. Turns out that the new math I'm doing moved stuff
inside the ROM enough that my tightly wound kernal had a page crossing
part in it...I let my guard down against those things, but Dennis Debro
pointed out the errors of my ways.
Today's Source / Today's Binary |
gah -- 2004 February 5 |
More new bugs. Very frustrating: I think all the changes I've done shouldn't
effect the kernal (where the screen is being drawn), it should all be in the VBLANK,
but it's the kernal that's messing up, when both players and the ball are
on the same line, there's noticeable screen distortion. And weird things
seem to fix it...I started putting in a huge amount of NOPS to see if would break
it worse, and actually, a large enough # seemed to make the problem go away.
Which just means I'm being totally misled and have no idea what the problem is. Today's Source / Today's Binary |
i'm a wuss -- 2004 February 3 |
So lots of people on Stella thought JoustPong's control was way too fast,
but too slow it down, I'd have to use 16-bit math with sub-pixel speed and
positioning. I think that intimidated me, and I didn't get around to it
through all of January. But when I finally sat and did it, it wasn't too
bad. Oh, and I've been getting a divorce through all of this, which is my other excuse for the delay... I still need to tweak the numbers, and I'm fudging the foor rebound and stuff, and maybe I need to figure out how to use delay stuff to make up for my two-line-kernal, but it has a lot of potential. I made a javascript tool to help with the two's complement 16 bit math...it'll help me figure out the constants for the physics much more easily. Oh, and I fixed a small bug where the landed paddles were stretching down too far, and there still seems to be a bit of that wall bug, where the ball bounces but doesn't chip off a piece of the wall when it does. And I'm still not sure about the wall thing overall. Maybe I'll keep it in as an option. Oh yeah, I used Michal Kowalski's 6502 eumulator to practice my 16 bit math programming... Today's Source / Today's Binary |
mr. fixit -- 2003 October 13 |
Took a break there...started to scare myself! Sometimes I get
a little intimidated by a difficult bug, and back down for too long...
that's kind of what happened during my year break. But here, I think I nailed the bug in short order. I tested out one theory, that somehow bricks on one side of the board were registering as hits of the other side, by clearing out one player's bricks...didn't change anything. Then I made an odd little variant of the game where the player controlled the height of the ball by pressing up or down in order to test the theory that the "which brick" math was a little off..and that indeed was the problem. The playfield collision sensor would detect the hit, but then it might try to remove a brick that was already out... Actually, that's odd...I musta thought that the problem was sometimes the ball would rebound off of blank space, but maybe not? I fixed one other bug, where the ball would show up on the right side before registering as a hit on the left side. Also, I thought I had some kernal bug where lines were showing up on the walls, but that seems to have gone away or been a figment of my imagination as well. In other good news, today's art is a first pass at cart art by Dave Exton...I love how it looks like the paddle is going "back, back, way back..." (though I believe Dave is British, so he probably didn't have those words in mind, exactly.) I like it a lot, though I'm asking him to consider move the "alien bill production" down to the lower left. Today's Source / Today's Binary |
poorlords alpha ahoy -- 2003 September 21 |
So, I finally started to bring things together enough to
get a feel for what the "Poorlords" would feel like...now you have
a protective wall behind you. Unfortunately, things are still glitchy,
with the playfield kernal showing some crud when the players are on
the same line, and then there's some weird thing where it just bounces
out of the left player's goal. Not positive what I think of it yet...
also it might be different once the "wall patching" routine is in.
Still, I'm wondering if it woulda been better to work up multiball or and maybe the pterodactyl first. But I can always add 'em later, provided I ahve the space. Oh, and a prototype of joustpong was shown off by AtariAge at OKGE. Today's Source / Today's Binary |
title screen thrills -- 2003 September 16 |
So after a lot of updates that improved the guts but made
it look a bit worse, I decided to try the opposite, and make a
new prettier title screen, and I added a top and bottom border
to the game itself.
(After looking at a
lot of other 2600 games, I
realized that while the type of graphics I use for the title
requires wide pixels (only 40 across for the entire screen)
they can be as short as a scanline, an interesting style.)
I think the new screen looks really good...
even better on a real tv.
Today's Source / Today's Binary |
still an assembly retard -- 2003 September 15 |
So I spent a long time tonight making my humble program
look even more crappy! I've learned some horizontal positioning
tricks, so now I don't need those bumpers on the side to tell when
I scored. So I ditched 'em...and the game looks a lot worse, the side
barriers gave the board some character. But I'll need to repurpose
those "bumpers" as walls to be destroyed in my "Poorlords" scheme, so-
despite appearances-I am making progress here.
That's not how I know that I'm still an assembly retard, though...I'm an assembly retard because it takes hours to debug a simple "greater than"/"less than" set of comparisons...I need to stop assuming I know this stuff and just keep cribbing from other parts in the code. Today's Source / Today's Binary |
mini me! -- 2003 September 11 |
I made a 1000 bytes of ROM (inside a 4K shell) version of
JoustPong (took out all the 2 player stuff) to enter it into
the 1K category of the 2003 Minigame Competition.
Not much else to report besides that, except I made the following writeup for JoustPong's Alpha Version
display at the Oklahoma Gaming Exhibition by
AtariAge. "The future of gaming can be summed up in two words -- Pong and Joust." ...with these prophetic words on rec.games.video.classic, "Otter" planted the seeds for the game you see before you now. JoustPong, at its core, is an oldschool Pong Deathmatch... but with a "Flap" button. Each player flaps furiously to prevent the opponent from getting a ball past and scoring a point--first to 10 points win. The current game is classic JoustPong...you can play another human, or take on all the AI might of your Atari 2600. The final game should add other interesting gameplay modes, including "Poorlords", where you have to guard your wall...but if you're up in points, you can add bricks back in! Multiball and the return of Pterry are also possibilities, along with improved graphics and sound. Today's Source / Today's Binary |
how not to be an idiot -- 2003 September 10 |
I'm kind of a moron. I wasn't having so much trouble because of
timing issues...my screen was going crazy because I was resetting
the X register for use for memory offsetting while still trying to use it
to count how many scanlines I have left...duhrrrr!
So I have a kernal that should be able to do "Poorlords"...this wacky macrame looking demo is a proof of concept that I can change the playfield every 4 scanlines. Also, I switched the Atari "Fuji" logo on the front page to switch between two graphics really quickly...the effect works out pretty well I think, though I may go ahead and fiddle with the actual graphic some more. Today's Source / Today's Binary BONUS DOWNLOADS! The Tower of Fuji, a few experiments in how best to draw the symbol Today's Source / Today's Binary |
getting there -- 2003 September 9 |
Yet another advance where the insides are better, but
you wouldn't know by looking at it. I got most of what I
need for the "poorlords" scheme I want (where players knock
a row of bricks behind the other player)...now I just need
to figure out how to make it work with my kernal.
Today's Source / Today's Binary |
plugged in -- 2003 September 8 |
Heh, hi to everyone who linked here from
NewMoanYeah.com's writeup.
Definitive progress this evening, but subtle...I switched all the graphics in the main game kernal to use a variation on Thomas Jentzsch's (as explained by Dennis Debro) infamous "skipdraw" routine. It gives me a bunch more time to play with, at least 30 cycles, always a good thing. Today's Source / Today's Binary |
curse you indirect indexed addressing! curse you to heck! -- 2003 September 7 |
Feh. Trying to tighten up my kernal...I know I'm setting the
left player more or less right because I can see it when I
put the graphic in the score...besides that I don't know what's going on.
Today's Source / Today's Binary |
Manic, Depressive, Manic, Depressive -- 2003 September 4 |
Oy. I'm in a kinda weird place right now.
They came up with some interesting gameplay ideas on stella list, involving having a "Breakout" or "Warlords" like playfield behind each player, and maybe you could "rebuild" holes in it ala "Rampart". So I'm really psyched (and getting weirdly obsessed) about that stuff, but my first attempts to start coding it are really depressing and not coming out to well. I may be getting out of my depth. The obsession is weird. During the workday I was getting really optimistic about where this could go, and eager to code, and then I get home and code and things are a real mess, and I'm really down. It's a real Manic-Depressive way to be. So today's binary is back to rebuilding. I'm trying out an idea where I can turn the playfield on and off to make blocks, though even this humble effort where both sides of the playfield are the same, and we just alternate on/off is risking turning my two line kernal into a three line kernal. Plus, my idea for making the ball rebound is broken, I think if it hits the 'top' of the block, it can tend to get stuck inside the damn thing. Other alternate games are my idea to make it more like "Polo", where players can move left and right on the screen. Another idea is to throw in the old pterodactyl from Joust...may be just flying around the middle, causing trouble 'cause the ball bounces off him. A little random element. Humbler ideas also involve having a smaller but more highrez title on the titlescreen, and maybe a little music there. Oy! In terms of improvements, I did make it so when you hit select during a game it just brings you back to the title screen without changing the game mode. Also, I rearranged this page so the newest entries were at the top, and quick start instructions. Today's Source / Today's Binary |
game on, baby, game on -- 2003 August 31 |
I learned something important tonight. It is very difficult to draw a decent Atari "Fuji" logo symbol that is 8 pixels wide or less. To the right is my best stab at it...not great, but I think it's recognizable (See the logo here if you don't know what it's supposed to represent.) Anyway, today is an important milestone; the first binary that I could potentially release and feel like it was a complete game. It starts with a title screen, the user can select 1 or 2 players with the Select Switch and see his or her choice on screen, the game plays (with sound and possible computer AI) and ends after 10 points. Of course, there's always more to be done, so here are some features I'm toying with:
Today's Source / Today's Binary |
putting it together -- 2003 August 30 |
So, I put the title screen kernal back into the main ROM,
and now Reset starts a game. I'm having trouble getting
the Select Switch code to work right...it's not wired up
to do anything, but I'm having trouble just getting it to
reliabely toggle the color of the font on the main screen.
Oh, also, I upgraded my version of DASM, and started using the "standard" macro.h (for its SLEEP macro mostly) so you'll need those two files to compile my stuff, so you might need to get those from http://www.atari2600.org/dasm. Today's Source / Today's Binary |
the name of the game -- 2003 August 29 |
Today's source and binary is a totally stand alone
program that displays JoustPong in big bold letters...
I need to merge it into the main game, hopefully I'm still
ok for ROM space and everything.
Decided I liked a "TitleCase" font better than "ALLCAPS". Today's Source / Today's Binary |
can you hear me now? -- 2003 August 28 |
Todays update: Sound! I'm not 100% happy with the sound choice,
epecially for the wingflap, fiddled with it a bit, bit it's ok.
What worries me more is this odd split-second delay...I gotta ask
Stella list if I'm missing something.
Speaking of sound...I dusted off my old 6-switch Atari and got my supercharger mojo working again, using the power of .wav files through a supercharger (old way of getting games into an atari via casettes) to see my creation on a realt TV via a real Atari...and it worked! Very satisfying. Here's an action shot of it...without the flash, you can see the action of the ball. Also, it seems like the real atari doesn't have the problem with delayed sound, so that's a relief. Today's Source / Today's Binary |
it's lookin' like a game! -- 2003 August 27 |
Incremental progress! Now the ball resets when a point is scored, and the
point is duly noted. Also, the computer player doesn't bother to flap when the ball is heading away from it...
For grins I made a todo list:
Today's Source / Today's Binary |
hacking cough -- 2003 August 25 |
Got the score display routine working...
mostly thanks to some advice from
Erik Mooney (though my first workable pass was on a scheme
devised by
Christopher Tumber, and
some of the other folk on the Stella list helped too,
like Andrew Davie who pointed out that a space character
can be a dangerous thing) Now all I need to do is actually
start registering points, and resetting the ball after.
(Add a title screen, game select (1p vs 2p) start/restart logic,
some sounds, tweak the physics, and I'm done!) (I know I'm getting way ahead of myself, and I suspect JoustPong might be my only 2600 game, but I have this idea for another game... "tank dodgeball" or "warball"--4 players w/ paddles, steering tanks. Press button to propel forward...releasing the button fires, but you can only fire if you "have the ball"...firing makes the ball "hot", it goes forward 1/3 or 1/2 the screen, then stops and becomes "cool", and any player can go pick it up. With 4 players, you have to be tricky with the player graphics. Plus, I don't have any great ideas for AI, and that would be a drawback... Ah well, a geek can dream, can't he) Today's Source / Today's Binary |
the computer thinks! -- 2003 August 24 |
Big day this Sunday....
Today's Source / Today's Binary |
the year that wasn't -- 2003 August 23 |
Wow. I let this thing go for like a year. For a while I thought maybe I should just call it quits, but I want to get back at it. And today, for the first time, it kind of looks like a game! I started adding in that playfield graphic thing I mentioned (using my own PlayerPal javascript tool for doing the math), when I ran into the same weird timing kind of issue that stopped me before, and threw me for a loop for like a year. I brought it to the Stella list, and within minutes Dennis Debro pointed out that I was refering to constants without the "#" sign before them , which meant the compiler was looking at places in memory instead of constant values. So strange that things still kinda worked despite that! So, it's still crap-tastic, I think my two line kernal is getting pretty irregular, and the ball speed is not changing when a player hits it, and nothing is being done in terms of scoring or even registering hits, but still...the ball is moving, it's bouncing off the floor and ceiling and off of the players. You can actually play it as a bit of a game. Hopefully tomorrow I can throw in the basic AI and some of that other stuff. Today's Source / Today's Binary |
stay in shape -- 2002 September 21 |
Decided I should stop puttering around and try to get the gameplay
elements going. To that end, I've removed the ability to move left and right, and have positioned the players where they go.
The extra stripes are my first thoughts about how to register scores... I was thinking I could use missiles as "goal lines" and counting on collision detection to know when a point was scored, and I was thinking that I could make the missiles black so they wouldn't show up, but I'm remembering that oh yeah, they're stuck as the same color as the players...dang. I guess my options are 1. live with 'em visible, 2. use some position tracking technique to find out when the ball has gone on the side of the screen, or 3. change the color on the fly...not much room for the last option though. Or huh...Maybe I could use the playfield graphics...hmmm. Today's Source / Today's Binary |
back in the saddle -- 2002 September 16 |
Yikes...it has been a long, long while since my last update!
So I haven't been as on the case as I would've hoped, but I finished 2600 101 a few weeks ago. I hope people find it helpful. But I've made a smidgin of headway...and man, it's harder than I thought! I replaced the happyfaces with pong bars and added a flap animation. I was getting weird results when the flap button was pressed...the players went to double height. I thought it might've been a timing issue, so I started counting cycles in a half-assed way, and yeah, I was running out of time during the scan lines. But the players were looking kind of squashed down in their "natural state" anyway (they looked better when they were stretched out 'cause of the bug) so I decided to switch to a "two line kernal". The techique works very well with the "PlayerBufferStuffer" concept, since it stops me from having to worry about the exact timing of when values are updated. (Though I did a very cheap thing to hack the timing, stuck in a random small amount of NOP Do-nothings and saw if it looked ok...) I should have plenty of time for reposition the ball as well. Haven't tested on a real Atari yet, I messed something up in revamping my PC setup and now it's like the supercharger can't "hear" the WAV file... Today's Source / Today's Binary |
i'm on tv! -- 2002 July 14 |
I'm still not making real programming headway (the whole time thing)
and I think I might like to get a bit of closure on
2600 101
(including a "2600 Cookbook" section) But, some exciting
things have happened...I got my supercharger and 2600 setup
setup, (including highjacking our VCR, so I don't constantly
have to rejigger the cable connection) so now I can download
the stuff I write to a real live 2600! One of the first things
I tried was this example of the 2600 worshipping me, a hack
of "How To Draw a Playfield". But, of course, my real JoustPong code didn't work. Rats! But I got some help on the Stella list, and now it works great. Two different types of typos: I thought DASM could support defining constants, and I forgot a # sign before a constant... I don't know why it worked on the Z26 and StellaX emulators... below is the corrected code. Today's Source / Today's Binary |
sidetracked -- 2002 July 10 |
Got kind of distracted by a heavy schedule at work and that whole wedding feature for the loveblender thing. And for some reason I got inspired to add some more to 2600 101, my "Atari 2600 programming for dummies" style guide. Finally made the edits some people had suggested, and added a new page. Probably could've added a few more (moving a dot with a joystick, moving a sprite, which would probably come close to finishing the thing) but I felt lazy. I'm pretty happy with how the whole thing has come out so far, though, already I've heard of a few newbies using it. |
and then there were two -- 2002 July 6 |
And now the goofy red happy face has a friend, the goofy
purple happy face. (These are just place holders until I
decide if I'm going with the joust-like players or the pong-like
paddles with wings.)
Mostly it was just a matter of cut and pasting code, but it was a bit fiddly. Odd little bug has the "landing" of one on the "floor" moving the other one...it's actually a cute little subtle effect, so I'm not going to try to hard to remove it. The way that they both have horizontal movement is just until I bother to remove it...untill then, it's kind of fun to play with. Maybe it should be joust soccer, not pong? Maybe for the next iteration... Today's Source / Today's Binary |
the story so far -- 2002 July 5 |
In the tradition of SCSIcide and Death Derby,
I've decided to make an online journal page for my own homebrew effort for the Atari 2600, JoustPong. I'd date the start of this programming effort to
June 22,
when I posted my first note to the Stella list. This will be the fourth version of JoustPong. The first was for Windows (written in Visual Basic). Then came one for the PalmPilot, but written in a strange little language called "PocketC". Then came a version in version in Java, with graphics borrowed from the arcade version of Joust. The idea originally came from a discussion in the newsgroup rec.games.video.classic, specifically this post by "Otter". I think it's one of the most interesting games that can played with a single button per player (though this past May I made a series of games were both the display and control was just a single grey form pushbutton.) Also, it's been wonderfully easy to make good but not perfect AI for the second player, I learned that trick early on. (The computer hits 'flap' whenever its beneath the ball, so it tends to overshoot a bit...but it's a strategy that beats many humans, at least 'til they get the hang of it.) Progress has been ok so far. I'm a newbie to both the 2600 and the 6507 chip that powers it. As I've been learning, I've been trying to put my hard-won experience in the form of a tutorial, 2600 101, to give other newbies a helping hand. That's the latest screenshot to the right... it doesn't look like much, but it has a nice kinetic joust-like feel to it. I'm not happy with the bounce routine, but the border collision detection was a hassle, since I was using the wrong post-compare operators. You can play the latest BIN with StellaX, which is what I'm using for development. It doesn't work very with PCAE for some reason, I'm gonna ask about that. Today's Source / Today's Binary |