int d_sprite_addanim(d_sprite_t *p_) { sprite_t *p; p = p_; MAGICCHECK(p, -1); p->nanims++; p->nframes = d_memory_resize(p->nframes, p->nanims*sizeof(word)); p->nframes[p->nanims-1] = 0; p->frames = d_memory_resize(p->frames, p->nanims*sizeof(d_image_t **)); p->frames[p->nanims-1] = NULL; return p->nanims-1; }
d_rasterdescription_t *d_raster_getmodes(int *nmodes) { d_rasterdescription_t *modes; vga_modeinfo *minf; int i; modes = NULL; *nmodes = 0; for(i = 1; i < vga_lastmodenumber(); i++) { if(vga_hasmode(i) == 0) continue; (*nmodes)++; modes = d_memory_resize(modes, *nmodes*sizeof(d_rasterdescription_t)); if(modes == NULL) { d_error_push("d_raster_getmodes: d_memory_resize failed."); return NULL; } minf = vga_getmodeinfo(i); modes[*nmodes-1].w = minf->width; modes[*nmodes-1].h = minf->height; modes[*nmodes-1].bpp = log2(minf->colors); modes[*nmodes-1].alpha = 0; if(modes[*nmodes-1].bpp == 8) modes[*nmodes-1].paletted = true; else modes[*nmodes-1].paletted = false; modes[*nmodes-1].cspace = RGB; } return modes; }
void d_sprite_addframe(d_sprite_t *p_, int anim, d_image_t *frame) { sprite_t *p; p = p_; MAGICCHECK(p, /* void */); if(anim >= p->nanims) { d_error_push("invalid animation."); return; } p->nframes[anim]++; p->frames[anim] = d_memory_resize(p->frames[anim], p->nframes[anim]*sizeof(d_image_t *)); p->frames[anim][p->nframes[anim]-1] = frame; return; }
bool d_tilemap_addtileimage(d_tilemap_t *p, byte tile, d_image_t *image) { int i; if(image != NULL) if(image->desc.w != p->tiledesc.w || image->desc.h != p->tiledesc.h) return failure; if(tile >= p->ntiles) { p->tiles = d_memory_resize(p->tiles, (tile+1)*sizeof(d_image_t *)); for(i = p->ntiles; i < tile; i++) p->tiles[i] = NULL; p->ntiles = tile+1; } p->tiles[tile] = image; return success; }