Jump to content
IGNORED

Herding Cats (RGPC)


InfernalKeith

Recommended Posts

Okay, I know this thread will be a letdown at the moment, as I don't have any photos yet. But I was able yesterday to finally tear into a significant chunk of the game code, and I can actually see a possibility of finishing it before the end of the world, so I'm excited and I wanna start the thread now. :)

 

I'll take some pix tonight, although since I'm using a real TI, they'll be much lower quality than an emulator screen-grab.

 

The concept of Herding Cats is simple: you can't herd cats. That's why it's a cliche.

 

In each level of Herding Cats, you find yourself confronted with a screen full of randomly wandering little black cats, and your goal is to get as many as possible into a large red exit before the time runs out. But you can't tell the cats what to do. So what to do?

 

Adding to your misery: on some levels, there are holes in the board, through which a cat will fall and never be seen again. Walls will occasionally pop up, which can both help and hinder your cause. And on some levels, cats who collide with a wall, or with each other, will unceremoniously blow up.

 

However, you can "stop the music" at any point and employ one of the following fifteen tools, each of which costs you a varying amount of points:

 

- exit expand: makes the exit 2x as big, thus making it more likely a cat will wander in

- double exit expand: makes the exit 4x bigger

- exit move: move the exit anywhere on the screen

- catnip magnet: make the cats much more likely to go toward a certain point on the screen

- cat repellent: the opposite effect as the catnip magnet

- turn back time: effectively gives you 100 more 'cycles' to achieve your goal

- bump the table: cats fall toward one side or the other

- catdozer: moves across the screen from left to right, "scooping up" any cats it encounters and pushing them toward the edge

- build walls: block off certain areas, one square at a time, to keep cats from wandering off

- cat rapture: bring all dead cats back to life

- cat-a-pult: create a small area that, if a cat steps on it, "bounces" the cat across the screen

- cut the table: removes half the table, creating less empty space for the cats to wander off into

- cat-a-port: randomly teleport all cats on screen to a different location

- cat bookie: score extra points for each cat through the exit

- fill hole/destroy wall: does just what it says

 

If you can get enough cats into the exit by the end of the level, you can move on to the next one. If, somehow, you save ALL the cats, you get a huge bonus.

 

I am programming Herding Cats in Extended BASIC on an expanded TI 99/4A system (32K). After toying with the idea of loading each level from disk, I am creating version 1.0 to be one self-contained program.

 

My biggest concern right now is speed: I'm trying to keep the code as simple and tight as possible in the main game loop so that it doesn't take too long to determine where each cat will move, if it's stepped into a hole or the exit, etc. Graphically, the game will be simple, but I will jazz it up with an intro screen if memory permits.

 

I'll post screen photos and some pix of my notes later. After getting to really roll up my sleeves and do some coding last night, finally, I'm very enthused about it, and I think it's going to come together quickly.

 

Keith

Link to comment
Share on other sites

Sometimes99er.... You have some kind of super-secret invisible, top security clearance programming computer, don't you? I mean, the fonts (which I'm jealous of) the pixel manipulation... Sh** man. =) The rest of us are just "jerkin off" (pardon my language) =) Keith, the premise of this game is very intriguing... I'm looking forward to seeing some demo code I can paste into Classic99. =)

Link to comment
Share on other sites

Sometimes99er.... You have some kind of super-secret invisible, top security clearance programming computer, don't you? I mean, the fonts (which I'm jealous of) the pixel manipulation... Sh** man. =) The rest of us are just "jerkin off" (pardon my language) =) Keith, the premise of this game is very intriguing... I'm looking forward to seeing some demo code I can paste into Classic99. =)

 

Whoa!!

 

I obvioualy didn't get photos done yet, but I did work literally till I passed out last night. The main game loop is nearly done. Cats are now actually roaming the screen, falling down holes, and (very) occasionally finding their way out the exit. Tonight I start adding in all the player manipulations. My worry for tonight is that adding the extra checks for the catnip and cat repellent (increasing the probability a cat will or won't go one way) will slow down the main game loop, which pacing-wise is pretty much perfect right now, and performs a lot better than I expected out of XB.

Link to comment
Share on other sites

Sometimes99er.... You have some kind of super-secret invisible, top security clearance programming computer, don't you? I mean, the fonts (which I'm jealous of) the pixel manipulation... Sh** man. =) The rest of us are just "jerkin off" (pardon my language) =)

Nah, it’s typically like when you know how, then there’s nothing to it. Also it’s a matter of taste. I’m glad you like it, but then someone else might think it’s crap. It was done in 5 minutes, and then it’s just a graphic mockup - bringing it alive on the TI is something else ...

 

Cats are now actually roaming the screen, falling down holes, and (very) occasionally finding their way out the exit.

Sounds marvellous !

 

:)

Link to comment
Share on other sites

Cats are now actually roaming the screen, falling down holes, and (very) occasionally finding their way out the exit.

Sounds marvellous !

 

:)

 

 

