CCCCCCCCCCCCCCCCCCCC
authorhgn <hgodden00@gmail.com>
Fri, 30 May 2025 22:56:30 +0000 (23:56 +0100)
committerhgn <hgodden00@gmail.com>
Fri, 30 May 2025 22:56:30 +0000 (23:56 +0100)
37 files changed:
build.c
content_skaterift/maps/dev_heaven/main.mdl
content_skaterift/maps/dev_hub/addon.inf
content_skaterift/maps/dev_hub/main.mdl
content_skaterift/maps/dev_tutorial/addon.inf
content_skaterift/maps/mp_line1/main.mdl
content_skaterift/maps/mp_mtzero/before.mdl
content_skaterift/maps/mp_mtzero/main.mdl
content_skaterift/maps/vm/addon.inf [new file with mode: 0644]
content_skaterift/maps/vm/main.mdl [new file with mode: 0644]
content_skaterift/metascenes/ch2s3a.ms
content_skaterift/metascenes/ch3s2.ms
content_skaterift/metascenes/ch3s3.ms
content_skaterift/metascenes/ch4s3.ms [new file with mode: 0644]
content_skaterift/metascenes/end.ms [new file with mode: 0644]
content_skaterift/models/fbivan.mdl [new file with mode: 0644]
content_skaterift/models/planko.mdl [new file with mode: 0644]
content_skaterift/sound/bells.ogg [new file with mode: 0644]
content_skaterift/sound/boost.ogg [new file with mode: 0644]
content_skaterift/sound/redsky.ogg [new file with mode: 0644]
content_skaterift/sound/stranded.ogg [new file with mode: 0644]
skaterift_blender/sr_metascene.py
src/addon_types.h
src/ent_npc.c
src/ent_script.c
src/ent_tornado.c
src/gameserver.c
src/menu.c
src/menu.h
src/save.c
src/scripts/boost.c [new file with mode: 0644]
src/scripts/explode.c
src/skaterift.c
src/skaterift.h
src/world_entity.c
src/world_load.c
src/world_map.c

