Mappy sucks I hate my life
							parent
							
								
									2d8714ed26
								
							
						
					
					
						commit
						84527304ae
					
				@ -0,0 +1,255 @@
 | 
				
			|||||||
 | 
					A5 Allegro, version 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DISCLAIMER:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This software and associated files are provided 'as is'
 | 
				
			||||||
 | 
					with no warranty or guarantees of any kind, you use them
 | 
				
			||||||
 | 
					at your own risk and in doing so agree that the author is
 | 
				
			||||||
 | 
					in no way liable and cannot be held responsible for any
 | 
				
			||||||
 | 
					loss of time/data/hair or anything else that may occur
 | 
				
			||||||
 | 
					either directly or indirectly from the use of this
 | 
				
			||||||
 | 
					software or associated files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					==============================================
 | 
				
			||||||
 | 
					http://www.tilemap.co.uk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Allegro 5 converted by Neil Walker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					C++ notes: MappyAL will work fine with C++, but the file 'mappyal.c'
 | 
				
			||||||
 | 
					must be compiled as 'C'. With MSVC there is no problem as it uses
 | 
				
			||||||
 | 
					the filename extension (.c/.cpp) to determine how to compile, but
 | 
				
			||||||
 | 
					IDE's like DevC++ and VIDE don't do this with C++ projects, so 
 | 
				
			||||||
 | 
					instead of adding mappyal.c to your list of sourcefiles (like with 
 | 
				
			||||||
 | 
					MSVC) be sure you have mappyal.o by manually compiling with:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gcc mappy_A5.c -O2 -Wall -c -o mappy_A5.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					then adding mappy_A5.o to the compiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please report any bugs!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Function reference:
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					IMPORTANT: You must have initialised allegro first. See the demo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Quick list:
 | 
				
			||||||
 | 
					MAPS
 | 
				
			||||||
 | 
					  MapLoad : load a map from file
 | 
				
			||||||
 | 
					  MapDecode : load a map from memory
 | 
				
			||||||
 | 
					  MapFreeMem : frees up all memory. must be called on exit
 | 
				
			||||||
 | 
					  MapMakeParallaxBitmap : make a parallax bitmap for the map
 | 
				
			||||||
 | 
					  MapChangeLayer : change map layer. mappy supports 8 different layers
 | 
				
			||||||
 | 
					  MapUpdateAnims: update map animations
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					DRAWING:
 | 
				
			||||||
 | 
					  MapDrawBG : draw the background tile from the current map layer
 | 
				
			||||||
 | 
					  MapDrawFG : draw foreground tiles (layer 1,2,3) from the current map layer
 | 
				
			||||||
 | 
					  MapDrawParallax: draw the parallax layer (call this first before BG and FG!)
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					BLOCKS/TILES:
 | 
				
			||||||
 | 
					  MapGetBlock/MapGetBlockInPixels: get a block/tile from a given location
 | 
				
			||||||
 | 
					  MapSetBlock/MapSetBlockInPixels: set a block at a given position to be a new block type
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					OTHER STUFF
 | 
				
			||||||
 | 
					  MapRestore: regenerate bitmaps (in case of loss through video switching in windows)
 | 
				
			||||||
 | 
					  MapLoadMAR: load a .mar file (cut-down map file)
 | 
				
			||||||
 | 
					  MapDrawRow: row by row drawing, needed for isometric
 | 
				
			||||||
 | 
					  MapGetXOffset/MapGetYOffset: handy for translating pixel to block co-ordinates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int MapLoad (char * mapname, int converttoalpha);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mapname: filename, e.g. "test.fmp"
 | 
				
			||||||
 | 
					converttoalpha: if 8bpp then 'magic pink' or index 0 will be converted to alpha
 | 
				
			||||||
 | 
					                if any other resolution then black or 'magic pink' will be converted to alpha
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					Uses allegro file functions so physfs is supported.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Default uses default allegro bitmaps, i.e. video. If the call fails you need to set new bitmaps to MEMORY then load
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The array abmTiles is available and points to each tile graphic, 
 | 
				
			||||||
 | 
					eg. if you want to get at the third BITMAP, use abmTiles[2]. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					int MapDecode (unsigned char * mapmempt,int converttoalpha);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Same as MapLoad, but loads from an area of memory containing an FMP file.
 | 
				
			||||||
 | 
					(Useful if your maps are stored compressed, just uncompress to memory and
 | 
				
			||||||
 | 
					call MapDecode).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapRestore (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Restores the graphics to video bitmaps in hardware rendering.
 | 
				
			||||||
 | 
					Useful in Windows that loses video memory on app switching.
 | 
				
			||||||
 | 
					However A5 attempts to recover these for you so the function may not be that useful
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapFreeMem (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When you've had enough of the map, this frees all the memory mappypb
 | 
				
			||||||
 | 
					has used.MapLoad and MapDecode call this so no need if loading a new map.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					int MapLoadMAR (char * filename, int layer);
 | 
				
			||||||
 | 
					int MapDecodeMAR (unsigned char * marmemory, int layer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Loads a .MAR file into a specified layer. Decode does it from memory, 
 | 
				
			||||||
 | 
					you can dealloc that memory afterwards. If you called MapGenerateYLookup,
 | 
				
			||||||
 | 
					call it again after this function. Returns -1 on error, 0 on success.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAR files are like FMP map files but without the graphics, animation, etc.
 | 
				
			||||||
 | 
					i.e. they are simple boxed arrays storing tile numbers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapDrawBG (int mapxo, int mapyo, int mapx, int mapy,
 | 
				
			||||||
 | 
						int mapw, int maph);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Draws the blocks referenced in bgoff. Will clip the map to the specified area.
 | 
				
			||||||
 | 
					Note: the normal clipping on the bitmap is ignored, so trying to draw off the
 | 
				
			||||||
 | 
					edges of a bitmap will crash your programme.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Draws to the current target bitmap, i.e. you need to set this, or just leave it alone
 | 
				
			||||||
 | 
					if using standard backbuffer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Refer to mapload for drawing of transparent areas (i.e. alpha channels)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int mapxo           offset, in pixels, from left edge of map, this is
 | 
				
			||||||
 | 
					                    the first visible column of pixels you are drawing
 | 
				
			||||||
 | 
					int mapyo           offset, in pixels, from top edge of map, this is
 | 
				
			||||||
 | 
					                    the first visible row of pixels you are drawing
 | 
				
			||||||
 | 
					int mapx            offset, in pixels, from left edge of bitmap
 | 
				
			||||||
 | 
					int mapy            offset, in pixels, from top edge of bitmap
 | 
				
			||||||
 | 
					int mapw            width of area you want to draw
 | 
				
			||||||
 | 
					int maph            height of area you want to draw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapDrawFG (int mapxo, int mapyo, int mapx, int mapy,
 | 
				
			||||||
 | 
						int mapw, int maph, int mapfg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Same as MapDrawBG, except:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int mapfg           The foreground layer you want to draw, 0, 1, or 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapDrawRow (int mapxo, int mapyo, int mapx, int mapy,
 | 
				
			||||||
 | 
						int mapw, int maph, int maprw, void (*cellcall) (int cx, int cy, int dx, int dy))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Same as MapDrawBG, except:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int maprw is the row to draw
 | 
				
			||||||
 | 
					cellcall is a callback function for each cell, pass NULL if you are doing your
 | 
				
			||||||
 | 
					own depth sorting, or using another system
 | 
				
			||||||
 | 
					see demo for an example of this in ISOMETRIC test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					BITMAP * MapMakeParallaxBitmap (BITMAP * sourcebm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Only on regular rectangular maps.
 | 
				
			||||||
 | 
					Pass a bitmap you would like to use for the parallax bitmap. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You must use this function to make the bitmap you pass to MapDrawParallax.
 | 
				
			||||||
 | 
					The source bitmap MUST be a multiple of your block size (ie if you are
 | 
				
			||||||
 | 
					using 32*32 blocks, 128*128 and 96*64 are valid, but 100*100 is not).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapDrawParallax (BITMAP * parbm, int mapxo, int mapyo, int mapx, int mapy,
 | 
				
			||||||
 | 
						int mapw, int maph);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This behaves like MapDrawBG etc, except the 'parbm' bitmap is created
 | 
				
			||||||
 | 
					with 'MapMakeParallaxBitmap' and this is tiled in the transparent
 | 
				
			||||||
 | 
					regions of the map. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is more efficient than drawing the whole screen as it only draws
 | 
				
			||||||
 | 
					in areas not obscured by higher layers, there is minimal overdraw
 | 
				
			||||||
 | 
					(pixels aren't overwritten by higher layers where possible).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					int MapChangeLayer (int)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This changes to a different map layer, returns -1 if failed, or the new
 | 
				
			||||||
 | 
					layer number if success. See mpgame.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					int MapGetXOffset (int x, int y)
 | 
				
			||||||
 | 
					int MapGetYOffset (int x, int y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These functions are handy for translating a pixel coordinate to block
 | 
				
			||||||
 | 
					coordinates, especially for non-rectangular blocks (see mousecrd.c).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					BLKSTR * MapGetBlockInPixels (int x, int y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a BLKSTR pointer, useful for collision detection and examining a
 | 
				
			||||||
 | 
					blockstructure. This is more useful on non-rectangular maps as it is pixel
 | 
				
			||||||
 | 
					perfect.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					BLKSTR * MapGetBlock (int x, int y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a BLKSTR pointer, useful for collision detection and examining a
 | 
				
			||||||
 | 
					blockstructure. Note: the x and y paramaters are the offset from the left
 | 
				
			||||||
 | 
					and top of the map in _BLOCKS_ NOT pixels. See mpgame.c for an example.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapSetBlockInPixels (int x, int y, int strvalue)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The x and y paramaters are the offset from the left and top of the map
 | 
				
			||||||
 | 
					in pixels. If strvalue is positive, the cell is set to that block structure.
 | 
				
			||||||
 | 
					If strvalue is negative the cell is set to that anim structure-1 (ie if
 | 
				
			||||||
 | 
					you want to put anim 3 in, strvalue would be -4).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapSetBlock (int x, int y, int strvalue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The x and y paramaters are the offset from the left and top of the map
 | 
				
			||||||
 | 
					in _BLOCKS_ NOT pixels. See mpgame.c for an example. If strvalue is
 | 
				
			||||||
 | 
					positive, the cell is set to that block structure. If strvalue is
 | 
				
			||||||
 | 
					negative the cell is set to that anim structure-1 (ie if you want to
 | 
				
			||||||
 | 
					put anim 3 in, strvalue would be -4).
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					int MapGenerateYLookup (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is now called for you on MapLoad and is not required, however for an explanation:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It will generate a lookup table that _may_ slightly speed up the functions
 | 
				
			||||||
 | 
					MapGetBlock and MapSetBlock, and allows you to use the maparraypt. If you
 | 
				
			||||||
 | 
					use this, you _must_ use MapChangeLayer if you want to swap between layers.
 | 
				
			||||||
 | 
					Another advantage is you can access block or anim offsets simply with:
 | 
				
			||||||
 | 
					maparraypt[y][x];
 | 
				
			||||||
 | 
					Where x is the offset from the left in _BLOCKS_, and y is the offset from
 | 
				
			||||||
 | 
					the top in _BLOCKS_. Note you can get the actual block structure with the
 | 
				
			||||||
 | 
					functions MapGetBlock and MapSetBlock.
 | 
				
			||||||
 | 
					The memory allocated is freed when either MapFreeMem is called, or another
 | 
				
			||||||
 | 
					map is loaded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					int MapGetBlockID (int blid, int usernum)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					returns the number of the first block that matches 'blid' in the field 
 | 
				
			||||||
 | 
					specified with usernum (1 to 7, user1 to user7). If no match, returns -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapInitAnims (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Call to reset the animated blocks to their defaults
 | 
				
			||||||
 | 
					Called on loading of a map for you
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					void MapUpdateAnims (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Animation control. Call from your game loop, moves blocks to next anim
 | 
				
			||||||
 | 
					Animations are set up in the map editor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Don't forget to look at the example source code, I've documented them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Version Changes:
 | 
				
			||||||
 | 
					================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version 1.
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| 
		 After Width: | Height: | Size: 13 KiB  | 
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
					Loading…
					
					
				
		Reference in New Issue