Hi, this is a devlog of The Sneaky Snakes game

September, 4th: Project's first stage completed

General

“+” = “done”, “X” = “working”, “-” = “will”

“[DEL]” = “finished all work and will not post on this topic any more”

“[SKIP]” = “skip this part since it has no changes compared to previous post”

Synopsis: The deadline was 4 days ago. The project was in CVS 6 hours before August 31st midnight by USA time. The presentation was ready even earlier. I’m absolutely happy and exhausted. Thank you Google, thank you WinLibre, thank you all my friends and mates for your help and support. Thank you KZ for the enormous number of great pictures you’ve thoroughly drawn. This is not the end of course, new stuff will be added like single-player scenario and map editor, but this large part of work is completed, and that’s an accomplishement.

In last 10 days I’ve added a spider character with AI, written and added music, found and added sfx, did some general cleanup, released a beta and a final release.

Previous TODO list:

  1. + sfx
  2. + music
  3. X precomputations
  4. + AI

See below for details

Google paperwork

So, we need the W8BEN form sent to Google by October, 31st. Hope we can do that by email (asked at mailing list today), because that would mean it’s there that very day when we get ITIN. Yet haven’t prepared documents for ITIN request. First thing to do this week.

Game dialogs

  1. + 1 PLAYER. You select difficulty for AI and start the game.
  2. + CREDITS. There’s a really nice Thank You Gallery, with credits to Google, WinLibre, Python, PyGame, SDL, Psyco and some other thank you words.
  3. X GAME OVER dialog is complete, but, while testing at work I’ve noticed that it’s not convenient that you have to start a server to play again, so I’ll add a “Play another round” button if in network mode, that will wait for the other side to confirm playing another round, and restart.
  4. - LOADING dialog will be added with some progress bar.
  5. - DEMO dialog will be added, where the user will be shown an introduction to basic game movements
  6. - DEMOS dialog will be added, with a possibility to record and playback games.

gameplay

  1. - a map editor will be available along with a choose-map dialog. Maps will be skinnable.
  2. - multi-rounds will be added. Before starting a game, you’ll choose how much rounds do you win to win the whole match.
  3. - in-game menu will be added. This means you’ll be able to pause a game and resume. This isn’t a very simple one, because this includes pausing all threads (like those looking at clouds’ activity, bounties etc.).
  4. - scenario mode for single-player will be added.
  5. - more characters will possibly be added. At least I’m thinking of making it possible to play for a spider with mouse/kbd.
  6. - AI for a snake is challanging but possible, and I’ll work on it as well.

networking

Network is fully complete, but

  1. - A simple UDP broadcasting example (in Python) was something that I really needed for my game, and could hardly find. In fact, I found a post at Google archive of comp.lang.python asking why some code works on Linux but doesn’t on Windows. That code did UDP broadcasting. I managed to change it to work properly on Windows, and have used it in my game (and tested, of course). So I’ll prepare a clean example and post it somewhere like here or here or here, or maybe all 3.

game AI

  1. + Spider character was added.
    1. + A body, consisting of a head, a tongue, 2 eyes, 6 legs and 2 spidies attached
  2. + Spidies, with their own simple enough logic of behaviour. Spidy is sort of a bullet for the spider. Now there are 2 spidies attached to 2 forward legs. When a spider decides to shoot one, he detaches it and gives it initial impulse.
  3. + Spidies’ aggressiveness. When released, spidy is not either aggressive or non-aggressive. It’s just a black ball with 2 white eyes and a small trace. Once it’s speed has become low enough, it randomly decides whether to be aggressive. If not, it always runs back to daddy-spider, to be fired again. If yes, it starts following you every time you’re in it’s scope. All coefficients (speed, scope size) are determined by difficulty level.
  4. X Spider behaviour. It would:
    1. + avoid walls
    2. - distinguish opponent’s bullets and try not to get hurt. Now I’m not sure this is necessary
    3. - avoid bad bounties. As well as this. I have really nice special uncurse procedure for a spider trapped by an apple. Anyway, it’s as simple as avoiding walls, so once I think I want that, I have that
    4. + choose the right direction to shoot at. This primarily means not shooting a spidy at self. This also means aiming at head, not snake’s gravity center, for a higher probabilty of successful shot
    5. + gather good bounties when low on health (my_hp < critcal_hp), or when opponent starts winning (his_hp - my_hp > critical_dif)
    6. + follow you when not hunting the bounties
    7. + start biting (with the tongue) when close to the opponent