diff --git a/build.c b/build.c
index 6735278a304a11c58b437af8c9da02d236d7feef..c2e19129f275347bab4e00856f3df1d2e028006b 100644 (file)
--- a/build.c
+++ b/build.c
@@ -120,9 +120,10 @@ void build_game_metadata(void)
       { "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_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 }
+      { "Training Island", "Australia", "content_skaterift/maps/dev_tutorial/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_VOLC },
+      { "Center Island", "Australia", "content_skaterift/maps/dev_hub/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HUB },
+      { "Downtown", "USA, Georgia", "content_skaterift/maps/mp_spawn/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_CITY | ADDON_REG_PREMIUM },
+      { "Moon", "Venus", "content_skaterift/maps/vm/addon.inf", ADDON_REG_VENUS | ADDON_REG_PREMIUM },
    };
 
    for( u32 i=0; i<VG_ARRAY_LEN(maps); i ++ )
index 320860bb75e360ad676213ca763b08517ceb50d8..f4d8b84525d5243acc4cd62bb5ab6f43f7085023 100644 (file)
Binary files a/content_skaterift/maps/dev_heaven/main.mdl and b/content_skaterift/maps/dev_heaven/main.mdl differ
index c295c1c9e060bd77ce75b5f41c15b838c628aa6c..691e963842e07d8dbb8ba6e6e354cf0385d58e94 100644 (file)
Binary files a/content_skaterift/maps/dev_hub/addon.inf and b/content_skaterift/maps/dev_hub/addon.inf differ
index 0c90209e981dce9d3cb982b89d896f3d3f9efb0d..947ad38aa21dd89ba49ea1d6dd4a0d104bfc828c 100644 (file)
Binary files a/content_skaterift/maps/dev_hub/main.mdl and b/content_skaterift/maps/dev_hub/main.mdl differ
index 9a0bf69823273aedc9f54fc7daf1f92bcf2847a3..ae4c4b992f38595262f8305b2e2370ecb2ec9532 100644 (file)
Binary files a/content_skaterift/maps/dev_tutorial/addon.inf and b/content_skaterift/maps/dev_tutorial/addon.inf differ
index dac746da05552ce17b94cbafaf6786e94d851a0c..09f951610ebfb2a70888ecf1eedeb2fd9f62d1c4 100644 (file)
Binary files a/content_skaterift/maps/mp_line1/main.mdl and b/content_skaterift/maps/mp_line1/main.mdl differ
index 23b5945bd0cb6ebff6b1240c5f5728a922f3c9ce..fbf0f7b06cfa18c6daab2ef471a313217c29f085 100644 (file)
Binary files a/content_skaterift/maps/mp_mtzero/before.mdl and b/content_skaterift/maps/mp_mtzero/before.mdl differ
index e31185df196a23e0d47a637bfa0ec141dec79f94..96041c62ee0f0158ebdb0f8a6802ab5ac8d31e0f 100644 (file)
Binary files a/content_skaterift/maps/mp_mtzero/main.mdl and b/content_skaterift/maps/mp_mtzero/main.mdl differ
diff --git a/content_skaterift/maps/vm/addon.inf b/content_skaterift/maps/vm/addon.inf
new file mode 100644 (file)
index 0000000..0aa565c
Binary files /dev/null and b/content_skaterift/maps/vm/addon.inf differ
diff --git a/content_skaterift/maps/vm/main.mdl b/content_skaterift/maps/vm/main.mdl
new file mode 100644 (file)
index 0000000..d3f3bf7
Binary files /dev/null and b/content_skaterift/maps/vm/main.mdl differ
index a1b36468aed863f87d2c2b54592ae7644f83545f..b263ea07eb7777d83818cf76094db919b543ef1b 100644 (file)
Binary files a/content_skaterift/metascenes/ch2s3a.ms and b/content_skaterift/metascenes/ch2s3a.ms differ
index 67692878313990a04d5f572d22225de696adda74..763168eae67f55ff9162b90f93ce0c7c8ddda33a 100644 (file)
Binary files a/content_skaterift/metascenes/ch3s2.ms and b/content_skaterift/metascenes/ch3s2.ms differ
index 431c73b101e0d5815dd5886bfd60cd86d57562d6..c2580ba0de6d9458016c53cb7e20e10b2fd8c07e 100644 (file)
Binary files a/content_skaterift/metascenes/ch3s3.ms and b/content_skaterift/metascenes/ch3s3.ms differ
diff --git a/content_skaterift/metascenes/ch4s3.ms b/content_skaterift/metascenes/ch4s3.ms
new file mode 100644 (file)
index 0000000..47cab06
Binary files /dev/null and b/content_skaterift/metascenes/ch4s3.ms differ
diff --git a/content_skaterift/metascenes/end.ms b/content_skaterift/metascenes/end.ms
new file mode 100644 (file)
index 0000000..5913423
Binary files /dev/null and b/content_skaterift/metascenes/end.ms differ
diff --git a/content_skaterift/models/fbivan.mdl b/content_skaterift/models/fbivan.mdl
new file mode 100644 (file)
index 0000000..d0bf387
Binary files /dev/null and b/content_skaterift/models/fbivan.mdl differ
diff --git a/content_skaterift/models/planko.mdl b/content_skaterift/models/planko.mdl
new file mode 100644 (file)
index 0000000..bb60ca8
Binary files /dev/null and b/content_skaterift/models/planko.mdl differ
diff --git a/content_skaterift/sound/bells.ogg b/content_skaterift/sound/bells.ogg
new file mode 100644 (file)
index 0000000..12bbfd2
Binary files /dev/null and b/content_skaterift/sound/bells.ogg differ
diff --git a/content_skaterift/sound/boost.ogg b/content_skaterift/sound/boost.ogg
new file mode 100644 (file)
index 0000000..772576b
Binary files /dev/null and b/content_skaterift/sound/boost.ogg differ
diff --git a/content_skaterift/sound/redsky.ogg b/content_skaterift/sound/redsky.ogg
new file mode 100644 (file)
index 0000000..2ef0c54
Binary files /dev/null and b/content_skaterift/sound/redsky.ogg differ
diff --git a/content_skaterift/sound/stranded.ogg b/content_skaterift/sound/stranded.ogg
new file mode 100644 (file)
index 0000000..3fa60d8
Binary files /dev/null and b/content_skaterift/sound/stranded.ogg differ
index ad034301f00edc4b87eb8b44a6d6dd895b192e50..a12f2c0ee9cb34bdeb5f42465c600d0fd2290b28 100644 (file)
@@ -259,8 +259,6 @@ def _metascene_comp_armature_range( obj, start, end, out_strip ):
          kf.s[0]  = sca[0]
          kf.s[1]  = sca[1]
          kf.s[2]  = sca[2]
-
-         print( kf.s[0], kf.s[1], kf.s[2] )
          
          _ms_compiler.keyframes.append(kf)
       #}
index 2b6e8bbf38b5045f34b47fc5fa6ee9a7fa7572fe..9b08870aa5b4a0752c252135a41572e58bf01bf9 100644 (file)
@@ -23,6 +23,8 @@ enum addon_type{
 #define ADDON_REG_INFINITE 0x80
 
 #define ADDON_REG_VALLEY   0x100
+#define ADDON_REG_HUB      0x200
+#define ADDON_REG_VOLC     0x400
 
 #define ADDON_REG_MOUNTED  0x10000
 #define ADDON_REG_BROKEN   0x20000
index 81d80ffc34bda96816b4ae9f92dca44d178e7abb..c08aef32d2a8d6bd56015df978547a2e85e38807 100644 (file)
@@ -553,6 +553,9 @@ entity_event_result ent_npc_event( ent_event *event )
    {
       if( AF_STR_EQ( &world->meta.af, event->pstr_recieve_event, "interact" ) )
       {
+         vg_audio_lock();
+         vg_audio_oneshot( &audio_ui[1], 1.0f, 0.0f, 0, 0 );
+         vg_audio_unlock();
          _ent_npc_speech( npc_id, af_str( &world->meta.af, npc->pstr_context_id ) );
          return k_entity_event_result_OK;
       }
@@ -581,6 +584,9 @@ entity_event_result ent_npc_event( ent_event *event )
 
       if( AF_STR_EQ( &world->meta.af, event->pstr_recieve_event, "interact" ) )
       {
+         vg_audio_lock();
+         vg_audio_oneshot( &audio_ui[1], 1.0f, 0.0f, 0, 0 );
+         vg_audio_unlock();
          _ent_npc_speech( npc_id, af_str( &world->meta.af, npc->pstr_context_id ) );
          return k_entity_event_result_OK;
       }
index c29f4cb829701e7bf8566b5a08fb2262060cec64..3ccd61e5cae9343041282956cf583328dfe80c83 100644 (file)
@@ -11,6 +11,7 @@ _ent_script;
 #include "scripts/tutorial_island.c"
 #include "scripts/board_maker.c"
 #include "scripts/l1_speed.c"
+#include "scripts/boost.c"
 
 struct ent_script_table_entry _ent_script_table[] =
 {
@@ -19,6 +20,7 @@ struct ent_script_table_entry _ent_script_table[] =
    { "board_maker", _skaterift_script_board_maker },
    { "generic", _skaterift_script_generic },
    { "l1_speed", _script_l1_speed },
+   { "boost", _script_boost },
    { NULL }
 };
 
index 920210a7739c0622b836373903b13487e8d4d0c9..cb38b8ab1edeb081cc9e715a54a3137bbd125ef2 100644 (file)
@@ -58,7 +58,7 @@ void ent_tornado_forces( v3f co, v3f cv, v3f out_a )
          if( v3_dot( dir, cv ) < 0.0f )
             v3_negate( dir, dir );
 
-         f32  s = vg_maxf(0.0f, 1.0f-dist/k_tornado_range),
+         f32  s = vg_clampf(dist/k_tornado_range, 0.0f, 1.0f),
               F0 = s*k_tornado_strength,
               F1 = s*s*k_tornado_strength;
 
index 169608744adcadbf22344a2668670376db9d413d..3782d7223f0a6233f341865349b8c66e2253509a 100644 (file)
@@ -623,7 +623,7 @@ static void gameserver_rx_200_300( SteamNetworkingMessage_t *msg )
             char exbuf[1024];
             u32 l = network_msgstring( chat->msg, msg->m_cbSize, sizeof(netmsg_chat), exbuf, sizeof(exbuf) );
             vg_info( "Rcon: %s\n", exbuf );
-            vg_execute_console_input( exbuf, 0 );
+            vg_execute_console_input( exbuf, 0, 0 );
          }
       }
    }
index 524af944832564f0d9a26570df08938efb23774b..7229a945dc54ba55cc84d7b0d3aee611dd943b32 100644 (file)
@@ -385,11 +385,11 @@ void menu_update_world_list(void)
 {
    menu_update_world_filter();
    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_infinite ) 
+      world_map.selected_superworld_locked = 1;
+
    if( world_map.superworld_list_selected == k_superworld_venus_moon )
-   {
       world_map.selected_superworld_locked = !_atom_get( k_atom_list_global, "unlock_venus" );
-   }
 
    if( world_map.selected_superworld_locked )
    {
@@ -412,7 +412,14 @@ void menu_update_world_list(void)
    }
 
    i32 max_display_count = menu.world_list_nominal_display_count;
-   if( max_display_count <= 0 ) max_display_count = 1;
+   if( max_display_count <= 0 ) 
+      max_display_count = 1;
+
+   bool unlock_mtzero = _atom_get( k_atom_list_global, "unlock_mtzero" ),
+        unlock_city   = _atom_get( k_atom_list_global, "unlock_city" ),
+        unlock_valley = _atom_get( k_atom_list_global, "unlock_valley" ),
+        unlock_venus  = _atom_get( k_atom_list_global, "unlock_venus" ),
+        completed     = _atom_get( k_atom_list_global, "winner" );
 
    u32 page_base = (*selected_world_index / max_display_count) * max_display_count;
    for( u32 i=0; i<max_display_count; i ++ )
@@ -427,32 +434,73 @@ void menu_update_world_list(void)
                                                   menu.world_list_whitelist, menu.world_list_blacklist );
          VG_ASSERT( addon_id );
          addon_reg *reg = addon_details( addon_id );
-         bool unlocked = 1;
+
+         u32 flags = 0x00;
+
+         if( reg->flags & ADDON_REG_VOLC )
+            if( unlock_mtzero )
+               flags |= MENU_WORLD_FLAG_DONE;
+
          if( reg->flags & ADDON_REG_MTZERO )
-            unlocked = _atom_get( k_atom_list_global, "unlock_mtzero" )?1:0;
+         {
+            if( unlock_mtzero )
+            {
+               if( unlock_city )
+                  flags |= MENU_WORLD_FLAG_DONE;
+            }
+            else
+               flags |= MENU_WORLD_FLAG_LOCKED;
+         }
+
          if( reg->flags & ADDON_REG_CITY )
-            unlocked = _atom_get( k_atom_list_global, "unlock_city" )?1:0;
-         if( reg->flags & ADDON_REG_VALLEY )
-            unlocked = _atom_get( k_atom_list_global, "unlock_valley" )?1:0;
+         {
+            if( unlock_city )
+            {
+               if( unlock_valley )
+                  flags |= MENU_WORLD_FLAG_DONE;
+            }
+            else
+               flags |= MENU_WORLD_FLAG_LOCKED;
+         }
 
-         menu.world_list_entries[ menu.world_list_display_count ] = unlocked? addon_id: 0;
+         if( reg->flags & ADDON_REG_VALLEY )
+         {
+            if( unlock_valley )
+            {
+               if( unlock_venus )
+                  flags |= MENU_WORLD_FLAG_DONE;
+            }
+            else
+               flags |= MENU_WORLD_FLAG_LOCKED;
+         }
 
-         if( unlocked )
+         if( reg->flags & ADDON_REG_VENUS )
          {
-            const char *name = NULL;
-            vg_msg msg;
-            vg_msg_init( &msg, reg->metadata, reg->metadata_len );
+            if( unlock_venus )
+            {
+               if( completed )
+                  flags |= MENU_WORLD_FLAG_DONE;
+            }
+            else
+               flags |= MENU_WORLD_FLAG_LOCKED;
+         }
 
-            if( vg_msg_seekframe( &msg, "workshop" ) )
-               name = vg_msg_getkvstr( &msg, "title" );
+         if( reg->flags & ADDON_REG_HUB )
+            flags |= MENU_WORLD_FLAG_HUB;
 
-            if( !name )
-               name = reg->alias.foldername;
+         const char *name = NULL;
+         vg_msg msg;
+         vg_msg_init( &msg, reg->metadata, reg->metadata_len );
 
-            menu.world_list_names[ menu.world_list_display_count ] = name;
-         }
-         else
-            menu.world_list_names[ menu.world_list_display_count ] = "...";
+         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_entries[ menu.world_list_display_count ] = addon_id;
+         menu.world_list_flags[ menu.world_list_display_count ] = flags;
          menu.world_list_display_count ++;
       }
    }