I'm definitely making a lot of dumb mistakes due to being rusty at programming, too... little things, like in the main game loop, if the cat in question has already left the playfield, it increments the loop and goes on to the next one without doing anything else. But the number of 'moves' shouldn't increase, because no one moved on the screen in that time. I ran it and saw the clock ticking up and up with no cats moving. Oops.

 

I will say, my organizational skills have never been better. I used to write code when I was a kid and a week later, I'd go back to it and have no idea what the hell I'd just done. Keeping notes, using subroutines, and having the code flow somewhat logically -- who'd a thunk it? :)

Link to comment
Share on other sites

OK, I know it's not much, but here's actual photographic evidence that I'm working on a program.

 

dinernotes.jpg

 

I went out for breakfast this morning, kidless, after realizing last night that I'd made a mess of the probability portion of my main game loop.

 

Basically, if the player uses the "catnip magnet" or "cat repellent" options, I want there to be a much greater chance that each cat will toward (or away from) that point on the screen. So if either of those items are deployed, the loop vets each random movement number, and - if it clashes with the item in question, like if the cat was to move north and there is a cat repellent to the north - there's a 90% chance that the direction will be rejected and the loop will select another direction.

 

It's not a particularly difficult concept, just tedious to get right (at least the way I came up with doing it). There are eight conditions under which the "90% chance of rejection" scenario kicks in (I'm allowing diagonal moves to proceed normally, to avoid even more long IF-THEN-AND-AND statements to slow things up.. which is why the probabilty of rejection for the other four directions is so high).

 

For example:

IF the cat is to move north, and IF the device is north of the intended destination, and IF it's a repellent... it kicks out.

IF the cat is to move north, and IF the device is SOUTH of the intended destination, and IF it's a catnip magnet... it kicks out (we're "attracting" the cat south by limiting its chance to move north, away from the catnip).

 

etc, etc.

 

 

I *think* I've got this all figured out, on paper. It was nice to get away from the screen, and the internet, and other distractions, and just drink coffee and work the formulas out. It all seems a lot simpler NOW. Later tonight I'll strip out the crappy code I WAS installing to do all this, add my new solution, and let 'er rip.

 

This is probably the most cumbersome part of the whole program. Many of the "tools" the user gets to manipulate the playfield will be coded in 2-3 lines, tops. If this routine works out, a lot of the rest of the game will fall together over the weekend.

 

Real screen pix soon, I promise! :)

 

Keith

Link to comment
Share on other sites

Very cool man... I think you've got er pegged now. Perhaps rather than using all the IF THEN ELSE AND stuff, you could set up individual subprograms that deal specifically with each "tool". You might already be doing this, but if not, read on.

 

300 IF CATNIP MAGNET THEN GOSUB 1000