[SKIP] performance improvement

  1. - still need to look at something like Pyrex to insert C code, will do after deadline since it’s fast enough already
  2. - need to add precomputations for sin, cos, arctan, sqrt
  3. - collision detection will be rewritten (now it’s done in O(n^2))

graphics

All gfx necessary for August 31st release are ready. For new features, I’ll need new gfx.

  1. - Something (anything), probably a medal, where I’ll show how much rounds a player won. (see multi-rounds feature in gameplay section)

music/sfx

  1. + SFX Thanks to www.findsounds.com and some games from PyGame website where I took sfx from.

  2. + I’ve written music for:
    1. + Dialogs
    2. + Game
    3. + GameOver dialog
  3. - Check that there’s a sound device and disable sound if not (crashes now)

[SKIP] project cleanup & documentation

  1. - An installer will be prepared for Windows
  2. - Source/exe packages will be downloadable from sf

August, 22nd: Network mode have passed it's first real-world test

General

“+” = “done”, “X” = “working”, “-” = “will”

“[DEL]” = “finished all work and will not post on this topic any more”

“[SKIP]” = “skip this part since it has no changes compared to previous post”

Synopsis: This last was very productive a week, I did a bit of cleanup, wrote a basic but sufficient VCL and finished all game dialogs using it; added UDP broadcasting to find servers on LAN, tested the game at work on a real LAN; uploaded beta to CVS.

Previous TODO list:

  1. X sfx
  2. - [SKIP] music
  3. + UDP broadcasting
  4. + intermediate dialogs
  5. X [SKIP] precomputations
  6. X AI

Google paperwork

Yes, Google did provide an ITIN supportive document, but I’m not spending a second on tax stuff. Deadline is in 9 days.

Game dialogs

Now, I’ve written a basic Visual Component Library, containing only what I really need for my dialogs:

  1. group (frame), which is a base class for all the rest
  2. dialog box
  3. text label
  4. text button
  5. option list
  6. scroll bar
  7. scrolled option list, which is a nice combination of option list and a scrollbar, obviously.

Note that “text label” and “text button” may contain pictures as well, because I have an inner format in my strings (that are passed to image_factory.rend_text()), which allows inserting pictures by their IDs.

So, with that VCL, I’ve completed:

  1. X 1 PLAYER
  2. + 2 PLAYERS (hotseat/network)
  3. + NETWORK (start/join)
  4. + START MULTIPLAYER dialog, with a list of icons for you to mark your server with one, so you can tell a friend “I’ll create a server with banana icon”, and if someone else starts a server at the same time (probably not a banana one), your friend will know where you are among those 2
  5. + JOIN MULTIPLAYER dialog, with a list of available servers
  6. X CREDITS
  7. X GAME OVER

In fact, 3 of 7 dialogs are still marked as “X” (”working”), but that’s really not at all much work:

1 PLAYER

This dialog shows you a “Sorry, this mode is not yet functional” message, because there’s still no AI (see AI section).

Once I have an AI, it will contain a list of 4 or 5 levels of difficulty to choose from, and a start button, so I have all necessary visual components to complete it quickly.

CREDITS

Now, this is really simple. I need a collage of projects that I’m grateful to, like Google and WinLibre. In fact, there will be several pages, 2 probably, first being a nice picture, second being a thank-you list. Again, my vcl is ready for that. I’ll only need to provide KZ with all logos and wait.

GAME OVER

And this is also very simple. While testing at work I’ve noticed that it’s not convenient that you have to start a server to play again, so I’ll add a “Play another round” button if in network mode, that will wait for the other side to confirm playing another round, and restart.