index d25fbeb314796a79e7352f9ac2a50179f743f726..16869f31497a386fed83c9a89a0816dcdd6692fa 100644 (file)
@@ -3,6 +3,10 @@
 #define MENU_STACK_SIZE 8
 #define MENU_WORLD_MAX_COUNT 10
 
+#define MENU_WORLD_FLAG_HUB    0x1
+#define MENU_WORLD_FLAG_DONE   0x2
+#define MENU_WORLD_FLAG_LOCKED 0x4
+
 #include "vg/vg_engine.h"
 #include "entity.h"
 #include "world_map.h"
@@ -61,6 +65,7 @@ struct global_menu
 
    addon_id world_list_entries[ MENU_WORLD_MAX_COUNT ];
    const char *world_list_names[ MENU_WORLD_MAX_COUNT ];
+   u32 world_list_flags[ MENU_WORLD_MAX_COUNT ];
 
    i32 world_list_display_count, 
        world_list_total_count,
index 357f0cb3ed81bc8008ac711efb4393367e071a3d..7f180fff17c5a2d07afeabff7260e9d561bd01b7 100644 (file)
@@ -99,11 +99,14 @@ static void skaterift_populate_main_savedata( savedata_file *file )
       skaterift_write_viewslot( &sav, "board", k_addon_type_board, localplayer.board_view_slot );
       skaterift_write_viewslot( &sav, "playermodel", k_addon_type_player, localplayer.playermodel_view_slot );
 
