+ if( !strcmp( argv[0], "pump" ) ){
+ if( gui_new_helper( input_axis_list[k_sraxis_grab], &text ) )
+ vg_strcat( &text, "Pump" );
+ }
+ else if( !strcmp( argv[0], "flip" ) ){
+ if( gui_new_helper( input_joy_list[k_srjoystick_steer], &text ) )
+ vg_strcat( &text, "Flip" );
+ }
+ else if( !strcmp( argv[0], "ollie" ) ){
+ if( gui_new_helper( input_button_list[k_srbind_jump], &text ) )
+ vg_strcat( &text, "Ollie" );
+ }
+ else if( !strcmp( argv[0], "trick" ) ){
+ if( gui_new_helper( input_button_list[k_srbind_trick0], &text ) )
+ vg_strcat( &text, "Shuvit" );
+ if( gui_new_helper( input_button_list[k_srbind_trick1], &text ) )
+ vg_strcat( &text, "Kickflip" );
+ if( gui_new_helper( input_button_list[k_srbind_trick2], &text ) )
+ vg_strcat( &text, "Tre-Flip" );
+ }
+ else if( !strcmp( argv[0], "misc" ) ){
+ if( gui_new_helper( input_button_list[k_srbind_camera], &text ) )
+ vg_strcat( &text, "Camera" );
+ if( gui_new_helper( input_button_list[k_srbind_use], &text ) )
+ vg_strcat( &text, "Skate/Walk" );
+ }
+ else return 1;
+
+ v3_copy( localplayer.rb.co, gui.trick_co );
+ gui.active_positional_helper = 1;
+ return 0;
+ }
+ return 1;
+}
+
+static void gui_draw_icon( enum gui_icon icon, v2f co, f32 size ){
+ if( gui.icon_draw_count == vg_list_size(gui.icon_draw_buffer) )
+ return;
+
+ struct icon_call *call = &gui.icon_draw_buffer[ gui.icon_draw_count ++ ];
+
+ call->icon = icon;
+ call->location[0] = co[0] * (f32)vg.window_x;
+ call->location[1] = co[1] * (f32)vg.window_y;
+ call->location[2] = 0.0f;
+ call->location[3] = size * (f32)vg.window_x;
+
+ v4_copy( gui.cur_icon_colour, call->colour );
+ call->colour_changed = gui.colour_changed;
+ gui.colour_changed = 0;
+}
+
+static void gui_icon_setcolour( v4f colour ){
+ gui.colour_changed = 1;
+ v4_copy( colour, gui.cur_icon_colour );
+}
+
+static mdl_submesh *gui_find_icon( const char *name ){
+ mdl_mesh *mesh = mdl_find_mesh( &gui.model_icons, name );
+ if( mesh ){
+ if( mesh->submesh_count ){
+ return mdl_arritm( &gui.model_icons.submeshs, mesh->submesh_start );
+ }
+ }
+
+ return NULL;
+}
+
+static void gui_init(void){
+ font3d_load( &gui.font, "models/rs_font.mdl", vg_mem.rtmemory );
+ vg_console_reg_cmd( "gui_location", gui_location_print_ccmd, NULL );
+ vg_console_reg_cmd( "showtrick", gui_showtrick_ccmd, NULL );
+
+ /* load icons */
+ void *alloc = vg_mem.rtmemory;
+ mdl_open( &gui.model_icons, "models/rs_icons.mdl", alloc );
+ mdl_load_metadata_block( &gui.model_icons, alloc );
+
+ gui.icons[ k_gui_icon_tick ] = gui_find_icon( "icon_tick" );
+ gui.icons[ k_gui_icon_tick_2d ] = gui_find_icon( "icon_tick2d" );
+ gui.icons[ k_gui_icon_exclaim ] = gui_find_icon( "icon_exclaim" );
+ gui.icons[ k_gui_icon_exclaim_2d ] = gui_find_icon( "icon_exclaim2d" );
+ gui.icons[ k_gui_icon_board ] = gui_find_icon( "icon_board" );
+ gui.icons[ k_gui_icon_world ] = gui_find_icon( "icon_world" );
+ gui.icons[ k_gui_icon_rift ] = gui_find_icon( "icon_rift" );
+ gui.icons[ k_gui_icon_rift_run ] = gui_find_icon( "icon_rift_run" );
+ gui.icons[ k_gui_icon_rift_run_2d ] = gui_find_icon( "icon_rift_run2d" );
+ gui.icons[ k_gui_icon_friend ] = gui_find_icon( "icon_friend" );
+ gui.icons[ k_gui_icon_player ] = gui_find_icon( "icon_player" );
+ gui.icons[ k_gui_icon_rift_run_gold ] =
+ gui_find_icon("icon_rift_run_medal_gold");
+ gui.icons[ k_gui_icon_rift_run_silver]=
+ gui_find_icon("icon_rift_run_medal_silver");
+
+ vg_linear_clear( vg_mem.scratch );
+ if( !mdl_arrcount( &gui.model_icons.textures ) )
+ vg_fatal_error( "No texture in menu file" );
+ mdl_texture *tex0 = mdl_arritm( &gui.model_icons.textures, 0 );
+ void *data = vg_linear_alloc( vg_mem.scratch, tex0->file.pack_size );
+ mdl_fread_pack_file( &gui.model_icons, &tex0->file, data );
+ vg_tex2d_load_qoi_async( data, tex0->file.pack_size,
+ VG_TEX2D_LINEAR|VG_TEX2D_CLAMP,
+ &gui.icons_texture );
+
+ mdl_async_load_glmesh( &gui.model_icons, &gui.icons_mesh, NULL );
+ mdl_close( &gui.model_icons );