gameplay

  1. - a map editor will be available in later versions along with a choose-map dialog, but not by September 1st, due to large amount of other work (gladly that doesn’t contridict with my initial proposal).
  2. + supporting both devices simultaneously. When in hotseat mode, one player uses mouse, another uses kbd. When playing via network, you have both devices in your disposal, so instead of having you make a choice, I added the feature to switch between them all the time: whenever “current” device is mouse, any key stroke switches us to kbd, and vice versa.

networking

Completed the NETWORK mode. The last thing I had to was

  1. + UDP broadcasting. Before these days, I entered IPs directly in code, and tested on 2 PCs at home. Now I’ve implemented the normal way to do that, so server sits listening to any client and responds, until anybody connects to play. Not too hard to do, but a useful experience, since I couldn’t really find a complete example of this in python. I’ll add one to Pygame code repository after September 1st.

game AI

  1. X ok, I started thinking. What I have right now is a decision: no AI will control a snake, since that’s really a lot, lot, lot of work for the remaining week. It has to:
    1. distinguish walls
    2. distinguish opponent’s bullets and try not to get hurt
    3. avoid bad bounties
    4. choose the right direction to shoot at
    5. “honestly” spin around by providing apropiate motions to the snake’s head, which means:
    6. properly decide is the place is enough to spin around, and if not, move to such place
    7. release the tail in the right moment (the easy one)
    8. gather it’s bullets when out of ammo, or probably even earlier
    9. gather good bounties when low on health

Now that’s a lot of work indeed, so I had this idea: I’ll make up some other game character, with other physics and other how-to-hurt rules, other but yet fun and exciting. Currently I’m thinking of a spider, which will bite you when touching, and, to get close enough (it’s a lot slower), it will spit it’s web-balls, and if a ball collides with any part of your body, it pulls it until it hits a wall, and sticks that ball to the wall until you’re biten by a spider or 10 seconds pass. I’ll think of more details, but this is the picture.

[SKIP] performance improvement

  1. - still need to look at something like Pyrex to insert C code, will do after deadline since it’s fast enough already
  2. - need to add precomputations for sin, cos, arctan, sqrt

[SKIP] graphics

  1. X drawings
    KZ is doing a really great job, she’s overloaded my mailbox with new and new pics. Adding them is usually not much work for me, but sometimes it is, like the health flower, or the HOWTO dialog(instructions).

    She’ll certainly draw all I need before September 1st.

music/sfx

  1. + added a sound_factory class and have it up and running.
  2. + added several sounds just to verify it works
  3. + added sfx to game dialogs (on_mouse_move and on_click)
  4. X game event sounds are still on TODO list. I’ve found a lot of nice sounds that would fit, and KZ is helping me with this to, so no problem here
  5. + Woody Woodpecker laugh rules!
  6. - will work on music after SFX

Just in case you need a nice link for a sounds’ search engine, certainly try this one out.

project cleanup & documentation

Not much, but I did some cleanup in images - removed a lot of old/useless stuff, so folders are more in order now. Still no commenting/documentation. After September 1st, when the time comes, I’m going to blanch it heavily, and will try to make a game-writing-for-begginers tutorial out of it (and post it to PyGame tutorials section). Just another item to my SoC treasury: sharing IT experience is a lot of pleasure.

testing

I’ve did a bit of testing with people. All the 2 months of development, I only played with myself, and once my friend Slava has brought his PC to me, I could test the network mode, but still alone. A week ago another friend Slava came to play the beta, and that was a lot of fun, and several minor bugs where found and fixed. And today I took the game to work, and tried it on a real LAN; well, my home 2-PCs-LAN is also a real one, but you know what I mean. And it all worked, what can I say - I’m happy! :D

August, 18th: Uploaded beta 0.0

Hi everyone!

There, I’ve finally put my new code to CVS. Still (almost) nobody has ever run it anywhere else but on my PC, so I’d like to know if it works fine. Please give it a try:

SnakeGame\Source\game.py

I’d also ask you to try to compile and run from exe, if you’re on Windows:

SnakeGame\Source\make_exe.py,
SnakeGame\Source\dist\game.exe

I would happily spend some hours to have a nice page like Noemi’s Final Touch does, but I *really* can’t do things like that now - we can present our projects after September 1st, can’t we? Of course, I’ll write *some* thing, but not much at all.

