STARTING TO TAKE THE PISS A BIT HERE
authorhgn <hgodden00@gmail.com>
Mon, 26 May 2025 00:26:04 +0000 (01:26 +0100)
committerhgn <hgodden00@gmail.com>
Mon, 26 May 2025 00:26:04 +0000 (01:26 +0100)
14 files changed:
content_skaterift/maps/dev_hub/main.mdl
content_skaterift/maps/mp_line1/main.mdl
content_skaterift/metascenes/ch4rk.ms [new file with mode: 0644]
content_skaterift/metascenes/ch4s1.ms [new file with mode: 0644]
content_skaterift/metascenes/ch4s1a.ms [new file with mode: 0644]
content_skaterift/metascenes/ch4s2.ms [new file with mode: 0644]
src/ent_challenge.c
src/ent_list.c
src/ent_npc.c
src/steam.c
src/world.c
src/world_entity.c
src/world_entity.h
src/world_map.c

index 72946d4db1c8f8e2ee872a27b6b5f852204210db..ac093da7d5f6bc1e09223170455560beadfd5d88 100644 (file)
Binary files a/content_skaterift/maps/dev_hub/main.mdl and b/content_skaterift/maps/dev_hub/main.mdl differ
index 76975d95a43303024d5bb43dc6bdb5055ee2a64c..f5e0d8e7117c42e61e1ef1ba9a1dc43197d4fee4 100644 (file)
Binary files a/content_skaterift/maps/mp_line1/main.mdl and b/content_skaterift/maps/mp_line1/main.mdl differ
diff --git a/content_skaterift/metascenes/ch4rk.ms b/content_skaterift/metascenes/ch4rk.ms
new file mode 100644 (file)
index 0000000..a09628b
Binary files /dev/null and b/content_skaterift/metascenes/ch4rk.ms differ
diff --git a/content_skaterift/metascenes/ch4s1.ms b/content_skaterift/metascenes/ch4s1.ms
new file mode 100644 (file)
index 0000000..fbe1181
Binary files /dev/null and b/content_skaterift/metascenes/ch4s1.ms differ
diff --git a/content_skaterift/metascenes/ch4s1a.ms b/content_skaterift/metascenes/ch4s1a.ms
new file mode 100644 (file)
index 0000000..6535ee8
Binary files /dev/null and b/content_skaterift/metascenes/ch4s1a.ms differ
diff --git a/content_skaterift/metascenes/ch4s2.ms b/content_skaterift/metascenes/ch4s2.ms
new file mode 100644 (file)
index 0000000..ebde86e
Binary files /dev/null and b/content_skaterift/metascenes/ch4s2.ms differ
index 8dbaa996459c43341a8ca22f78c04fe38c65d9f8..cc4599f6c7da1e81ee3280aa4f88fd664f292732 100644 (file)
@@ -130,6 +130,8 @@ void _restart_active_challenge(void)
          v3_copy( localplayer.rb.co, localplayer.cam_control.tpv_lpf );
       }
    }
+
+   _world_raise_event( _world.active_challenge_id, "activate" );
 }
 
 void ent_challenge_update(void)
@@ -159,7 +161,6 @@ void ent_challenge_update(void)
          localplayer.immobile = 0; /* TODO: Unify this probably after eating some potats */
          menu.disable_open = 0;
 
-         _world_raise_event( _world.active_challenge_id, "activate" );
          _restart_active_challenge();
       }
       else if( button_down( k_srbind_mback ) )
index 6e2ca24ec0d370586c61606f568d869415f933b9..8301bf70caed421e17b1a9e6ed4dca148ba804af 100644 (file)
@@ -90,6 +90,12 @@ void _ent_list_set_visible( ent_list *list, bool visible )
          if( visible ) glider->flags &= ~((u32)0x1);
          else          glider->flags |= 0x1;
       }
+      else if( iter.type == k_ent_spawn )
+      {
+         ent_spawn *spawn = af_arritm( &world->ent_spawn, iter.index );
+         if( visible ) spawn->flags &= ~((u32)k_ent_spawn_flag_locked);
+         else          spawn->flags |=   (u32)k_ent_spawn_flag_locked;
+      }
    }
 }
 
index 269890f5d8f93b822d4f56db22d67f0ebbfe5b6b..1b71ab28ac988e1d2a7cf4ab31473ad4a770b85e 100644 (file)
@@ -238,8 +238,9 @@ void _ent_npc_reset(void)
    for( u32 i=0; i<4; i++ )
    {
       struct human_npc *human = &_npc.humans[i];
-      human->alive = 0;
       addon_cache_unwatch( k_addon_type_player, human->playermodel_view_slot );
+      human->playermodel_view_slot = 0;
+      human->alive = 0;
    }
 }
 