1000 (scan for cat "CALL POSITION(#CAT,XCAT,YCAT")) scan for tool(CALL POSITION(#TOOL,XTOOL,YTOOL))

1010 IF XCAT>XTOOL THEN CALL MOTION(#CAT,repel or attract,0)

1020 RETURN

 

 

just a thought.... You might even have something better already.

:). But if each tool has it's own subprogram, it would send to and from smoothly and quickly. Good work, can't wait for screenshots!

Edited by Opry99er
Link to comment
Share on other sites

I can't use CALL MOTION, CALL POSITION, etc because these are all graphic characters, not sprites. There are actually no sprites being used in the game right now, though I may utilize them for an animation when a cat hits the "cat-a-pult."

 

Many of the tools will be things done while the action is stopped -- moving the exit, "bumping the table," etc. Only the repellent and the cat magnet are conditions which will affect the cats' movement in each cycle of the game, once they're activated. I actually feel a little weird about the fact that those two tools DO influence the cats' otherwise random movement -- the whole idea of the game being that you CAN'T tell the cats what to do. But without them, I think the game would be TOO random and would end up frustrating. As it is, there will still be plenty of chances for cats to veer off in unexpected and dangerous directions - even these tools won't be absolute behavior changers. (It'd be easier to program if they were!)

 

 

 

 

 

Very cool man... I think you've got er pegged now. Perhaps rather than using all the IF THEN ELSE AND stuff, you could set up individual subprograms that deal specifically with each "tool". You might already be doing this, but if not, read on.

 

300 IF CATNIP MAGNET THEN GOSUB 1000

1000 (scan for cat "CALL POSITION(#CAT,XCAT,YCAT")) scan for tool(CALL POSITION(#TOOL,XTOOL,YTOOL))

1010 IF XCAT>XTOOL THEN CALL MOTION(#CAT,repel or attract,0)

1020 RETURN

 

 

just a thought.... You might even have something better already.

:). But if each tool has it's own subprogram, it would send to and from smoothly and quickly. Good work, can't wait for screenshots!

Link to comment
Share on other sites

I can't use CALL MOTION, CALL POSITION, etc because these are all graphic characters, not sprites. There are actually no sprites being used in the game right now, though I may utilize them for an animation when a cat hits the "cat-a-pult."

 

Working with graphic characters is not necessarily bad. One benefit is you don't have to worry about "invisible" cats

if you get 4 of them lined up in a row :D

 

Just out of curiosity, how many cats will there be on-screen ?

 

Keep up the good work! :cool:

Link to comment
Share on other sites

I can't use CALL MOTION, CALL POSITION, etc because these are all graphic characters, not sprites. There are actually no sprites being used in the game right now, though I may utilize them for an animation when a cat hits the "cat-a-pult."

 

Working with graphic characters is not necessarily bad. One benefit is you don't have to worry about "invisible" cats

if you get 4 of them lined up in a row :D

 

Just out of curiosity, how many cats will there be on-screen ?

 

Keep up the good work! :cool:

 

I figured the game doesn't need sprites, so why mess with them? I have it set for up to 30 cats, which will vary by level. On some levels you'll get many and some are 'expendable,' on others, you'll get only a few and need to try to save them all to proceed.

 

All of that is subject to change, of course, once play-testing levels begins, or if I have to start conserving memory (not a problem yet).

 

On my demo level I'm using to test, I have 15 cats on screen, and they move quickly enough, though some disappear rather soon due to holes in the floor, etc. :)

Link to comment
Share on other sites

Herdcats1.jpg

 

herdcats2.jpg

 

Obviously, the title screen is just a placeholder. The main game screen will be a little nicer when it's done, too. For instance, the solid yellow block is actually a cat repellent, which I'll redefine as a real graphic when I get the game engine finished. The black squares are holes, which will be round and jagged. The big red rectangle is the exit, where you want the cats to go.

 

 

I actually, finally, for the first time, downloaded Classic99 and grabbed my XB code with my new CF7+ so I could get the screenshots. Fancy stuff!

Link to comment
Share on other sites

Great concept, awesome title name :) - will be a cool game. Is this for a old Texas Instruments TI-99 Computer? Would love to see this on the Jaguar.

 

Jaguar's a little new for my tastes. ;) I do plan to port it to several other systems as I learn more - the Commodore Vic 20 will probably be the next one. I'm going to try to work on that concurrently with my next TI game project, but as always, time is an issue. Eventually, I plan to make a small and simple enough game to port to a dozen or so classic systems, as a learning exercise to discover the strengths and weaknesses of their native BASIC dialects.

Link to comment
Share on other sites

Well, it's 4am here and I'm still working. I decided to add a more complete splash screen and begin formatting some in-game help tonight, as well as an introductory screen for each level, explaining the level's goal, how many cats were coming, if they would explode on contact with each other, if they could wrap around the edge, etc.

 

Getting to that impatient phase now, where I want the whole thing done RIGHT NOW! :) I really want to get the meat of the game engine done over the next couple days, so I have the time to properly design and play-test each of the levels. I have a feeling that some issues with gameplay may come up when I'm testing, so I want to have time to adjust point levels, etc. and not turn in an "almost right" game.

 

The encouragement and support of you guys here on this forum means a lot, and it's really a great motivator. Thanks - I appreciate it. I'm really enjoying this whole process of knocking the rust off this portion of my brain, and it's great to have some feedback, and not be working in a total vacuum.

Link to comment
Share on other sites

wow, seems you are really pushing your game development progress ;)

 

I had many times while developing my game, where I wanted everything done at once.

And then it is so nice to step back for a second and see how the pieces slowly start to fit together

and watch how the game comes to life.

 

That made quite an impression on me, and yes getting feedback sure helps :)

 

Anyway, keep up the good work!

Link to comment
Share on other sites

Okay, I crossed a bridge tonight. You still can't actually enter any commands yet during the game, or use any of your tools. But the game actually functions from beginning to end -- title screen, main game loop (with informational screens before and after gameplay), and at the end of the level, either a bump up to the next level, or a "game over" and kick back to the main title screen to start over.

 

I'm gonna clean up some of the displays and then I'll post some more screen captures, hopefully tomorrow night. After that, I gotta retest my "catnip/cat repellent" idea, the one I scrawled out on paper at the diner the other day, and then it's time to start adding the player commands one by one. The bare bones of a working game could be done by this weekend.

 

I'd do a victory dance and hoist a Guinness if it wasn't 3:30am. Tomorrow, perhaps. :)

Link to comment
Share on other sites

New developments as of 4am, January 24:

 

- "Wrap" function works, so cats can (depending on the level) walk off an edge of the screen and appear on the other side. If this function is turned off for a level, cats aren't able to move off the playfield. I toyed with having them blow up if they moved off the edge, but there's enough drama with their blowing up when they collide with each other or a wall

 

- Several of the levels are designed, and point values have undergone an adjustment based on the first rudimentary play-testing I've been able to do

 

- Ability to place cats randomly on screen for a level, or read pre-determined starting points from DATA statements

 

- character set cleanup - I used set 2 for a red graphic, then found I needed comma, exclamation point, and period. I redefined the left and right brackets and forward-slash character, respectively, for those, and use those in lieu of the 'correct' ASCII char in game screens

 

- fixed a few display bugs and cleaned up pre-level and post-level stat screens

 

 

 

Tomorrow's to-do list:

 

- add the probability functions for the catnip magnet and cat repellent functions (I thought I was going to do this tonight, but screen wrap needed done)

 

- begin coding player tool functions

- begin advanced level designs

 

 

I may actually finish this thing by the deadline! Maybe. :)

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...