Below you can find the readme.txt file from CVS\SnakeGame:

[RUNNING CURRENT VERSION]

To run you should have Python, PyGame and Psyco (desirably) installed.

I use Python 2.3 with appropriate PyGame & Psyco:

Just double-click on Source/game.py

[HOWTO PLAY]

I hope the gameplay is obvious enough. Just some notes:

  • to shoot, you should spin around and release your current tail, which will fly and hurt the opponent
  • please look at HOWTO dialog (in game) to see mouse and kbd controls
  • both mouse and kbd are a bit tricky to get used to, especially mouse IMHO. Try moving it slowly around wide enough circles
  • you can attach the tail (the spiky one) only to your current last element
  • you can attach any other ball of your’s anywhere
  • some part of your body cannot be fired (now it’s the head and 4 next balls)
  • banana = hp+10, cake = hp+25, apple = you’ll see ;)
  • your tail isn’t damaged by opponent’s bullets
[FEEDBACK]

The game isn’t ready yet, especially in respect of clean code, so please don’t bother commenting on that. I would appreciate any constructive comments at accepted@ukr.net, please.

I’ll also ask Mr. Coudert to set up a wiki page with downloadable win exe.

August, 15th: current status

General

“+” = “done”, “X” = “working”, “-” = “will”

“[DEL]” = “finished all work and will not post on this topic any more”

“[SKIP]” = “skip this part since it has no changes compared to previous post”

Synopsis: SoC is amazing! With all the sleepness nights, I’m feeling superb and am full of excitement about this all. Since my last post, which is 1 month old now, I only had a 2-days holiday celebrating my birthday, all the rest was spent as sleep-eat-code-eat-code-sleep. “code” here stands for not only typing of course, that’s walking around my appartment, pondering over another problem, or reading stuff at Python list.

Shortly, most of parts are completed, and the 2 really more-or-less big left are sounds and AI. KZ is being a lot helpful and productive with graphics, and it really makes difference to replace my ugly MSPaint-drawn stuff with what we have now.

I am as near as possible to providing a demo for beta testing. Still no server-detection, so network mode will be disabled, although I’ve tested it and it seems to be absolutely fine.

TODO:

  1. sfx
  2. music
  3. UDP broadcasting
  4. intermediate dialogs
  5. precomputations
  6. AI

All this is described below in detail, together with what’s been done within last 30 days.

Google paperwork

No changes here. I’m pretty happy that we all have to wait for the ITIN supporting document from Google, as this makes it possible to spend not a minute on that.

Game dialogs

Below is a list of by-September-1st version’s dialogs. “*” means I have it nicely drawn and functional, “+” means I have it functional but plain-text-styled, “-” means it’s a TODO item. Sublists show items of those dialogs.

* Main menu:
  1. 1 PLAYER
  2. 2 PLAYERS
  3. Sound: ON(/OFF)
  4. HOWTO PLAY
  5. CREDITS
  6. EXIT
- 1 PLAYER
  1. DIFFICULTY: 0 (..9)
  2. START
  3. BACK
+ 2 PLAYERS
  1. HOTSEAT
  2. NETWORK
  3. BACK
+ NETWORK
  1. START GAME
  2. JOIN GAME
  3. BACK
* HOWTO PLAY
+ CREDITS
+ GAME OVER