@@ -543,7 +544,7 @@ entity_event_result ent_npc_event( ent_event *event )
             const char *addons[] = 
             {
                [k_npc_jc] = "sr003-local-skaterift_john",
-               [k_npc_mike] = "sr003-local-skaterift_mike",
+               [k_npc_mike] = "sr003-local-skaterift_chip",
                [k_npc_fbi] = "sr003-local-skaterift_fbi",
             };
             human->alive = 1;
index 6eb2d05a1f2c0f82710e5fba069f687f70bb6665..22ce6bcee643cc07d3a10f4a5788e7d0e297b854 100644 (file)
@@ -51,7 +51,6 @@ void steam_store_achievements(void)
    }
 }
 
-void update_ach_models(void);
 void steam_set_achievement( const char *name )
 {
    if( skaterift.demo_mode )
@@ -62,7 +61,6 @@ void steam_set_achievement( const char *name )
    if( !strcmp(name,"ALBERT") ) skaterift.achievements |= 0x2;
    if( !strcmp(name,"JANET") ) skaterift.achievements |= 0x4;
    if( !strcmp(name,"BERNADETTA") ) skaterift.achievements |= 0x8;
-   update_ach_models();
 
    if( steam_ready && steam_stats_ready ){
       if( SteamAPI_ISteamUserStats_SetAchievement( hSteamUserStats, name ) ){
@@ -154,39 +152,37 @@ int steam_achievement_ccmd( int argc, char const *argv[] )
 static void steam_on_recieve_current_stats( CallbackMsg_t *msg )
 {
    UserStatsReceived_t *rec = (UserStatsReceived_t *)msg->m_pubParam;
-
-   if( rec->m_eResult == k_EResultOK ){
-      vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID,
-                                                        rec->m_steamIDUser );
+   if( rec->m_eResult == k_EResultOK )
+   {
+      vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID, rec->m_steamIDUser );
       steam_stats_ready = 1;
 
       steamapi_bool set = 0;
-      if( SteamAPI_ISteamUserStats_GetAchievement( 
-               hSteamUserStats, "MARC", &set ) ){
+      if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "MARC", &set ) )
+      {
          if( set ) skaterift.achievements |= 0x1;
       }
-      if( SteamAPI_ISteamUserStats_GetAchievement( 
-               hSteamUserStats, "ALBERT", &set ) ){
+      if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "ALBERT", &set ) )
+      {
          if( set ) skaterift.achievements |= 0x2;
       }
-      if( SteamAPI_ISteamUserStats_GetAchievement( 
-               hSteamUserStats, "JANET", &set ) ){
+      if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "JANET", &set ) )
+      {
          if( set ) skaterift.achievements |= 0x4;
       }
-      if( SteamAPI_ISteamUserStats_GetAchievement( 
-               hSteamUserStats, "BERNADETTA", &set ) ){
+      if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "BERNADETTA", &set ) )
+      {
          if( set ) skaterift.achievements |= 0x8;
       }
-      update_ach_models();
    }