-      addon_reg *reg = addon_details( _world.main.addon_id );
-      if( reg )
-         skaterift_write_addon_alias( &sav, "location", &reg->alias );
-      else
-         vg_error( "Tried to reference un-registered world in save file.\n" );
+      if( skaterift.no_save_location == 0 )
+      {
+         addon_reg *reg = addon_details( _world.main.addon_id );
+         if( reg )
+            skaterift_write_addon_alias( &sav, "location", &reg->alias );
+         else
+            vg_error( "Tried to reference un-registered world in save file.\n" );
+      }
    }
    vg_msg_end_frame( &sav );
 
@@ -137,7 +140,9 @@ static void skaterift_populate_world_savedata( savedata_file *file )
 
    vg_msg_frame( &sav, "player" );
    {
-      vg_msg_wkvnum( &sav, "position", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co );
+      /* 30.05.25: this was changed to 'co' to unfuck existing players from falling through modified worlds etc */
+      //vg_msg_wkvnum( &sav, "position", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co );
+      vg_msg_wkvnum( &sav, "co", k_vg_msg_float|k_vg_msg_32b, 3, localplayer.rb.co );
    }
    vg_msg_end_frame( &sav );
 
diff --git a/src/scripts/boost.c b/src/scripts/boost.c
new file mode 100644 (file)
index 0000000..2f3fb42
--- /dev/null
@@ -0,0 +1,29 @@
+static bool _script_boost( ent_script_event *event )
+{
+   if( event->type == k_escript_event_world_event )
+   {
+      struct script_event_world_io *inf = event->info;
+      world_instance *world = &_world.main;
+      if( AF_STR_EQ( &world->meta.af, inf->event->pstr_recieve_event, "boost" ) ) 
+      {
+         // TODO: Make this dynamiclly fetched from a handler for the entity itself. (or not, fuck you)
+         if( inf->event->flags & k_ent_event_data_const_entity_id )
+         {
+            u32 marker_id = inf->event->data.const_entity_id;
+            if( mdl_entity_id_type( marker_id ) != k_ent_marker )
+            {
+               vg_error( "boost not called with not a marker\n" );
+               return 0;
+            }
+            ent_marker *marker = af_arritm( &world->ent_marker, mdl_entity_id_id(marker_id) );
+
+            v3f fwd = { 0, 1, 0 };
+            q_mulv( marker->transform.q, fwd, fwd );
+
+            v3_muladds( localplayer.rb.v, fwd, skaterift.boost_scale, localplayer.rb.v );
+         }
+      }
+   }
+   
+   return 1;
+}
index cb8304ee802a41ad8f88788b73843aa0435483bf..d5de82d01d66f1e26d968f6dcabc21472cdeccd1 100644 (file)
@@ -37,7 +37,7 @@ static bool _skaterift_script_explode( ent_script_event *event )
                }
             }
             vg_audio_lock();
