+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 )
{
.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;
}
_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;
}
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 },
{ "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 },
}
_skaterift_script_savedata[] =
{
+ { "board_maker_unlock" },
{ "intro_view" },
-
{ "hub_info_view" },
{ "ch1s2_view" },
/* 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" ) )