#define KCOL_FBI KGRN
#define KCOL_JESUS KMAG
-enum escript_event
-{
- k_escript_event_call = 0,
- k_escript_event_update = 1,
- k_escript_event_cutscene_marker = 2
-};
+#include "entity.h"
+#include "ent_challenge.h"
/* you can add anything you want to this. */
enum escript_state
k_escript_script_id_ch3s3,
k_escript_script_id_ch4s1a,
k_escript_script_id_ch4s1, /* NOTE: 1 and 2 are backwards in order (accident) */
- k_escript_script_id_ch4s2,
- k_escript_script_id_ch4s3,
+ k_escript_script_id_ch4s2, k_escript_script_id_ch4s3,
k_escript_script_id_max
};
enum escript_script_id script_id;
}
static _script = { .script_id = k_escript_script_id_max };
-
-struct script_info
+static struct script_info _script_infos[] =
{
- const char *alias;
- bool( *jump )( enum escript_event ev, const char *inf );
+ [k_escript_script_id_test] = { "test", _skaterift_script_test },
+ [k_escript_script_id_intro] = { "intro", _skaterift_script_intro, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch1s2] = { "ch1s2", _skaterift_script_ch1s2, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch1s3] = { "ch1s3", _skaterift_script_ch1s3, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch1s3b] = {"ch1s3b",_skaterift_script_ch1s3b, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch1s4] = { "ch1s4", _skaterift_script_ch1s4, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch1s5] = { "ch1s5", _skaterift_script_ch1s5, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch1s6a] = {"ch1s6a",_skaterift_script_ch1s6a, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2s1] = { "ch2s1", _skaterift_script_ch2s1, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2s2] = { "ch2s2", _skaterift_script_ch2s2, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2s3a] = {"ch2s3a",_skaterift_script_ch2s3a, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2s4] = { "ch2s4", _skaterift_script_ch2s4, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2e1] = { "ch2e1", _skaterift_script_ch2e1, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2s5] = { "ch2s5", _skaterift_script_ch2s5, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch2s6] = { "ch2s6", _skaterift_script_ch2s6, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch3s1] = { "ch3s1", _skaterift_script_ch3s1, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch3s2] = { "ch3s2", _skaterift_script_ch3s2, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch3s3] = { "ch3s3", _skaterift_script_ch3s3, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch4s1a]= { "ch4s1a",_skaterift_script_ch4s1a, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch4s1] = { "ch4s1", _skaterift_script_ch4s1, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch4s2] = { "ch4s2", _skaterift_script_ch4s2, SCRIPT_FLAG_STORY_EVENT },
+ [k_escript_script_id_ch4s3] = { "ch4s3", _skaterift_script_ch4s3, SCRIPT_FLAG_STORY_EVENT },
+};
- bool availible;
- u64 viewed_time;
-}
-_script_infos[] =
+struct script_info *skaterift_script_get_info( const char *alias )
{
- [k_escript_script_id_test] = { "test", _skaterift_script_test },
- [k_escript_script_id_intro] = { "intro", _skaterift_script_intro },
- [k_escript_script_id_ch1s2] = { "ch1s2", _skaterift_script_ch1s2 },
- [k_escript_script_id_ch1s3] = { "ch1s3", _skaterift_script_ch1s3 },
- [k_escript_script_id_ch1s3b] = { "ch1s3b", _skaterift_script_ch1s3b },
- [k_escript_script_id_ch1s4] = { "ch1s4", _skaterift_script_ch1s4 },
- [k_escript_script_id_ch1s5] = { "ch1s5", _skaterift_script_ch1s5 },
- [k_escript_script_id_ch1s6a] = { "ch1s6a", _skaterift_script_ch1s6a },
- [k_escript_script_id_ch2s1] = { "ch2s1", _skaterift_script_ch2s1 },
- [k_escript_script_id_ch2s2] = { "ch2s2", _skaterift_script_ch2s2 },
- [k_escript_script_id_ch2s3a] = { "ch2s3a", _skaterift_script_ch2s3a },
- [k_escript_script_id_ch2s4] = { "ch2s4", _skaterift_script_ch2s4 },
- [k_escript_script_id_ch2e1] = { "ch2e1", _skaterift_script_ch2e1 },
- [k_escript_script_id_ch2s5] = { "ch2s5", _skaterift_script_ch2s5 },
- [k_escript_script_id_ch2s6] = { "ch2s6", _skaterift_script_ch2s6 },
- [k_escript_script_id_ch3s1] = { "ch3s1", _skaterift_script_ch3s1 },
- [k_escript_script_id_ch3s2] = { "ch3s2", _skaterift_script_ch3s2 },
- [k_escript_script_id_ch3s3] = { "ch3s3", _skaterift_script_ch3s3 },
- [k_escript_script_id_ch4s1a]= { "ch4s1a",_skaterift_script_ch4s1a },
- [k_escript_script_id_ch4s1] = { "ch4s1", _skaterift_script_ch4s1 },
- [k_escript_script_id_ch4s2] = { "ch4s2", _skaterift_script_ch4s2 },
- [k_escript_script_id_ch4s3] = { "ch4s3", _skaterift_script_ch4s3 },
-};
+ for( u32 i=0; i<k_escript_script_id_max; i ++ )
+ {
+ if( vg_str_eq( alias, _script_infos[i].alias ) )
+ {
+ return &_script_infos[i];
+ }
+ }
+ return NULL;
+}
void skaterift_script_write_savedata( vg_msg *sav )
{
{
struct script_info *info = &_script_infos[i];
- vg_msg_frame( sav, info->alias );
+ if( info->flags & SCRIPT_FLAG_STORY_EVENT )
{
- vg_msg_wkvnum( sav, "viewed_time",
- k_vg_msg_u64, 1, &info->viewed_time );
+ vg_msg_frame( sav, info->alias );
+ {
+ vg_msg_wkvnum( sav, "viewed_time",
+ k_vg_msg_u64, 1, &info->viewed_time );
- u8 availible = info->availible;
- vg_msg_wkvnum( sav, "availible", k_vg_msg_u8, 1, &availible );
+ u8 availible = info->availible;
+ vg_msg_wkvnum( sav, "availible", k_vg_msg_u8, 1, &availible );
+ }
+ vg_msg_end_frame( sav );
}
- vg_msg_end_frame( sav );
}
}
sav->cur = orig;
struct script_info *info = &_script_infos[i];
- if( vg_msg_seekframe( sav, info->alias ) )
+ if( info->flags & SCRIPT_FLAG_STORY_EVENT )
{
- vg_msg_getkvintg( sav, "viewed_time", k_vg_msg_u64,
- &info->viewed_time, NULL );
+ if( vg_msg_seekframe( sav, info->alias ) )
+ {
+ vg_msg_getkvintg( sav, "viewed_time", k_vg_msg_u64,
+ &info->viewed_time, NULL );
- u8 availible;
- vg_msg_getkvintg( sav, "availible", k_vg_msg_u8, &availible, NULL );
- info->availible = availible? 1: 0;
+ u8 availible;
+ vg_msg_getkvintg( sav, "availible", k_vg_msg_u8, &availible, NULL );
+ info->availible = availible? 1: 0;
+ }
}
}
}
struct script_info *info = &_script_infos[ script_id ];
if( action == k_script_action_unlock )
+ {
info->availible = 1;
+ if( info->linked_challenge )
+ info->linked_challenge->flags &= ~((u32)k_ent_challenge_locked);
+ }
+
if( action == k_script_action_reset )
{
info->availible = 0;
info->viewed_time = 0;
+
+ if( info->linked_challenge )
+ info->linked_challenge->flags |= (u32)k_ent_challenge_locked;
}
if( action == k_script_action_play )
}
else
{
- for( u32 i=0; i<k_escript_script_id_max; i ++ )
+ struct script_info *info = skaterift_script_get_info( argv[1] );
+ if( info )
{
- if( vg_str_eq( argv[1], _script_infos[i].alias ) )
- {
- _skaterift_script_hook_apply_action( i, action );
- return 1;
- }
+ _skaterift_script_hook_apply_action( info-_script_infos, action );
+ return 1;
+ }
+ else
+ {
+ vg_error( "No such script '%s'\n", argv[0] );
+ return 0;
}
-
- vg_error( "No such script '%s'\n", argv[0] );
- return 0;
}
}
vg_console_reg_cmd( "script", _skaterift_script_hook,
_skaterift_script_hook_poll );
}
+
+void _skaterift_script_unlink_all_challenges(void)
+{
+ for( u32 i=0; i<VG_ARRAY_LEN( _script_infos ); i ++ )
+ _script_infos[i].linked_challenge = NULL;
+}