Jump to content

Aaron

Members
  • Content Count

    108
  • Joined

  • Last visited

Posts posted by Aaron


  1. Hi all,

     

    Lately I've been trying to put the source to some of my old projects online and the latest is AStar. Check out AStar on GitHub.

     

    This version is different from the cartridge release. Just for fun I decided to modernize the solution finder and make a few new levels - there are 8 in the attached binaries. If anyone is interested, making your own levels shouldn't be too hard since they're just plain text files. The updated solution finder generates assembly source with an optimal move count usually within a couple seconds, which is about 10000 times faster than the version I used for the original game.

     

    Memory card support is still present in the source, but has been disabled since the levels are different and I didn't want anyone's progress on the cartridge version to get wiped out.

     

    new-level-1.png

    astar-free.zip

    • Like 9
    • Thanks 1

  2. I caught the episode with AStar a couple days ago. Glad you had some fun with it!

     

    Let me echo the comments about developer feedback though - for instance seeing AStar's status bar on someone else's TV would have been really useful when I was working on it. I really had no idea dark yellow could show up as essentially black. Rookie mistake, I guess.

    • Like 1

  3. So if both die around the same time, or the surviving player dies before the dead player respawns, then the game ends? Even in one player - which is the only way I've played it.

    Yeah, the game doesn't distinguish between human and AI players. The only exception is the special mode where the blue player is actually removed... in that it should end as soon as you die. Thanks for the review :)


  4. I have tried Fall Down on another 7800 - a brand new one, BTW ;) - and it didn't crash at the end of the game.

     

    My other question still remains - what determines if you get a continue? Sometimes I do, sometimes I don't, and I can't see why or why not. And why are there times where it seems you're about to get a continue - because the game doesn't end - but it seems you get killed again without even seeing your player? Is he emerging/respawning at or off the top of the screen?

     

    The game ends when both players have died. As long as one player is on screen, the other respawns after a fixed amount of time, like 5 seconds or so. The idea behind it was that if you get killed early on, you just get penalized a couple platforms, rather than losing the whole game and having to wait while the other player finishes.

     

    For the record, I (i.e. the author) have a 7800, and the game works fine for me...


  5. Between levels 2 and 3 is probably the largest jump in difficulty in the game. The first two levels were designed to be kind of easy, and went into the game after all the others were done.

     

    If you're still stuck, I did post a (very rough) solution finder / level editor in the homebrew forum a while back. Also if it's any consolation, level 3 is one that the program takes a really long time to solve.


  6. I'll chime in...

     

    2. AA/Homebrew Authors: What is a typical sales run for a good quality homebrew game? I heard Andrew Davie mention once that something like 450 copies of QB were sold. Is that a typical number?

     

    100 copies the first year, 20-30 copies the following years is what you can expect from a really good game. With the overall number of available homebrews constantly increasing, those numbers are actually more likely to shrink than to rise.

    That sounds about right. IIRC, Fall Down sold 60-something copies in its first few months.

     

    3. Homebrew Authors: Approximately how many hours would you say you spent developing and designing your game - including any startup time to get familiar with the tools, assembly, 2600 programming in general? I once heard it mentioned that David Crane said Pitfall took 10 minutes for the idea, but nearly 1000 hours of design, development and testing. Are we talking about 10's of hours, 100's of hours or 1000's of hours?

    As others have said, it's on the order of hundreds. I could see a really big project, say an RPG of some sort, going over 1000 if done properly. I would also think David Crane's estimate of 1000 hours is accurate, given that working in a corporate environment tends to slow a person down (e.g. from working when you don't feel like it).

     

    4. Homebrew Authors: How far do the sales of homebrews go to encouraging existing authors to work on a new game? That is, if a game sells well, are you more likely to spend your hard earned hobby time working on a new game? Or is it more a labor of love where the money back in is really not significant to the joy of seeing a game come to completion and being enjoyed?

    To be honest, I'm an attention whore, so yeah, when one of my games does well I tend to write another. Royalties are a plus, but they're not significant enough to worry over. That said, I've found developing for the Atari to be more profitable than for say, the Palm.

     

    6. General Population: Assume again that you have the ability to play a binary for a homebrew (i.e. emulation, Starpath Supercharger, CC, burn to EPROM, etc). Are you more likely to buy a homebrew game if you have the ability to play it for a bit to see if it suits you? Or would having the ability to play the game discourage you from spending money on it?

    Personally I'm in favor of freely available binaries... from a small-time developer's perspective, they increase word of mouth, if nothing else.

     

    7. General Population: Does the prospect of bug-fixed or feature-enhanced versions of games put you off buying a homebrew? That is, are you worried if you buy some hypothetical game, an Ultra, Deluxe or Platnium edition may come out in 6 months or 12 months time? Obviously back in the day major feature upgrades were probably not done (though minor bug fixes were, apparently, sometimes done) but today it seems many 2600 homebrew games will come out with a new version in a reasonably short period of time.

    Generally I think that would be irritating, though I don't actually own any of the first-edition games in question.


  7. It's kind of a pain to play games on the older model Amigas due to disk loading times. If you can get a 1200, you'll be able to install anything you want to play on the hard drive via WHDLoad. This will fix most compatibility issues as well. Well worth it if you really want to get into the system.

     

    I'd agree with others though; something like the 500 would be good for a "first look". I haven't actually used a 1000, so I can't say if it's much different in practical terms from the 500.


  8. It's been many long months with little to no work on things Atari, but I've been able to get back to AStar a little bit recently and make some updates. Nothing ground-breaking, but I've added some more levels (there's 18 now), which imo was the game's biggest deficiency.

     

    It's kind of hard to judge the difficulty of the levels, but some of the new ones should be fairly hard. I know someone at the compo suggested starting off with some easier levels without the block, which is a good idea, but I just haven't gotten around to making any :roll:

     

    Anyway, you can turn off the fade effects with the right difficulty switch, and there are now PAL versions. There's still a couple hundred bytes still left in the rom, so more features aren't really out of the question...

    astar_6Feb06.zip


  9. I still have an Amiga 500 and 1200, though the 500 never sees any use (a 1200 with some extra ram and a big hard drive makes an _excellent_ game machine).

    Anyway, if you need a joystick, the Epyx 500XJ is quite good. I've also heard you can use Genesis pads with it, though there might have been some rewiring involved. The Atari 7800 sticks work with 90% of the games I have (they don't like Psygnosis for some reason).

     

    Here's a few game recommendations off the top of my head (plus what's already been said). Most (all?) of these are freely available if you look around.

    Syndicate

    Lionheart

    Disposable Hero

    Poing (freeware)

    Hired Guns

    Black Crypt


  10. I finally got around to writing a map generator of sorts. Basically it's just my solution finder with some extra text output, so usage will seem a little strange. :roll:

     

    What you do is draw some nice ascii art like so...

    WWWWWWWWWWWWWWWW
    W....o........PW
    W..WW.W...Wo.o.W
    W.o.......oW...W
    W......o..Wo...W
    WWWWW.W........W
    W.B.W.W...W.o.WW
    W.o.W..........W
    W...o.W........W
    WWWWWWWWWWWWWWWW
    

    ...and feed it to the program, which will output some assembly source (with a solution).

     

    I still don't have it trying to find the optimal object placement or anything, but maybe I'll get to that eventually...

    asgen.zip


  11. Seems like I'm the only one having this problem, but...

     

    Stella 2.01 doesn't work at all for me. It just crashes with the typical "This program has performed an illegal operation..." error immediately on startup. This is on Win98, both with and without a file specified on the command line. I tried both versions on sourceforge (the .zip and .exe). I didn't try Stella 2.0, but the various alphas released over the summer worked fine.


  12. Pac-Man fits very well with this game, but if this goes onto a cart, won't you have to change him to something else?

    957086[/snapback]

    Shh. No one will notice. Anyway, he's non-infringing yellow pie shaped man. :roll:

     

    Actually, the main character of the game is really the yellow square from Adventure.

     

    But um, yeah, I guess you're right. If it comes down to it I could just re-use the character from Fall Down or something...


  13. Time to dredge up an old topic! :)

     

    I haven't had much time to work on this (or really do much of anything) for the past couple months, but I did manage to get some stuff done today, just in time for the compo. New in this version:

     

    music & sound effects

    new pickup graphics

    cool fade effects

    title screen

    victory screen (if you find all the optimal solutions)

    two new levels

     

    There's room for around 30 levels (no compression :(), but I don't have any kind of level editor yet, so they're not going to get made any time soon. If I do get around to writing an editor, I'll post it here for everyone to play with.

    astar_30Oct05.zip


  14. If you are talking about MS Visual C++, you are right. It is outdated and buggy. Go to www.stlport.org.

    901311[/snapback]

    I'm using MinGW, but I had no idea that stuff existed. Thanks! :)

     

    Although I must say, it was an incredible headache to get working. The syntax for creating a hashing function is freakin' strange, to say the least. And I still don't have everything installed correctly... :roll:

     

    But anyway... the important parts work, and my solution-finder runs much faster for it - all four puzzles done in under an hour (3&4 actually were under a minute).

     

    So here's a minor update to the game. The score will change color once you pass the minimum number of moves, plus the left difficulty switch works as an undo.

     

     

     

    Easily, you say?  :ponder:

    Yup. Just design a level (or let a generator generate or modify it) and let the programm run reverse until it finds the position which is most far away.

    Clever. :) I was thinking you meant computer-generate the level from scratch...

    astar_30Jul05.zip


  15. Hey Aaron,

     

    I solved a similar 8 puzzle using A* as a homework assignment once. You are correct about needing an "idea of closeness", but this needs some more explanation.

     

    An A* search consists of calculating  two values; I'll call them g and h, where g is the cost incurred so far, and h is an estimate of the remaining cost to get to the goal. In the example of a maze, the cost refers to the distance traveled, and in your application the cost would be the number of moves.

     

    The heuristic, h, has a specific requirement: it must never overestimate the remaining cost - this is needed to guarantee the optimal solution.  In finding a path through a maze, h is usually the linear distance between the current point the the goal. Obviously this is an underestimate because the distance traveled between two points can not be less than the linear distance. The safest heuristic is to let  h=0, which is what I believe Thomas suggested. Clearly it will always underestimate how many step are left, but usually it will be far from the true amount. The trick to speeding up your A* is to find a "smarter" h.

     

    So to sum up, we should try to think of a way to estimate how many moves are left at each point, without going over. If there are no better ideas, we can always use  h=0.

     

    :)

    898677[/snapback]

    I understand all that just fine, what I was referring to (not clearly, I guess) was the difficulty in creating an effective and useful "h" value. With the "path" to the solution being as convoluted as it is, even using a very accurate estimate of h, it'll stilll take a long time to reach a solution.

     

    Anyway, I've discovered I don't have quite enough computing power to go with h=0, so......

     

     

     

    Aaron, if you're still interested in A*, here's an idea for a better heuristic. If a ring is not in the same row or column as Non-Infringing-Yellow-Pie-Shaped-Man, he will need at least two moves to get to it. So all you do is take the number of those rings, double, and add the number of any rings that are in the same row/column*.  That gives you a safe lower bound for the number of remaining moves.

     

    If you want to get more sophisticated, if a ring is in the same row/column as the player but an obstacle is in between, it will take at least 3 moves to catch it.

    :)

     

    *If two or more rings are in the same row/column and in the same direction, they should only count as one.

    899433[/snapback]

     

    I did go with something sort-of similar to what you suggested:

    min(# of occupied rows, # of occupied columns) * 2 - 1

    ...since you can potentially clear all the rings in any row/column in two moves, except for the one you're currently in, which only takes one.

     

    Even so, it still takes me all day to run the thing, so I don't have the solutions yet (I screwed up the first try). :roll:

     

    A bit OT - afaik C++ STL doesn't have a hash table, can anyone point me towards a good one?

     

     

     

    Once you have a program which finds optimal solutions for a given level, you easily modify it to create levels.

     

    Especially levels which are really nasty! :evil:

    899018[/snapback]

     

    Easily, you say? :ponder:


  16. All good points.

     

    I read up on A* a little more (saw a guy using it to solve a 15-puzzle) and there still seems to be one problem - it requires some idea of closeness to the solution. The most obvious thing I guess is to count the number of rings left remaining, but this has problems since there's a lot of set-up work involved in getting them. Also I've deliberately made some of the levels so that collecting the closest ring will screw you up.

     

    But anyway... checking for duplicate states would help a lot, since there are "only" about 10 million different possibilities. Maybe a lot less actually. So now I guess I'll just have to write something and see if it works...

     

     

    Lastly... can I get an interest check on level contributions? I'm more than happy to create them all myself, but if people would actually want to do such a thing, I could maybe cook up an editor.


  17. Very nice.  It would be useful, though, if you could add some sort of 'undo' feature.  I know multi-level undo isn't likely on a stock 2600, but even a single-level undo would be very handy.

    896883[/snapback]

    No problem. :cool:

    For now reset works like you'd expect.

     

    Then cheat and write small program which finds the optimal solutions for you. Then you have the numbers. :)

    896893[/snapback]

    Any good ideas for an algorithm for that? :roll: I don't think brute force would work when dealing with 8^40-something possible moves. Maybe something with flood-fill...

     

    Coincidentally, there is a common search technique you could use called A* (A star). 8)

    896894[/snapback]

    I thought someone might notice that. :) I don't think it's really (directly) applicable here though, or maybe I'm just being stupid...

     

    Personally, I think *not* knowing the "best" solution is probably more fun for the players.

    896936[/snapback]

    See, I can understand that. It's kind of a downer when you're told up front "this is the best you can ever do".

     

    So I was thinking of instead including par scores that you could potentially beat, but then they would probably be a lot of work to figure out...


  18. I just noticed something: if I rearrage my frame-handling logic so that the least-significant four bits of the value loaded into the frame counter are an "8", I could save two bytes by sticking "sta AUDC0,x" in my audlp.  Does seem a little desperate, though.  Besides, by my tally, I've got four different sound effects in a whopping 11+8+4+4+2+2 bytes (31 total).  I'd say that's doing pretty well.

    897902[/snapback]

    Heh, ok, I didn't know you were that close to the limit. Good job optimizing. :)


  19. Solid game you have here. It does remind me of Jumpman a lot, but that's by no means a bad thing.

     

    Any chance of having realistic (i.e. parabolic) jumping? Triangle-jumping has always bothered me...


  20. Pretty good. :) It's like a "twitch" version of Missile Command.

     

    I thought it got a lot more fun after level 10 or so, which is I guess when I realized that there's no ammunition to worry about. Much carpet bombing ensued...

     

    The sound effects could be a little more satisfying though, you know? Maybe increase the volume / duration a little on every successive chain reaction.


  21. Here's an update. Added a moves counter, an icon for what you're controlling, and some more levels (the one was just hard-coded in before).

     

    I suggest using a marble/ball. That should simplify animation and save a lot of space.

    I decided to keep Pac-Man in. Or rather, Non-Infringing-Yellow-Pie-Shaped-Man. He just works too well in the role. :)

     

    A moves counter should do. Just let it count backward from the minimum number of moves.

    The problem with that is, I don't know the minimum number. :roll: There are very likely multiple ways to solve each level - just about every time I've placed a ring so far, I've found out there was an easier way to get it than what I had planned.

     

    So it counts up from zero for now. But anyway, here are my "par" counts for the levels so far: 49, 46, 39, 30. I'm sure someone can do better.

    astar_22Jul05.zip


  22. Oh goodness yes, it needs scores - that's a large wodge of the replay value right there!  In a game like this you can have a score per item, a bonus timer ticking down that gets awarded at the end of a level and a moves counter that gives a few spare to multiply by ten for a second bonus to make sure the scores aren't fixed per level.  Running out of time or moves needn't be fatal, although i'd make the timer fatal myself to add a bit of urgency to the proceedings.

    894201[/snapback]

    Ok, sorry, but I really think urgency in puzzle games is a Bad Thing. If you're looking for that sort of thing, go take the GRE or something. :)

     

    I guess a moves counter would work though...

     

    That was a fun puzzle. Nice job. It didn't take too long to solve the first level. I trust you will be adding graphics for when Pac-Man faces up or down, or will you do it Todd Frye style?

    Yeah, I'm sure that would look better, I just hadn't decided if I ought to keep Pac-Man in the game or not. But since we all know the best way to become popular is to leech off the popularity of others... :roll:

×
×
  • Create New...