-   else{
+   else
       vg_error( "Error recieveing stats for user (%u)\n", rec->m_eResult );
-   }
 }
 
 static u32 utf8_byte0_byte_count( u8 char0 )
 {
-   for( u32 k=2; k<4; k++ ){
+   for( u32 k=2; k<4; k++ )
+   {
       if( !(char0 & (0x80 >> k)) )
          return k;
    }
@@ -199,39 +195,38 @@ u32 str_utf8_collapse( const char *str, char *buf, u32 length )
    u8 *ustr = (u8 *)str;
    u32 utf32_code = 0x00000000;
    u32 i=0, j=0, utf32_byte_ct=0;
-
-   for(;j < length-1;){
+   for(;j < length-1;)
+   {
       if( ustr[i] == 0x00 )
          break;
-      
-      if( ustr[i] & 0x80 ){
-         if( utf32_byte_ct ){
+      if( ustr[i] & 0x80 )
+      {
+         if( utf32_byte_ct )
+         {
             utf32_byte_ct --;
             utf32_code |= (ustr[i] & 0x3F) << (utf32_byte_ct*6);
-
-            if( !utf32_byte_ct ){
+            if( !utf32_byte_ct )
+            {
                const char *match;
                size_t chars = anyascii( utf32_code, &match );
-
-               for( u32 k=0; k<VG_MIN(chars, length-1-j); k++ ){
+               for( u32 k=0; k<VG_MIN(chars, length-1-j); k++ )
                   buf[ j++ ] = (u8)match[k];
-               }
             }
          }
-         else{
+         else
+         {
             utf32_byte_ct = utf8_byte0_byte_count( ustr[i] )-1;
             utf32_code = ustr[i] & (0x3F >> utf32_byte_ct);
             utf32_code <<= utf32_byte_ct*6;
          }
       }
-      else{
+      else
+      {
          utf32_byte_ct = 0x00;
          buf[j ++] = str[i];
       }
-
       i++;
    }
-
    buf[j] = 0x00;
    return j;
 }
index c94fd56ce40ddddbe845de45969406f097475034..e5d5de7bdfdc381b750cfa43862ece9a3fb492a3 100644 (file)
@@ -38,6 +38,7 @@ void skaterift_world_get_save_path( addon_id addon_id, char buf[128] )
 
 void world_update( world_instance *world, v3f pos )
 {
+   _ent_update();
    ent_script_update( world );
    ent_route_preupdate();
    _ent_npc_preupdate();
index a37a6c6659dfd6aa3cf764312e3b9f5018c1f753..ae485aa1ba45c401ea9695494fcf6d1caabe16a3 100644 (file)
@@ -29,6 +29,18 @@ bh_system bh_system_entity_list =
    .cast_ray = NULL
 };
 
+struct 
+{
+   struct ent_event_deferred
+   {
+      f32 timeleft;
+      u32 event_index;
+   }
+   timed_events[32];
+   u32 timed_event_count;
+}
+_event_system;
+
 static void _event_trigger( ent_event *event );
 
 void world_gen_entities_init( world_instance *world )
@@ -556,14 +568,6 @@ void entity_bh_debug( void *user, u32 item_index )
       vg_fatal_error( "Programming error\n" );
 }
 
-void update_ach_models(void)
-{
-#if 0
-   world_instance *hub = &_world.instances[k_world_purpose_hub];
-   if( hub->status != k_world_status_loaded ) return;
-#endif
-}
-
 void entity_bh_closest( void *user, u32 item_index, v3f point, v3f closest )
 {
    world_instance *world = user;
@@ -599,6 +603,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 );
+   _event_system.timed_event_count = 0;
 
    for( u32 i=0; i<af_arrcount( &world->ent_event ); i ++ )
    {
@@ -760,8 +765,36 @@ void _world_raise_event( u32 caller, const char *event_alias )
          continue;
 
       if( af_str_eq( &world->meta.af, event->pstr_source_event, event_alias, event_alias_hash ) )
-         _event_trigger( event );
+      {
+         if( event->delay > 0.001f )
+         {
+            if( _event_system.timed_event_count < VG_ARRAY_LEN(_event_system.timed_events) )
+            {
+               struct ent_event_deferred *def = &_event_system.timed_events[ _event_system.timed_event_count ++ ];
+               def->event_index = i;
+               def->timeleft = event->delay;
+            }
+         }
+         else
+            _event_trigger( event );
+      }
+   }
+}
+
+void _ent_update(void)
+{
+   world_instance *world = &_world.main;
+   u32 j = 0;
+   for( u32 i=0; i<_event_system.timed_event_count; i ++ )
+   {
+      struct ent_event_deferred *def = &_event_system.timed_events[ i ];
+      def->timeleft -= vg.time_delta;
+      if( def->timeleft <= 0.0f )
+         _event_trigger( af_arritm( &world->ent_event, def->event_index ) );
+      else
+         _event_system.timed_events[ j ++ ] = *def;
    }
+   _event_system.timed_event_count = j;
 }
 
 static void _event_trigger( ent_event *event )
index 7e392fe140cb6c063f8a15124d5d0374d7b6ef31..ea3e8b3828ec7a47f5855fee5c556d99a2f798ea 100644 (file)
@@ -25,3 +25,4 @@ void update_ach_models(void);
 
 extern bh_system bh_system_entity_list;
 void _world_raise_event( u32 caller, const char *event_alias );
+void _ent_update(void);
index b94f9f51f68c5a4de6c30146523fb2ad309960fe..0c6271989739d69c0c3d1455b792a393cf6293c6 100644 (file)
@@ -314,7 +314,7 @@ void render_world_map(void)
 
          v4f colour = { 1,1,1,1 };
 
-         if( !(glider->flags & 0x1) )
+         if( glider->flags & 0x1 )
             v3_muls( colour, 0.5f, colour );
          gui_icon_setcolour( colour );