{ "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 }
#define ADDON_REG_VENUS 0x40
#define ADDON_REG_INFINITE 0x80
+#define ADDON_REG_VALLEY 0x100
+
#ifdef VG_ENGINE
struct addon_type_info
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 ];
{
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 ++;
}
}
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 );
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,
{
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];
i32 superworld_list_selected,
superworld_actual_world;
+ bool selected_superworld_locked;
vg_camera superworld_cam;
v2f view_centroid;
world_link_lighting_ub( world, _shader_scene_depth.id );
mesh_bind( &world->mesh_geo );
- mesh_draw( &world->mesh_geo );
+ for( int i=0; i<world->surface_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 )
world_link_lighting_ub( world, _shader_scene_position.id );
mesh_bind( &world->mesh_geo );
- mesh_draw( &world->mesh_geo );
+ for( int i=0; i<world->surface_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[] = {