1 /* 2 * Abuse - dark 2D side-scrolling platform game 3 * Copyright (c) 1995 Crack dot Com 4 * Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net> 5 * 6 * This software was released into the Public Domain. As with most public 7 * domain software, no warranty is made or implied by Crack dot Com, by 8 * Jonathan Clark, or by Sam Hocevar. 9 */ 10 11 #ifndef __TIMAGE_HPP__ 12 #define __TIMAGE_HPP__ 13 14 #include "image.h" 15 #include "palette.h" 16 #include "filter.h" 17 18 /* Data is stored in the following format: 19 * 20 * uint8_t skip; // transparent pixel count 21 * uint8_t size; // solid pixel count 22 * uint8_t data[size]; // solid pixel values 23 * ... 24 * (no scan line wraps allowed, there can be a last skip value) 25 */ 26 27 class TransImage 28 { 29 public: 30 TransImage(image *im, char const *name); 31 ~TransImage(); 32 Size()33 inline vec2i Size() { return m_size; } Data()34 inline uint8_t *Data() { return m_data; } 35 36 image *ToImage(); 37 38 void PutImage(image *screen, vec2i pos); 39 void PutRemap(image *screen, vec2i pos, uint8_t *map); 40 void PutDoubleRemap(image *screen, vec2i pos, uint8_t *map, uint8_t *map2); 41 void PutFade(image *screen, vec2i pos, int amount, int nframes, 42 ColorFilter *f, palette *pal); 43 void PutFadeTint(image *screen, vec2i pos, int amount, int nframes, 44 uint8_t *tint, ColorFilter *f, palette *pal); 45 void PutColor(image *screen, vec2i pos, uint8_t color); 46 void PutFilled(image *screen, vec2i pos, uint8_t color); 47 void PutPredator(image *screen, vec2i pos); 48 void PutBlend(image *screen, vec2i pos, image *blend, vec2i bpos, 49 int blend_amount, ColorFilter *f, palette *pal); 50 void PutScanLine(image *screen, vec2i pos, int line); 51 52 size_t DiskUsage(); 53 54 private: 55 uint8_t *ClipToLine(image *screen, vec2i pos1, vec2i pos2, 56 vec2i &posy, int &ysteps); 57 58 enum PutMode { NORMAL, REMAP, REMAP2, FADE, FADE_TINT, COLOR, 59 FILLED, PREDATOR, BLEND, SCANLINE }; 60 template<int N> 61 void PutImageGeneric(image *dest, vec2i pos, uint8_t color, 62 image *blend, vec2i bpos, 63 uint8_t *map1, uint8_t *map2, int amount, 64 int nframes, uint8_t *tint, 65 ColorFilter *f, palette *pal); 66 67 vec2i m_size; 68 uint8_t *m_data; 69 }; 70 71 #endif 72 73