incorporate board maker into world
authorhgn <hgodden00@gmail.com>
Sun, 23 Mar 2025 15:26:18 +0000 (15:26 +0000)
committerhgn <hgodden00@gmail.com>
Sun, 23 Mar 2025 15:26:18 +0000 (15:26 +0000)
content_skaterift/maps/mp_mtzero/before.mdl
content_skaterift/maps/mp_mtzero/main.mdl
src/scripts/generic.c
src/scripts/mtzero.c
src/scripts/tutorial_island.c
src/skaterift_script.c
src/world_load.c

index 861d53402a547861084b7b31222229bd9826a3ca..e4568af8d3dc50933251af6673dc492aefab48f6 100644 (file)
Binary files a/content_skaterift/maps/mp_mtzero/before.mdl and b/content_skaterift/maps/mp_mtzero/before.mdl differ
index 20e6aa9f518d1fef45404f1d01ef04f3262ba8a7..c0f0ccf519f0a4e4cc6f4a6be09b8ae41546805c 100644 (file)
Binary files a/content_skaterift/maps/mp_mtzero/main.mdl and b/content_skaterift/maps/mp_mtzero/main.mdl differ
index 4b35497beb4d45d97dea16160f660c9997a4e7b2..91ff46287b11b454366f90b1fe31a652d352f9d1 100644 (file)
@@ -1,3 +1,43 @@
+struct board_maker_unlock_waiter
+{
+   bool changed;
+   bool unlocked;
+};
+
+static bool _skaterift_script_board_maker_unlock( ent_script_event *event )
+{
+   if( event->type == k_escript_event_allocate )
+   {
+      struct script_event_allocate *event_info = event->info;
+      struct board_maker_unlock_waiter *waiter = vg_linear_alloc( event_info->heap, sizeof(struct board_maker_unlock_waiter) );
+      waiter->changed = 0;
+      waiter->unlocked = 0;
+      event_info->userdata = waiter;
+   }
+
+   u64 status;
+   if( on_nugget_changed( event, "board_maker_unlock", &status ) )
+   {
+      struct board_maker_unlock_waiter *waiter = event->userdata;
+      waiter->changed = 1;
+      waiter->unlocked = status;
+   }
+
+   if( event->type == k_escript_event_update || event->type == k_escript_event_world_start )
+   {
+      if( _cutscene.state == k_cutscene_state_none )
+      {
+         struct board_maker_unlock_waiter *waiter = event->userdata;
+         if( waiter->changed )
+         {
+            ent_list_set_visible( event->world, event->entity_list, waiter->unlocked );
+            waiter->changed = 0;
+         }
+      }
+   }
+
+   return 1;
+}
 
 static bool _skaterift_script_board_maker( ent_script_event *event )
 {
index 7cd46a4d09cbaea5351ee454ec08270e93dec5f3..cc468e107334762fdd4d053f9bce53ffc64f5186 100644 (file)
@@ -324,7 +324,11 @@ static bool _skaterift_script_ch2e1( ent_script_event *event )
       .freeze_player = 1,
       .subtitles = EN,
    };
-   optional_video_wrapper( &cutscene, "ch2e1_view", 2, event );
+   enum generic_cutscene_event cs_event = optional_video_wrapper( &cutscene, "ch2e1_view", 2, event );
+
+   if( cs_event == k_generic_cutscene_event_start )
+      _skaterift_script_nugget_set( "board_maker_unlock", 1 );
+
    return 1;
 }
 
index 7b4e0ec7b89f0b2476c94e0543c9e275891a5816..87d2faf7fd7b4dfb1bbd07999207d0d0d4d6ea9f 100644 (file)
@@ -191,23 +191,10 @@ static bool _skaterift_script_ch1s6a( ent_script_event *event )
       _skaterift_script_nugget_set( "unlock_mtzero", 1 );
    }
 
-   return 1;
-}
-
-static bool _skaterift_script_final_portal( ent_script_event *event )
-{
-   u64 status;
-   if( on_nugget_changed( event, "unlock_mtzero", &status ) )
+   if( cs_event == k_generic_cutscene_event_end )
    {
-      world_instance *world = event->world;
-      file_entity_ref *ref = af_arritm( &world->file_entity_ref, event->entity_list->entity_ref_start );
-
-      u32 type = mdl_entity_id_type( ref->entity_id ),
-          index = mdl_entity_id_id( ref->entity_id );
-
-      ent_gate *gate = af_arritm( &event->world->ent_gate, index );
-      if( status ) gate->flags &= ~((u32)k_ent_gate_locked);
-      else         gate->flags |=   (u32)k_ent_gate_locked;
+      skaterift_load_world_command( 1, (const char *[]){ "sr002-local-dev_hub" } );
    }
+
    return 1;
 }
index e9dc62da7ce6f62594dad4f0589d1db3b829a6fc..5363931400decfe0d379a9e47c69373a22ec7abb 100644 (file)
@@ -706,6 +706,7 @@ enum generic_cutscene_event challenge_video_wrapper( const struct generic_cutsce
 
 struct ent_script_table_entry _ent_script_table[] =
 {
+   { "board_maker_unlock", _skaterift_script_board_maker_unlock },
    { "board_maker", _skaterift_script_board_maker },
 
    { "intro", _skaterift_script_intro },
@@ -718,7 +719,6 @@ struct ent_script_table_entry _ent_script_table[] =
    { "ch1s5", _skaterift_script_ch1s5 },
    { "ch1s6a", _skaterift_script_ch1s6a },
    { "unlock_docks", _skaterift_script_unlock_docks },
-   { "final_portal", _skaterift_script_final_portal },
 
    { "unlock_mtzero", _skaterift_script_unlock_mtzero },
    { "ch2s1", _skaterift_script_ch2s1 },
@@ -754,8 +754,8 @@ struct script_save_nugget
 }
 _skaterift_script_savedata[] = 
 {
+   { "board_maker_unlock" },
    { "intro_view" },
-
    { "hub_info_view" },
 
    { "ch1s2_view" },
index 2fd36da473061a838e082460105bd84a58f048f9..5ba1246bcbf7b8febd6360d80f8615c92237728d 100644 (file)
@@ -534,12 +534,6 @@ void _world_loader_set_target_reg( addon_reg *reg )
 /* console command for the above function */
 int skaterift_load_world_command( int argc, const char *argv[] )
 {
-   if( !vg_loader_availible() ) 
-   {
-      vg_error( "Loading thread is currently unavailible\n" );
-      return 0;
-   }
-
    if( argc >= 1 )
    {
       if( !strcmp( argv[0], "reload" ) )