-            vg_audio_oneshot_3d( &audio_wood_break, where, 100.0f, 1.0f, 0, 0 );
+            vg_audio_oneshot_3d( &audio_wood_break, where, 100.0f, 0.6f, 0, 0 );
             vg_audio_unlock();
          }
       }
index 40568cf2b45b9947b7363cc1ea0361227bf4a9ae..feae789bc37b9cd9e6fde83b86ce74ae00a13af6 100644 (file)
@@ -78,6 +78,16 @@ static void skaterift_load_player_content(void)
    player_board_load( &localplayer.fallback_board, "models/board_none.mdl", vg_mem.rtmemory );
 }
 
+int skaterift_quit_command( int argc, const char *argv[] )
+{
+   if( argc >= 1 )
+      if( !strcmp( argv[0], "1" ) )
+         skaterift.no_save_location = 1;
+
+   vg.window_should_close = 1;
+   return 1;
+}
+
 static void game_load_co( vg_coroutine *co )
 {
    if( co_begin( co ) )
@@ -107,9 +117,11 @@ static void game_load_co( vg_coroutine *co )
       vg_loader_step( network_init, network_end );
 
       vg_loader_set_user_information( "Initializing subsystems" );
+      vg_console_reg_cmd( "quit", skaterift_quit_command, NULL );
       vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL );
       vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 );
       vg_console_reg_var( "allow_resume", &skaterift.allow_replay_resume, k_var_dtype_i32, VG_VAR_CHEAT );
