int newsroom_create(scene *scene) { newsroom_local *local = malloc(sizeof(newsroom_local)); local->news_id = rand_int(24)*2; local->screen = 0; menu_background_create(&local->news_bg, 280, 50); str_create(&local->news_str); str_create(&local->pilot1); str_create(&local->pilot2); str_create(&local->har1); str_create(&local->har2); game_player *p1 = game_state_get_player(scene->gs, 0); game_player *p2 = game_state_get_player(scene->gs, 1); int health = 0; if (p2->sp_wins > 0) { // AI won, player lost local->won = 0; health = game_player_get_score(p2)->health; } else { local->won = 1; health = game_player_get_score(p1)->health; } DEBUG("health is %d", health); if (health > 40 && local->won == 1) { local->news_id = rand_int(6)*2; } else if (local->won == 1) { local->news_id = 12+rand_int(6)*2; } else if (health < 40 && local->won == 0) { local->news_id = 38+rand_int(5)*2; } else { local->news_id = 24+rand_int(7)*2; } // XXX TODO get the real sex of pilot // XXX TODO strip spaces from the end of the pilots name // XXX TODO set winner/loser names properly newsroom_set_names(local, lang_get(20+p1->pilot_id), lang_get(20+p2->pilot_id), har_get_name(p1->har_id), har_get_name(p2->har_id), pilot_sex(p1->pilot_id), pilot_sex(p2->pilot_id)); newsroom_fixup_str(local); // Continue Dialog dialog_create(&local->continue_dialog, DIALOG_STYLE_YES_NO, "DO YOU WISH TO CONTINUE?", 72, 60); local->continue_dialog.userdata = scene; local->continue_dialog.clicked = newsroom_continue_dialog_clicked; // Set callbacks scene_set_userdata(scene, local); scene_set_input_poll_cb(scene, newsroom_input_tick); scene_set_render_overlay_cb(scene, newsroom_overlay_render); scene_set_free_cb(scene, newsroom_free); scene_set_static_tick_cb(scene, newsroom_static_tick); // Start correct music music_play(PSM_MENU); // Pick renderer video_select_renderer(VIDEO_RENDERER_HW); return 0; }
int cutscene_create(scene *scene) { cutscene_local *local = malloc(sizeof(cutscene_local)); memset(local, 0, sizeof(cutscene_local)); text_defaults(&local->text_conf); local->text_conf.halign = TEXT_CENTER; local->text_conf.font = FONT_SMALL; game_player *p1 = game_state_get_player(scene->gs, 0); const char *text = ""; switch (scene->id) { case SCENE_END: music_play(PSM_END); text = lang_get(END_TEXT); local->text_x = 10; local->text_y = 5; local->text_width = 300; local->text_conf.cforeground = COLOR_YELLOW; break; case SCENE_END1: text = lang_get(END1_TEXT+p1->pilot_id); local->text_x = 10; local->text_y = 157; local->text_width = 300; local->text_conf.cforeground = COLOR_RED; // Pilot face animation *ani = &bk_get_info(&scene->bk_data, 3)->ani; object *obj = malloc(sizeof(object)); object_create(obj, scene->gs, vec2i_create(0,0), vec2f_create(0, 0)); object_set_animation(obj, ani); object_select_sprite(obj, p1->pilot_id); object_set_halt(obj, 1); game_state_add_object(scene->gs, obj, RENDER_LAYER_TOP, 0, 0); // Face effects ani = &bk_get_info(&scene->bk_data, 10+p1->pilot_id)->ani; obj = malloc(sizeof(object)); object_create(obj, scene->gs, vec2i_create(0,0), vec2f_create(0, 0)); object_set_animation(obj, ani); game_state_add_object(scene->gs, obj, RENDER_LAYER_TOP, 0, 0); break; case SCENE_END2: text = lang_get(END2_TEXT+p1->pilot_id); local->text_x = 10; local->text_y = 160; local->text_width = 300; local->text_conf.cforeground = COLOR_GREEN; break; } local->len = strlen(text)-1; local->pos = 0; local->text = malloc(strlen(text)+1); strcpy(local->text, text); local->current = local->text; char *p; if ((p = strchr(local->text, '\n'))) { // null out the byte *p = '\0'; } // Callbacks scene_set_userdata(scene, local); scene_set_free_cb(scene, cutscene_free); scene_set_input_poll_cb(scene, cutscene_input_tick); scene_set_startup_cb(scene, cutscene_startup); scene_set_render_overlay_cb(scene, cutscene_render_overlay); // Pick renderer video_select_renderer(VIDEO_RENDERER_HW); return 0; }
int melee_create(scene *scene) { char bitmap[51*36*4]; // Init local data melee_local *local = malloc(sizeof(melee_local)); memset(local, 0, sizeof(melee_local)); scene_set_userdata(scene, local); game_player *player1 = game_state_get_player(scene->gs, 0); game_player *player2 = game_state_get_player(scene->gs, 1); controller *player1_ctrl = game_player_get_ctrl(player1); controller *player2_ctrl = game_player_get_ctrl(player2); palette *mpal = video_get_base_palette(); palette_set_player_color(mpal, 0, 8, 0); palette_set_player_color(mpal, 0, 8, 1); palette_set_player_color(mpal, 0, 8, 2); video_force_pal_refresh(); memset(&bitmap, 255, 51*36*4); local->ticks = 0; local->pulsedir = 0; local->selection = 0; local->row_a = 0; local->column_a = 0; local->row_b = 0; local->column_b = 4; local->done_a = 0; local->done_b = 0; menu_background2_create(&local->feh, 90, 61); menu_background2_create(&local->bleh, 160, 43); surface_create_from_data(&local->select_hilight, SURFACE_TYPE_RGBA, 51, 36, bitmap); // set up the magic controller hooks if(player1_ctrl && player2_ctrl) { if(player1_ctrl->type == CTRL_TYPE_NETWORK) { controller_add_hook(player2_ctrl, player1_ctrl, player1_ctrl->controller_hook); } if (player2_ctrl->type == CTRL_TYPE_NETWORK) { controller_add_hook(player1_ctrl, player2_ctrl, player2_ctrl->controller_hook); } } animation *ani; sprite *spr; for(int i = 0; i < 10; i++) { ani = &bk_get_info(&scene->bk_data, 3)->ani; object_create(&local->pilots[i], scene->gs, vec2i_create(0,0), vec2f_create(0, 0)); object_set_animation(&local->pilots[i], ani); object_select_sprite(&local->pilots[i], i); ani = &bk_get_info(&scene->bk_data, 18+i)->ani; object_create(&local->har_player1[i], scene->gs, vec2i_create(110,95), vec2f_create(0, 0)); object_set_animation(&local->har_player1[i], ani); object_select_sprite(&local->har_player1[i], 0); object_set_repeat(&local->har_player1[i], 1); int row = i / 5; int col = i % 5; spr = sprite_copy(animation_get_sprite(&bk_get_info(&scene->bk_data, 1)->ani, 0)); mask_sprite(spr->data, 62*col, 42*row, 51, 36); ani = create_animation_from_single(spr, spr->pos); object_create(&local->harportraits_player1[i], scene->gs, vec2i_create(0, 0), vec2f_create(0, 0)); object_set_animation(&local->harportraits_player1[i], ani); object_select_sprite(&local->harportraits_player1[i], 0); object_set_animation_owner(&local->harportraits_player1[i], OWNER_OBJECT); if (player2->selectable) { spr = sprite_copy(animation_get_sprite(&bk_get_info(&scene->bk_data, 1)->ani, 0)); mask_sprite(spr->data, 62*col, 42*row, 51, 36); ani = create_animation_from_single(spr, spr->pos); object_create(&local->harportraits_player2[i], scene->gs, vec2i_create(0, 0), vec2f_create(0, 0)); object_set_animation(&local->harportraits_player2[i], ani); object_select_sprite(&local->harportraits_player2[i], 0); object_set_animation_owner(&local->harportraits_player2[i], OWNER_OBJECT); object_set_pal_offset(&local->harportraits_player2[i], 48); ani = &bk_get_info(&scene->bk_data, 18+i)->ani; object_create(&local->har_player2[i], scene->gs, vec2i_create(210,95), vec2f_create(0, 0)); object_set_animation(&local->har_player2[i], ani); object_select_sprite(&local->har_player2[i], 0); object_set_repeat(&local->har_player2[i], 1); object_set_direction(&local->har_player2[i], OBJECT_FACE_LEFT); object_set_pal_offset(&local->har_player2[i], 48); } } ani = &bk_get_info(&scene->bk_data, 4)->ani; object_create(&local->bigportrait1, scene->gs, vec2i_create(0,0), vec2f_create(0, 0)); object_set_animation(&local->bigportrait1, ani); object_select_sprite(&local->bigportrait1, 0); if (player2->selectable) { object_create(&local->bigportrait2, scene->gs, vec2i_create(320,0), vec2f_create(0, 0)); object_set_animation(&local->bigportrait2, ani); object_select_sprite(&local->bigportrait2, 4); object_set_direction(&local->bigportrait2, OBJECT_FACE_LEFT); } ani = &bk_get_info(&scene->bk_data, 5)->ani; object_create(&local->player2_placeholder, scene->gs, vec2i_create(0,0), vec2f_create(0, 0)); object_set_animation(&local->player2_placeholder, ani); if (player2->selectable) { object_select_sprite(&local->player2_placeholder, 0); } else { object_select_sprite(&local->player2_placeholder, 1); } spr = sprite_copy(animation_get_sprite(&bk_get_info(&scene->bk_data, 1)->ani, 0)); surface_convert_to_rgba(spr->data, video_get_pal_ref(), 0); ani = create_animation_from_single(spr, spr->pos); object_create(&local->unselected_har_portraits, scene->gs, vec2i_create(0,0), vec2f_create(0, 0)); object_set_animation(&local->unselected_har_portraits, ani); object_select_sprite(&local->unselected_har_portraits, 0); object_set_animation_owner(&local->unselected_har_portraits, OWNER_OBJECT); for(int i = 0; i < 2; i++) { local->bar_power[i] = progressbar_create(PROGRESSBAR_THEME_MELEE, PROGRESSBAR_LEFT, 50); local->bar_agility[i] = progressbar_create(PROGRESSBAR_THEME_MELEE, PROGRESSBAR_LEFT, 50); local->bar_endurance[i] = progressbar_create(PROGRESSBAR_THEME_MELEE, PROGRESSBAR_LEFT, 50); } component_layout(local->bar_power[0], 74, 12, 20*4, 8); component_layout(local->bar_agility[0], 74, 30, 20*4, 8); component_layout(local->bar_endurance[0], 74, 48, 20*4, 8); component_layout(local->bar_power[1], 320-66-local->feh.w, 12, 20*4, 8); component_layout(local->bar_agility[1], 320-66-local->feh.w, 30, 20*4, 8); component_layout(local->bar_endurance[1], 320-66-local->feh.w, 48, 20*4, 8); refresh_pilot_stats(local); // initialize nova selection cheat memset(local->har_selected, 0, sizeof(local->har_selected)); memset(local->katana_down_count, 0, sizeof(local->katana_down_count)); // Set callbacks scene_set_input_poll_cb(scene, melee_input_tick); scene_set_render_cb(scene, melee_render); scene_set_free_cb(scene, melee_free); scene_set_dynamic_tick_cb(scene, melee_tick); // Play correct music music_play(PSM_MENU); // Pick renderer video_select_renderer(VIDEO_RENDERER_HW); // All done return 0; }