gameplay

  1. + keyboard
    is supported. It’s much more complicated to make a convenient kbd control than mouse one, for obvious reasons - just take a look at the game. I spent quite some time thinking how to make it better, asked several friends of mine to do some testing and comment on kbd control; currently it seems to be nearly as good as mouse. The main idea here was that pressing “left” and “right” doesn’t simply turn your head, but it moves clockwise/counterclockwise around the snake’s center of mass, which makes it possible to spin around by holding one single key.

  2. - a map editor
    will be available in later versions along with a choose-map dialog, but not by September 1st, due to large amount of other work (gladly that doesn’t contridict with my initial proposal).

    Currently I have 1 map, in fact there’s a map class that has an apply() method, doing all level initializations, placing walls etc. It’s written clearly enough to add your own map - all walls, player’s snakes and clouds (that produce bounties) have their coordinates set from plain tuples from map object. It’s a 1 hour job to move this stuff to a file, and to load when necessary. Plus, there’s a dictionary that set’s skin stuff. For instance, have 10 backgrounds, 5 toolbars, and 3 clouds - these are different pictures for same objects. A map has to choose it skin, and it’s done in one dictionary assignment.

    To sum up, architecture is nice enough to easily split skins and map, and make it possible to choose both.

  3. + inserting bullets
    Certainly the best improvement done to gameplay is that you can stick your balls to yourself anyplace. Then you “fire”, your last ball is detached. If you fire several times, your body becomes short, you’re faster but can’t really shoot, so you need your ammo back. In first versions, you cloud glue any of your balls to your last one only, and that was really hard (still is). Now that holds only for gluing the initial tail (it’s larger thus more powerful, and you need to put some effort to take it back). The rest of balls can be inserted anywhere.

  4. + clouds & bounties
    Clouds are actually new. A map defines several clouds. Those are randomly flying around the game field, dropping bounties at random time. 3 seconds before a bounty will drop, it says “3”, “2”, “1”. If there’s a wall below, the bounty won’t drop until there are no walls. Once dropped (released from the cloud), a bounty is a regular ball unless someone touches them. It preserves the speed of it’s parent cloud on the moment of releasing, and doesn’t really lose it (because I’ve sot very low friction to bounties)

    Each bounty has a lifetime. If nobody ate it during it’s lifetime, it fades.

    Each bounty has an effect. There’ll be 3 bounties in September1st version. 2 good, and 1 bad. Good are +10hp and +25hp. 1 bad (and I’m proud of this a lot) is: some of your balls gets nailed. This means you need to release all the rest and itself to be able to move, and while you’re doing this, the opponent isn’t asleep. If fact, it’s not stuck, but slows you a LOT.

  5. + clouds’ capturing
    I had this problem: what if there’s some part of each player under the bounty that’s being dropped? Should they both be affected, none of them, or random one? I had the idea of cloud capturing.

    Initially, no player is under any clouds (map requirement). Once a snake’s part runs below the cloud, it captures that cloud, and there’s a green or blue border around the cloud (p1 is blue, p2 is green). If another snake runs under a captured cloud, it doesn’t capture it unless it pushes current cloud’s “owner” away.

    If a bounty is released from a captured cloud, the owner get’s stuff.

  6. + timescale
    I’ve written “a rapid game for 2” in project description. Playing has shown that it’s really really tough to make a good shot; you have to spin around and release your tail in that very moment so it hits the target, flying under proper angle.

    Once I’ve played with a mate via Internet, and we had around 3fps; game becomee much slower, and it became reasonably easy to send the ball where you want it to go.

    So, I’ve added a timescale value, made sure I process everything properly in that respect, and set 0.5 as default.

  7. + health flower
    I was surprised to see a flower in Ethan’s game, because even before the proposal was ready, KZ and I had this idea: 100hp overall, so we draw a flower with a stem, a leaf on it, and 8 petals.

    stem + leaf + 8 petals = 10, so 10hp per each.

    Well, I’ve added that flower thing, with pieces nicely fading away (and appearing, when you’ve ate a hp+ bounty).

  8. + arrow showing shot’s direction

    It’s not so easy at all to aim precisely and release your bullet properly, so I though I’d add a small arrow bouncing around your last ball showing where it flies if you release. I though that’s a great idea, well it wasn’t. If I draw a small arrow, it doesn’t help aiming at all, and if I draw a big one, it jumps like crazy and only messes everything. So that will remain a silent and hidden functionality

networking

