void fishtank_stop() { int idx; if(!Fish_inited){ return; } // release stuff for(idx=0; idx<MAX_FISH; idx++){ if(Fish[idx].a != NULL){ anim_release_render_instance(Fish[idx].a); Fish[idx].a = NULL; } Fish[idx].swimming = 0; } if(Fish_left_anim != NULL){ anim_free(Fish_left_anim); Fish_left_anim = NULL; } if(Fish_right_anim != NULL){ anim_free(Fish_right_anim); Fish_right_anim = NULL; } Fish_inited = 0; }
void generic_anim_unload(generic_anim *ga) { if(ga->num_frames > 0) { if(ga->streaming) { if(ga->type == BM_TYPE_ANI) { anim_free(ga->ani.animation); free_anim_instance(ga->ani.instance); } if(ga->type == BM_TYPE_EFF) { if(ga->eff.next_frame >= 0) bm_release(ga->eff.next_frame); if(ga->bitmap_id >= 0) bm_release(ga->bitmap_id); } if(ga->type == BM_TYPE_PNG) { if(ga->bitmap_id >= 0) bm_release(ga->bitmap_id); if (ga->png.anim != nullptr) { delete ga->png.anim; ga->png.anim = nullptr; } } } else { //trying to release the first frame will release ALL frames bm_release(ga->first_frame); } if(ga->buffer) { bm_release(ga->bitmap_id); } } generic_anim_init(ga, NULL); }
void sprite_free(struct sprite* self) { if(self->anim) { anim_free(self->anim); } s_free(self); }
void sprite_set_anim(struct sprite* self, struct anim* anim) { if (self->anim != anim) { if(self->anim) { anim_free(self->anim); } self->anim = anim; anim_play(anim); } }