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.
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Allegro" version="5.2.4.0" targetFramework="native" />
|
||||
<package id="AllegroDeps" version="1.7.0.0" targetFramework="native" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Allegro" version="5.2.4.0" targetFramework="native" />
|
||||
<package id="AllegroDeps" version="1.7.0.0" targetFramework="native" />
|
||||
</packages>
|
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