+      vg_console_reg_var( "boost_scale", &skaterift.boost_scale, k_var_dtype_f32, VG_VAR_CHEAT );
       vg_loader_step( menu_init, NULL );
       vg_loader_step( _user_profile_init, NULL );
       vg_loader_step( control_overlay_init, NULL );
index 292a8950b5d544a589d2aebd51d69dec421f1afe..4aa5fd803f97665407d9c4906de4e3c8a6b3f9cf 100644 (file)
@@ -36,5 +36,8 @@ struct skaterift_globals
    u64 full_ready_mask;
 
    const char *override_load_world;
+
+   f32 boost_scale;
+   bool no_save_location;
 }
 extern skaterift;
index dabece9d90ad6b182ff316557f42d55b94a2726d..d71b6fc65cff10f420c104557eb0ad06f324faed 100644 (file)
@@ -423,7 +423,7 @@ entity_event_result ent_ccmd_event( ent_event *event )
       ent_ccmd *ccmd = af_arritm( &world->ent_ccmd, mdl_entity_id_id( event->recieve_entity_id ));
       const char *cmd_text = af_str( &world->meta.af, ccmd->pstr_command );
       vg_info( "ccmd: %s\n", cmd_text );
-      vg_execute_console_input( cmd_text, 0 );
+      vg_execute_console_input( cmd_text, 0, 1 );
       return k_entity_event_result_OK;
    }
    else