Now, *that* was even more a challenge than I’ve expected. Thanks to my friend Slava who brought his PC to me, I could test everything. It took a lot of time surfing the web and reading all around. I read a huge lot of stuff on the topic, like description of Quake3 networking model, the FAQ’s and related topics at flipcode.com and gamedev.net, python manual, Python&Pyro mailing lists, stuff at pygame.org (OSS networking games), proggies sent to me by people I’ve asked from (at #python and lists). I’ve added a Networking section to our Game Resources with some of the articles that where helpful.

  1. + Now, thank God, all clouds, bounties and snakes seem to be perfectly synchronized.
  2. X The only thing that I still need to work is learn UDP broadcasting to find servers around the LAN, and appropriate dialogs.

[SKIP] game AI

  1. - will need some time, heuristics research and all; will do it after other modes (network, hotseat) are ready. The most exciting and challenging part that is

performance improvement

  1. + optimized rendering by some cachings
  2. + discovered Psyco, which magically increases FPS rate at about 1.5 times
  3. - still need to look at something like Pyrex to insert C code
  4. - need to add precomputations for sin, cos, arctan, sqrt

graphics

  1. + scaling pictures
    Lame but fun enough, in first versions of the game I did’t do any scaling - just loaded pics from files. This means resizing a file on hard drive changes game physics. Moreover, this means changing initial window size also changes game physics. Now I have nice default constants, to which I scale with no respect to window/images sizes.

  2. X drawings
    KZ is doing a really great job, she’s overloaded my mailbox with new and new pics. Adding them is usually not much work for me, but sometimes it is, like the health flower, or the HOWTO dialog(instructions).

    She’ll certainly draw all I need before September 1st.

  3. + font
    KZ has drawn a nice ABC+digits pack, so I’ve replaced native PyGame text-rendering with my own

[SKIP] music/sfx

  1. X will explore free SFX resources after all functionality is ready
  2. - will work on music after SFX

[SKIP] project cleanup & documentation

I do NO commenting at the moment. The project isn’t a large one, so the main things to concentrate at are functionality and performance. Since it is an OS project, I won’t leave it dirty and uncommented online, but I’ll work on that separately, maybe even after September 1st. I could even rewrite some important parts if I see it’s necessary.

July, 15th: current status

General

“+” == “done”, “X” = “working”, “-” = “will”

“[DEL]” = “finished all work and will not post on this topic any more”

“[SKIP]” = “skip this part since it has no changes compared to previous post”

Synopsis: although I couldn’t spend as much time on SoC as I’d wish during last 2 weeks (due to some stuff at my univ + parttime job), I feel like having done quite a lot. There’s a fundament for almost everything but sfx/music currently. Physics seems to work perfectly from quality point of view (although slow enough). Almost done with gameplay. I’m intending to make significant changes to game rules and objectives (see gameplay section). I hope Mr. Coudert won’t object

TODO:

  1. Next thing to work on is keyboard support, so I can fully test 2-players game;
  2. then I’ll add all bounties and make them work so hotseat mode is fully functional
  3. after that I’ll start learning how to make it a LAN game
  4. Meanwhile KZ is drawing emotions for Snake portrait (that will be present in toolbar above the game field)

Google paperwork

No changes here, except for resending papers to Google ITIN seems to be depressively complex to obtain, so I’ll start working on that in September, if Google is ok with that

  1. + sent a signed Agreement form
  2. + got a confirmation of student status in English and sent
  3. + asked not to pay me $500 before I’m done with ITIN and all
  4. + resent my docs on July, 13th since I had received no confirmation yet
  5. - look through W-7 form (and 8233), prepare all docs and get an ITIN
  6. - fill W8-BEN and send to Google
  7. - ask Google if I can start getting ITIN in September

[DEL] sf

Please feel free to download the source code and give it a try

  1. + setup the whole bunch of programs, both at home and at work. Using CVS extensively.

GUI

Everything is ready now to add any game modes and logics of interaction between them. What I call a game mode is simply a dialog. Those are: main menu, gameover dialog, practice mode (game itself), 2 players hotseat game etc. Each mode has a session() method, which handles all user interaction unless another mode needs to take focus. This is all managed by game_mode_manager instance.

  1. + decided which menus/dialogs/modes will be available, and how they will interact with user.
  2. - all menus/dialogs have non-graphical interface with no mouse recognition (items are numbered and you press corresponding digit-key to choose it). Lame enough, but I’m not working on nice-designed GUI part unless I have all functionality done
  3. X soon will add 2 dialogs for network game: for client and for server
  4. + a toolbar is already implemented as a storage of icon groups, so I’ll easily add animated snakes’ portraits and other pics there when I have those

[DEL] physics

I already have everything I may need for all game events; another thing is it works slow enough, but that goes to performance improvement section

gameplay

  1. X game rules now seem to be in near-to-final state. I’ve made significant changes to game rules, and the reason was that once I was done with physics, I’ve realised that *crawling* is not even half-fun as *twisting*. You start moving your mouse around, and see how the snakie gets stretched under the centrifugal force, so you naturally want to hit everything with your tail. Not very easy though, because your tail may only appear where your head was a half-spin ago. So, I had this idea to add nailing! You swing your body round and round, and the hold the left button down, and your head gets nailed to the floor (i.e. bites it), so your tail continues motion inertially, and hits the target. So, with all the fun of twisting, I spent a lot of time thinking how to change the rules in best way. I had the idea of picking up bullets with your tail and throwing them by twisting and releasing, but that would lead to loosing the fun of having a snake of various sizes during the game: in case of picking bullets you’ll only have n or n+1 (armed). And finally I had the idea of allowing to gather any number of bullets. In fact, let the whole body of the snake be bullets (except for first several pure-body elements), and so, you, for instance start with 12-disks snake, and right-click to release any number of your last-elements. Any time you want, you pick up a bullet by simply touching it with your current tail. In current implementation you may also go hand-fighting instead of shooting bullets, and in fact, hand-fighting appears more effective. I’ll either disable it or add coefficients so you make much more use of shooting, to have the fun-way of fighting make sence
  2. + all snake’s functionality is now available for mouse:
    1. motion has effect on head’s acceleration
    2. left click nails the head to ground
    3. right click releases last part of body
    4. touching a bullet of your color with your current tail attaches it to your body
    5. touching an opponent’s bullet with your non-tail attached elements hurts you. The faster the bullet was, the more harm it causes.
  3. X keyboard will soon be supported
  4. - I’ll write a simple map editor, which will probably not be included in gamepack
  5. - you’ll be able to choose a map from main menu
  6. - maps will be designed by KZ after she finishes all necessary graphics, or maybe during that; I also may add several maps
  7. X I’ll soon prepare a list of bounties on game field and make them all work

[SKIP] networking

  1. + decided on network communication model
  2. X need to learn Python features to work with sockets etc.

[DEL] Python, PyGame, development itself

I close this topic since it becomes spread around the rest. I’m reading Dive Into Python, experimenting with IDLE and even using python for my personal needs apart from SoC :)

