From: hgn Date: Thu, 6 Mar 2025 14:14:43 +0000 (+0000) Subject: Menu world locks and fix rendering issue in depth map X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=373262996d25190c899a886dc97257c126e6160d;p=carveJwlIkooP6JGAAIwe30JlM.git Menu world locks and fix rendering issue in depth map --- diff --git a/build.c b/build.c index 20d180d..ec772ba 100644 --- a/build.c +++ b/build.c @@ -119,7 +119,7 @@ void build_game_metadata(void) { "Mt.Zero Island", "Australia", "content_skaterift/maps/mp_mtzero/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_MTZERO | ADDON_REG_PREMIUM }, { "Flat World", "...", "content_skaterift/maps/dev_flatworld/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, { "Heaven", "...", "content_skaterift/maps/dev_heaven/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, - { "Valley", "Cambodia", "content_skaterift/maps/mp_line1/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_PREMIUM }, + { "Valley", "Cambodia", "content_skaterift/maps/mp_line1/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_VALLEY | ADDON_REG_PREMIUM }, { "Training Island", "Australia", "content_skaterift/maps/dev_tutorial/addon.inf", ADDON_REG_CAMPAIGN }, { "Center Island", "Australia", "content_skaterift/maps/dev_hub/addon.inf", ADDON_REG_CAMPAIGN }, { "Downtown", "USA, Georgia", "content_skaterift/maps/mp_spawn/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_CITY | ADDON_REG_PREMIUM } diff --git a/content_skaterift/maps/mp_line1/addon.inf b/content_skaterift/maps/mp_line1/addon.inf index 0e44d05..e7d0d6c 100644 Binary files a/content_skaterift/maps/mp_line1/addon.inf and b/content_skaterift/maps/mp_line1/addon.inf differ diff --git a/content_skaterift/models/rs_superworlds.mdl b/content_skaterift/models/rs_superworlds.mdl index 71733c5..48523f9 100644 Binary files a/content_skaterift/models/rs_superworlds.mdl and b/content_skaterift/models/rs_superworlds.mdl differ diff --git a/src/addon_types.h b/src/addon_types.h index 8e0b5dc..5f50d61 100644 --- a/src/addon_types.h +++ b/src/addon_types.h @@ -22,6 +22,8 @@ enum addon_type{ #define ADDON_REG_VENUS 0x40 #define ADDON_REG_INFINITE 0x80 +#define ADDON_REG_VALLEY 0x100 + #ifdef VG_ENGINE struct addon_type_info diff --git a/src/menu.c b/src/menu.c index 89cc0b9..edb95b6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -374,8 +374,20 @@ static void menu_link_modal( const char *url ) void menu_update_world_list(void) { menu_update_world_filter(); - menu.world_list_total_count = addon_count( k_addon_type_world, - menu.world_list_whitelist, menu.world_list_blacklist ); + world_map.selected_superworld_locked = 0; + if( world_map.superworld_list_selected == k_superworld_infinite ) world_map.selected_superworld_locked = 1; + if( world_map.superworld_list_selected == k_superworld_venus_moon ) + { + world_map.selected_superworld_locked = !_skaterift_script_check_unlocked( k_escript_script_id_ch4s3 ); + } + + if( world_map.selected_superworld_locked ) + { + menu.world_list_total_count = 0; + menu.world_list_display_count = 0; + } + + menu.world_list_total_count = addon_count( k_addon_type_world, menu.world_list_whitelist, menu.world_list_blacklist ); menu.world_list_display_count = 0; i32 *selected_world_index = &menu.world_list_selected_index[ world_map.superworld_list_selected ]; @@ -402,22 +414,37 @@ void menu_update_world_list(void) { addon_reg *reg = get_addon_from_index( k_addon_type_world, world_index, menu.world_list_whitelist, menu.world_list_blacklist ); - menu.world_list_entries[ menu.world_list_display_count ] = reg; + bool unlocked = 1; - const char *name = NULL; + if( reg->flags & ADDON_REG_MTZERO ) + unlocked = _skaterift_script_check_unlocked( k_escript_script_id_ch2s1 ); + if( reg->flags & ADDON_REG_CITY ) + unlocked = _skaterift_script_check_unlocked( k_escript_script_id_ch3s1 ); + if( reg->flags & ADDON_REG_VALLEY ) + unlocked = _skaterift_script_check_unlocked( k_escript_script_id_ch4s1a ); - vg_msg msg; - vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + menu.world_list_entries[ menu.world_list_display_count ] = unlocked? reg: NULL; - if( vg_msg_seekframe( &msg, "workshop" ) ) + if( unlocked ) { - name = vg_msg_getkvstr( &msg, "title" ); - } + const char *name = NULL; + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); - if( !name ) - name = reg->alias.foldername; + if( vg_msg_seekframe( &msg, "workshop" ) ) + { + name = vg_msg_getkvstr( &msg, "title" ); + } + + if( !name ) + name = reg->alias.foldername; - menu.world_list_names[ menu.world_list_display_count ] = name; + menu.world_list_names[ menu.world_list_display_count ] = name; + } + else + { + menu.world_list_names[ menu.world_list_display_count ] = "..."; + } menu.world_list_display_count ++; } } diff --git a/src/world_map.c b/src/world_map.c index 3acda21..0a618ac 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -374,7 +374,8 @@ void render_world_map(void) glDisable( GL_CULL_FACE ); vg_camera cam, *smooth_cam = &world_map.superworld_cam; - ent_camera *cam_temp = af_arritm( &world_map.ent_camera, world_map.superworld_list_selected ); + ent_camera *cam_temp = af_arritm( &world_map.ent_camera, world_map.selected_superworld_locked? + k_superworld_max: world_map.superworld_list_selected ); ent_camera_unpack( cam_temp, &cam ); vg_camera_lerp( smooth_cam, &cam, vg.time_frame_delta * 6.0f, smooth_cam ); @@ -781,7 +782,8 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al ui_split( planet_box, k_ui_axis_h, 28, 0, planet_box_title, planet_box ); ui_fill( ctx, planet_box_title, ui_opacity( GUI_COL_DARK, 0.2f ) ); ctx->font = &vgf_default_large; - ui_text( ctx, planet_box_title, _superworld_names[world_map.superworld_list_selected], 1, + ui_text( ctx, planet_box_title, world_map.selected_superworld_locked? "Locked..": + _superworld_names[world_map.superworld_list_selected], 1, k_ui_align_middle_center, ui_colour(ctx,k_ui_yellow) ); ui_px change_w = 48, @@ -870,16 +872,25 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al { addon_reg *reg = menu.world_list_entries[i]; - bool selected = reg == menu.clicked_world_reg; + bool clickable = 1; - if( selected ) + if( reg ) { - ui_rect sel_box, _null; - ui_split( panel, k_ui_axis_h, ctx->font->sy*2, 8, sel_box, _null ); - ui_outline( ctx, sel_box, 2, ui_colour(ctx,k_ui_fg), 0 ); + bool selected = reg == menu.clicked_world_reg; + if( selected ) + { + ui_rect sel_box, _null; + ui_split( panel, k_ui_axis_h, ctx->font->sy*2, 8, sel_box, _null ); + ui_outline( ctx, sel_box, 2, ui_colour(ctx,k_ui_fg), 0 ); + } + clickable = !selected; + } + else + { + clickable = 0; } - if( menu_button( ctx, panel, R == (page_base + i), !selected, menu.world_list_names[i] ) ) + if( menu_button( ctx, panel, R == (page_base + i), clickable, menu.world_list_names[i] ) ) { menu.clicked_world_reg = reg; menu.clicked_world_name = menu.world_list_names[i]; diff --git a/src/world_map.h b/src/world_map.h index 95dd782..2b8e7bb 100644 --- a/src/world_map.h +++ b/src/world_map.h @@ -38,6 +38,7 @@ struct world_map i32 superworld_list_selected, superworld_actual_world; + bool selected_superworld_locked; vg_camera superworld_cam; v2f view_centroid; diff --git a/src/world_render.c b/src/world_render.c index 98b27e9..f9f47e9 100644 --- a/src/world_render.c +++ b/src/world_render.c @@ -1518,7 +1518,14 @@ void render_world_depth( world_instance *world, vg_camera *cam ) world_link_lighting_ub( world, _shader_scene_depth.id ); mesh_bind( &world->mesh_geo ); - mesh_draw( &world->mesh_geo ); + for( int i=0; isurface_count; i++ ) + { + struct world_surface *mat = &world->surfaces[i]; + if( mat->info.flags & k_material_flag_ghosts ) continue; + + mdl_submesh *sm = &mat->sm_geo; + mdl_draw_submesh( sm ); + } } void render_world_position( world_instance *world, vg_camera *cam ) @@ -1534,7 +1541,14 @@ void render_world_position( world_instance *world, vg_camera *cam ) world_link_lighting_ub( world, _shader_scene_position.id ); mesh_bind( &world->mesh_geo ); - mesh_draw( &world->mesh_geo ); + for( int i=0; isurface_count; i++ ) + { + struct world_surface *mat = &world->surfaces[i]; + if( mat->info.flags & k_material_flag_ghosts ) continue; + + mdl_submesh *sm = &mat->sm_geo; + mdl_draw_submesh( sm ); + } } struct ui_enum_opt skybox_setting_options[] = {