PHIL'S LEVEL RATINGS: starred levels are going in the final game .. haven't rated all levels yet N J T P + + + phil_1 easy jungle + + phil_7 easy jungle + + + tim_2.tga easy/med jungle + + + phil_2.tga easy/med jungle ? + + phil_13.tga med/hard jungle ? + + pekuja_3 medium volcano + + + tim_4 medium volcano ? ? + phil_14.tga med/hard volcano + + + phil_8.tga easy volcano-bonus + + + phil_12.tga easy/med moon + + + pekuja_1 easy/med moon + + + phil_5.tga medium moon + ? + + phil_10.tga hard moon + + + boss_1.tga hard boss ? + ? ? fydo_1.tga easy/med volcano ? ? ? tim_1.tga medium volcano + ? ? phil_9 easy/med moon ? ? tee_1 hard jungle - + - pekuja_2 medium volcano ? - - phil_3 med/hard jungle ? - phil_11 - ? phil_15 + - - phil_4 medium volcano + - - phil_6 hard volcano (replace 1st fallies w/ blocks) - - drpetter_1 hard volcano - - eugman_1 medium jungle MILLIONS OF GAME MAPS: http://www.vgmaps.com/Atlas/NES/index.htm GOD MODE: press f10 for god mode! IMPORTANT NOTES TO CODERS: - don't edit level.py !!!! ask phil to - in general, just add new tiles, and new enemies with CODES, see the HOWTO section a bit down the file PLOT OF THE GAME: The basic plot of the game is "Oh no, the evil overlord stole the galaxy crystal, we must fly up to the moon to get it!" In more concrete terms - first few levels are in a jungle. The next 3 levels are flying up an exploding volcano. The last 3 levels are going to be on the moon. HOW TO EDIT LEVELS AND TILES: - run leveledit.py - to edit levels you can use File->Preview to preview your level as you go - All levels should have a two tile thick wall around them, to bound stuff from escaping the level - run tileedit.py - to edit tiles check out the top of tileedit.py in a text editor for a list of keyboard shortcuts (same goes for leveledit, lots of nifty key shortcuts) - if you need to resize a level, backup your level, then resize it in an image editor HOW TO ORGANIZE TILES: - all tiles are to be put into tiles.tga - tile size = 16x16 - it can hold 256 tiles - the first 64 tiles should be "general purpose" tiles - the next 64 tiles should be "jungle tiles" - next 64 "volcano / lava" - next 64 "moon tiles" - we will be able to have animated tiles, but I haven't implemented that yet. to have an animated tile, just put the frames in a row for now. HOW TO NAME SPRITES: - Each sprite should be in a separate file in data/sprites named something like "player-left-0" etc.. - All sprites for a given character should be the same size so that the bounding box of the characters shape can always be the same HOWTO ADD A NEW TILE TYPE: - open up tiles.py - add a line like: 0x01 :[t_init,['solid'],tiles_basic.hit_block,1,1,1,1,], the key is the tile number .. then t_init - the easy initializer, use that unless you need something crazy groups - a list of groups that the tile can "hit" function - a function to call when the tile hits something *params - extra parameters to pass to that function some basic tile types are defined in tiles_basic. you can probably copy those and muck around some. the hit_block can do all kinds of blocks, but mainly 1,1,1,1 for solid blocks and 1,0,0,0 for platforms are the most useful parameters TILE CODING TIPS: - animation isn't implemented yet, but i'll add that soon enough, don't worry about it for now. just check out tiles_basic.py for hit methods and do the stuff in the previous section. if we need to do anything super crazy, ask phil HOWTO ADD A NEW SPRITE TYPE: - copy spikey.py or platform.py to a new enemy.py - in sprites.py add "import enemy" - modify enemy.py with your new code, etc. - edit codes.tga to have a symbol for the code for the enemy - open codes.py, and add a line to the CODES section for enemies key: [fnc,*params] key - the number of that tile in codes.tga fnc - the init function (sprites.enemy.init usually) *params - some extra params to be passed to your init function MISC SPRITE CODING NOTES: - If an object can stand on other objects, it must - have s.standing attribute = None in init - call sprite.check_standing(g,s) at the end of each loop - If an object can carry other objects, it must - set b.standing = a .. and .. - set a.carrying.append(b) when it starts to carry something - To get a sprite removed, - s.active = False and it will be garbage collected sometime soon :) deinit() will be auto-called if needed... - The sprites use names like 'sprite-01' not actual images. The images are looked up during rendering. Should make things easier to follow. - to change the image a sprite is using, s.image = 'player-right-%d'%(s.frames%5) , etc .. SOFTWARE OTHER PEOPLE MIGHT NEED: http://tortoisesvn.net/downloads http://www.python.org/ftp/python/2.5/python-2.5.msi http://www.pygame.org/ftp/pygame-1.7.1release.win32-py2.5.exe OLD JUNK THAT CAN BE IGNORED, BUT I'M LEAVING HERE FOR NOW: philhassey: code trick: still haven't heard back... pekuja: gfx? DrPetter: sfx, gfx, music? timinge: music fydo: maybe some gfx somewhere lerc: gfx, code Tee : levels? eugman: levels? PoV: levels? jolle: levels/gfx illume: gfx/levels?