[SKIP] game AI

  1. - will need some time, heuristics research and all; will do it after other modes (network, hotseat) are ready. The most exciting and challenging part that is

performance improvement

  1. - will rewrite the physics module in C
  2. + added FPS debug output, but I seem to be measuring in wrong way, since commenting out time-consuming parts isn’t reflected propely (IMHO) with FPS output. I’d welcome any help on how to do that properly
  3. - I’d also ask for some general tips on increasing performance since 15 fps on my PC is not too much for a game like this, especially when Quake3 runs at 320fps :(. Quake isn’t written in scriptable language, but nevertheless...
  4. - thanks to Joseph’s post, the part where he mentions that collisions are performed in n^2 time. I also do that in n^2, and could optimize that a lot. In fact, that’s why I started outputting FPS. But I’ve commented collision-checking out at all, and increased only from 14 fps to 16, which is too small an improvement, so I hope it’s just me measuring fps in a wrong way. I’d like to see exactly how much I gain from that, though, so please help me with fps

graphics

KZ has started the main menu picture, as well as some animation for the toolbar icons. She’s doing great IMO, and I’ll soon be adding some of her graphics to the game instead of mine ms-paint-drawn circles :)

The list of graphics that I need isn’t a complete one yet:

  1. game field:
    1. background
    2. walls
    3. bounties
  2. animated toolbar:
    1. head portrait emotions
    2. tail portrait emotions
    3. controls icons (mouse, keybd, network, AI)
    4. first-aid chest indicating how much health you have
  3. dialogs:
    1. a large snake for the main menu
    2. animated buttons for that menu
    3. some other snake (or something completely different) for supporting dialogs (options, start server etc.)
    4. a collage of WinLibre, Google, PyGame logos, license name and credits for the “credits” dialog