@@ -628,6 +628,7 @@ void entity_bh_closest( void *user, u32 item_index, v3f point, v3f closest )
 void world_entity_start( world_instance *world, vg_msg *sav )
 {
    vg_info( "Start instance %p\n", world );
+   k_gravity = 9.6f;
    _event_system.timed_event_count = 0;
 
    for( u32 i=0; i<af_arrcount( &world->ent_event ); i ++ )
index 528aec86aa1097a79706cd954fc8e6c46ea8bee1..0c913b5957518303a98e763099a44e303cdc7d49 100644 (file)
@@ -366,7 +366,7 @@ void async_worldsave_go( vg_async_task *task )
       vg_msg player_frame = sav;
       if( vg_msg_seekframe( &player_frame, "player" ) )
       {
-         if( vg_msg_getkvvecf( &player_frame, "position", k_vg_msg_v3f, localplayer.rb.co, NULL ) )
+         if( vg_msg_getkvvecf( &player_frame, "co", k_vg_msg_v3f, localplayer.rb.co, NULL ) )
             restored_player_position = 1;
       }
 
index f6b4957289e359e77c77b272ecbdb1b62d68b566..ebc8c30b4b8b501fd54fe15dd1a25be3d73d4693 100644 (file)
@@ -658,7 +658,8 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al
 
          ctx->font = &vgf_default_title;
          ui_rect super_location_box = { back_box[0] - (120+8), back_box[1], 120, 32 };
-         ui_text( ctx, super_location_box, "Earth", 1, k_ui_align_middle_center, ui_colour( ctx, k_ui_gray ) );
+         ui_text( ctx, super_location_box, _superworld_names[world_map.superworld_list_selected], 1,
+                     k_ui_align_middle_center, ui_colour( ctx, k_ui_gray ) );
 
          if( go_to_super )
          {
@@ -976,9 +977,11 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al
       for( u32 i=0; i<menu.world_list_display_count; i ++ )
       {
          addon_id addon_id = menu.world_list_entries[i];
-         bool clickable = 1;
+         bool clickable = 0;
+
+         const char *name = "...";
          
-         if( addon_id )
+         if( !(menu.world_list_flags[i] & MENU_WORLD_FLAG_LOCKED) )
          {
             addon_reg *reg = addon_details( addon_id );
             bool selected = addon_id == menu.clicked_world_id;
@@ -989,15 +992,27 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al
                ui_outline( ctx, sel_box, 2, ui_colour(ctx,k_ui_fg), 0 );
             }
             clickable = !selected;
+            name = menu.world_list_names[i];
          }
-         else
-            clickable = 0;
 
-         if( menu_button( ctx, panel, R == (page_base + i), clickable, menu.world_list_names[i] ) )
+         ui_px tw = 128;
+         ui_rect tickbox = { panel[0]+panel[2]-tw, panel[1], tw, ctx->font->sy*2 };
+
+         if( menu_button( ctx, panel, R == (page_base + i), clickable, name ) )
          {
             menu.clicked_world_id = addon_id;
             menu.clicked_world_name = menu.world_list_names[i];
          }
+
+         if( menu.world_list_flags[i] & MENU_WORLD_FLAG_DONE )
+            ui_text( ctx, tickbox, "\xb3\xb3", 1, k_ui_align_middle_center, ui_colour( ctx, k_ui_yellow ) );
+         
+         if( menu.world_list_flags[i] & MENU_WORLD_FLAG_HUB )
+         {
+            ctx->font = &vgf_default_small;
+            ui_text( ctx, tickbox, "(hub)", 1, k_ui_align_middle_center, 0 );
+            ctx->font = &vgf_default_large;
+         }
       }
       
       if( menu_button( ctx, panel, R == -999, page<max_page, "\x96" ) )