void mapper_replace_tiles(ALLEGRO_BITMAP * bp) { int i, j; T3F_ANIMATION * ap = NULL; ALLEGRO_BITMAP * newbp = NULL; ALLEGRO_STATE old_state; ALLEGRO_TRANSFORM identity; int current_tile = mapper_current_tile; al_store_state(&old_state, ALLEGRO_STATE_TARGET_BITMAP | ALLEGRO_STATE_BLENDER | ALLEGRO_STATE_TRANSFORM); al_identity_transform(&identity); al_use_transform(&identity); for(i = 0; i < al_get_bitmap_height(bp) / mapper_tile_height; i++) { for(j = 0; j < al_get_bitmap_width(bp) / mapper_tile_width; j++) { if(current_tile < mapper_tileset->tiles) { ap = t3f_create_animation(); if(ap) { newbp = al_create_bitmap(mapper_tile_width, mapper_tile_height); if(newbp) { al_set_target_bitmap(newbp); al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO); al_draw_bitmap(bp, -j * mapper_tile_width, -i * mapper_tile_height, 0); t3f_animation_add_bitmap(ap, newbp); t3f_animation_add_frame(ap, 0, 0, 0, 0, mapper_tile_width, mapper_tile_height, 0, 1, 0); t3f_destroy_animation(mapper_tileset->tile[current_tile]->ap); mapper_tileset->tile[current_tile]->ap = ap; } } current_tile++; } else { ap = t3f_create_animation(); if(ap) { newbp = al_create_bitmap(mapper_tile_width, mapper_tile_height); if(newbp) { al_set_target_bitmap(newbp); al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO); al_draw_bitmap(bp, -j * mapper_tile_width, -i * mapper_tile_height, 0); t3f_animation_add_bitmap(ap, newbp); t3f_animation_add_frame(ap, 0, 0, 0, 0, mapper_tile_width, mapper_tile_height, 0, 1, 0); t3f_add_tile(mapper_tileset, ap); } } } } } al_restore_state(&old_state); }
bool initialize(int argc, char * argv[]) { const char * val; ALLEGRO_BITMAP * bp; process_arguments(argc, argv); if(!t3f_initialize(640, 480, 60.0, "The Devil", logic, render, T3F_DEFAULT | T3F_USE_MOUSE)) { return false; } t3f_3d_set_projection(&projection, 0, 0, 640, 480, 320, 240); t3f_3d_select_projection(&projection); animation[ANIMATION_PLAYER] = t3f_load_animation_from_bitmap("data/player.png"); if(!animation[ANIMATION_PLAYER]) { return false; } animation[ANIMATION_DEMON] = t3f_load_animation_from_bitmap("data/demon.png"); if(!animation[ANIMATION_DEMON]) { return false; } animation[ANIMATION_ARCHDEMON] = t3f_load_animation_from_bitmap("data/archdemon.png"); if(!animation[ANIMATION_ARCHDEMON]) { return false; } animation[ANIMATION_PLAYER_SHOT] = t3f_load_animation_from_bitmap("data/player_shot.png"); if(!animation[ANIMATION_PLAYER_SHOT]) { return false; } animation[ANIMATION_ENEMY_SHOT] = t3f_load_animation_from_bitmap("data/enemy_shot.png"); if(!animation[ANIMATION_ENEMY_SHOT]) { return false; } animation[ANIMATION_SPIRIT] = t3f_create_animation(); if(!animation[ANIMATION_SPIRIT]) { return false; } bp = al_load_bitmap("data/spirit0.png"); t3f_animation_add_bitmap(animation[ANIMATION_SPIRIT], bp); t3f_animation_add_frame(animation[ANIMATION_SPIRIT], 0, 0, 0, 0, al_get_bitmap_width(bp), al_get_bitmap_height(bp), 0, 5); bp = al_load_bitmap("data/spirit1.png"); t3f_animation_add_bitmap(animation[ANIMATION_SPIRIT], bp); t3f_animation_add_frame(animation[ANIMATION_SPIRIT], 1, 0, 0, 0, al_get_bitmap_width(bp), al_get_bitmap_height(bp), 0, 5); bp = al_load_bitmap("data/spirit2.png"); t3f_animation_add_bitmap(animation[ANIMATION_SPIRIT], bp); t3f_animation_add_frame(animation[ANIMATION_SPIRIT], 2, 0, 0, 0, al_get_bitmap_width(bp), al_get_bitmap_height(bp), 0, 5); animation[ANIMATION_LOGO] = t3f_load_animation_from_bitmap("data/logo.png"); if(!animation[ANIMATION_LOGO]) { return false; } animation[ANIMATION_TITLE] = t3f_load_animation_from_bitmap("data/title_logo.png"); if(!animation[ANIMATION_TITLE]) { return false; } sprite_sheet = al_create_bitmap(512, 512); if(!sprite_sheet) { return false; } t3f_start_sprite_sheet(sprite_sheet, T3F_SPRITE_SHEET_TYPE_SPRITES); t3f_add_animation_to_sprite_sheet(animation[ANIMATION_PLAYER]); t3f_add_animation_to_sprite_sheet(animation[ANIMATION_DEMON]); t3f_add_animation_to_sprite_sheet(animation[ANIMATION_ARCHDEMON]); t3f_add_animation_to_sprite_sheet(animation[ANIMATION_PLAYER_SHOT]); t3f_add_animation_to_sprite_sheet(animation[ANIMATION_ENEMY_SHOT]); t3f_add_animation_to_sprite_sheet(animation[ANIMATION_SPIRIT]); t3f_finish_sprite_sheet(); font[FONT_GAME] = al_load_bitmap_font("data/default_font.png"); if(!font[FONT_GAME]) { return false; } sample[SAMPLE_GAME_OVER] = al_load_sample("data/game_over.ogg"); if(!sample[SAMPLE_GAME_OVER]) { return false; } sample[SAMPLE_LEVEL_UP] = al_load_sample("data/level_up.ogg"); if(!sample[SAMPLE_LEVEL_UP]) { return false; } sample[SAMPLE_MAX_MULTIPLIER] = al_load_sample("data/max_multiplier.ogg"); if(!sample[SAMPLE_MAX_MULTIPLIER]) { return false; } sample[SAMPLE_HIGH_SCORE] = al_load_sample("data/high_score.ogg"); if(!sample[SAMPLE_HIGH_SCORE]) { return false; } sample[SAMPLE_TWIN_SHOT] = al_load_sample("data/twin_shot.ogg"); if(!sample[SAMPLE_TWIN_SHOT]) { return false; } sample[SAMPLE_TRIPLE_SHOT] = al_load_sample("data/triple_shot.ogg"); if(!sample[SAMPLE_TRIPLE_SHOT]) { return false; } sample[SAMPLE_POWERUP] = al_load_sample("data/powerup.ogg"); if(!sample[SAMPLE_POWERUP]) { return false; } sample[SAMPLE_SHOOT] = al_load_sample("data/shoot.ogg"); if(!sample[SAMPLE_SHOOT]) { return false; } sample[SAMPLE_HIT] = al_load_sample("data/hit.ogg"); if(!sample[SAMPLE_HIT]) { return false; } sample[SAMPLE_DIE] = al_load_sample("data/die.ogg"); if(!sample[SAMPLE_DIE]) { return false; } sample[SAMPLE_MULTIPLIER] = al_load_sample("data/multiplier.ogg"); if(!sample[SAMPLE_MULTIPLIER]) { return false; } cinema = load_cinema("data/intro.cin", 0); if(!cinema) { return false; } ending_cinema = load_cinema("data/ending.cin", 0); if(!ending_cinema) { return false; } level_color[0] = al_map_rgba(131, 0, 0, 255); level_color[1] = al_map_rgba(131, 22, 0, 255); level_color[2] = al_map_rgba(131, 46, 0, 255); level_color[3] = al_map_rgba(131, 68, 0, 255); level_color[4] = al_map_rgba(131, 99, 0, 255); level_color[5] = al_map_rgba(131, 126, 0, 255); level_color[6] = al_map_rgba(101, 131, 0, 255); level_color[7] = al_map_rgba(77, 131, 0, 255); level_color[8] = al_map_rgba(0, 131, 73, 255); level_color[9] = al_map_rgba(0, 105, 131, 255); level_color[10] = al_map_rgba(0, 135, 254, 255); hyperlink_set_driver(NULL); val = al_get_config_value(t3f_config, "Save Data", "High Score"); if(val) { high_score = atoi(val); } t3f_play_music("data/title.xm", 0.0, 0.0); state = STATE_LOGO; return true; }