As for coding part - I have an image_factory class responsible for loading, storing, rotating and resizing images, and IMHO it’s organized fine enough. Ready to accept all graphics, so, contraty to what I’ve said before, I’ll be adding pics on-the-spot, not after I’m done with all the rest.

[SKIP] music/sfx

  1. - will explore free SFX resources after all functionality is ready
  2. - will work on music after SFX

[SKIP] project cleanup & documentation

I do NO commenting at the moment. The project isn’t a large one, so the main things to concentrate at are functionality and performance. Since it is an OS project, I won’t leave it dirty and uncommented online, but I’ll work on that separately, maybe even after September 1st. I could even rewrite some important parts if I see it’s necessary. Moreover, all project modules are now stored in same dir, that will be fixed as well, of course.

July, 4th: current status

“+” == “done”, “X” = “working”, “-” = “will”

Synopsis: I already know almost everything from Python and Pygame that I need for the project. I continue learning both though. Project architecture is almost fully designed and partly implemented, I’m working on physics mostly now.

Google paperwork

  1. + sent a signed Agreement form
  2. + got a confirmation of student status in English and sent
  3. + asked not to pay me $500 before I’m done with ITIN and all
  4. - look through W-7 form, prepare all docs and get an ITIN
  5. - fill W8-BEN and send to Google

I haven’t done anything at all from what deals with taxes, because I’m ok with getting the money even in winter, now I just can’t afford wasting time on that. I believe I’ll slightly start working on ITIN near middle of July, maybe even later

sf

  1. X reading introduction to CVS@SF

GUI

  1. + decided which menus/dialogs/modes will be available, and how will they interact with user. This structure may be changed during development though, so I’ll come up with a description a bit later
  2. - all menus/dialogs have non-graphical interface with no mouse recognition (items are numbered and you press corresponding digit-key to choose it). Lame enough, but I’m not working on nice-designed GUI part unless I have all functionality done

physics

  1. + 70% done already
  2. X all I have to add is connections between parts of snake’s body (user’s control, friction and elasticity are working already)

networking

  1. + decided on network communication model
  2. - need to learn Python features to work with sockets etc.

Python, PyGame, development itself

  1. + Dive Into Python book is really a great one, thanks again, Joseph. I’ve read first 5 chapters and that’s enough for most parts of my project. I’m going to finish all 18, of course.
  2. + designed a class diagram
  3. + started coding. by now I have a demo game where you control a circle just the way you’ll control the snake’s head in future. there are some more balls on field to test physics on those. In a week or a bit later I’ll start using SF’s CVS and will make this demo available

game AI

  1. - will need some time, heuristics research and all; will do it after other modes (network, hotseat) are ready. The most exciting and challenging part that is

performance improvement

  1. - will be done after all functionality is ready. I’ll rewrite the physics module in C

graphics

  1. - in nearest future I’ll prepare a complete list of drawings I need so KZ will be able to start working on those.
  2. - textures will be added after all functionality is ready
  3. - nice hand-drawn menus and dialogs will be added after all functionality is ready

music/sfx

  1. - will explore free SFX resources after all functionality is ready
  2. - will work on music after SFX

project cleanup & documentation

I do NO commenting at the moment. The project isn’t a large one, so the main things to concentrate at are functionality and performance. Since it is an OS project, I won’t leave it dirty and uncommented online, but I’ll work on that separately, maybe even after September 1st. I could even rewrite some important parts if I see it’s necessary. Moreover, all project modules are now stored in same dir, that will be fixed as well, of course.

June, 29th: TODO

Those I’m working on right now are marked with “>”, the very next are ">>"

>> a much more detailed TODO/deadlines list for the whole project
> Google paperwork
>> SF - getting acquainted
>> Python - getting acquainted
> PyGame - getting acquainted
>> game GUI model/structure
game physics
network communication handling model
> project's classes diagram
coding by itself
graphics
music
SFX
 
game/snake_log.txt · Last modified: 2011/07/21 14:29
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki