rest of the story
authorhgn <hgodden00@gmail.com>
Mon, 3 Feb 2025 21:11:03 +0000 (21:11 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 3 Feb 2025 21:11:03 +0000 (21:11 +0000)
42 files changed:
content_skaterift/maps/dev_heaven/main.mdl [new file with mode: 0644]
content_skaterift/maps/mp_mtzero/main.mdl
content_skaterift/metascenes/ch2e1.ms [new file with mode: 0644]
content_skaterift/metascenes/ch2s3a.ms
content_skaterift/metascenes/ch2s4.ms [new file with mode: 0644]
content_skaterift/metascenes/ch2s5.ms [new file with mode: 0644]
content_skaterift/metascenes/ch2s6.ms [new file with mode: 0644]
content_skaterift/metascenes/ch3s1.ms [new file with mode: 0644]
content_skaterift/metascenes/ch3s2.ms [new file with mode: 0644]
content_skaterift/metascenes/ch3s3.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]
content_skaterift/metascenes/ch4s3.ms [new file with mode: 0644]
content_skaterift/metascenes/intro.ms [new file with mode: 0644]
content_skaterift/playermodels/skaterift_fbi/ch_fbi.mdl [new file with mode: 0644]
content_skaterift/playermodels/skaterift_fbi2/ch_fbi2.mdl [new file with mode: 0644]
content_skaterift/playermodels/skaterift_jesus/ch_jesus.mdl [new file with mode: 0644]
content_skaterift/playermodels/skaterift_president/ch_president.mdl [new file with mode: 0644]
content_skaterift/sound/cs/ch2e1.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s2.MIKE.ogg
content_skaterift/sound/cs/ch2s3a.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s3a.MIKE.ogg
content_skaterift/sound/cs/ch2s3b.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s3b.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s4.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s4.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s5.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s6.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch2s6.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch3s1.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch3s1.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch3s2.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch3s3.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch3s3.PRESIDENT.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch4s1.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch4s1a.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch4s2.FBI MAN.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch4s2.MIKE.ogg [new file with mode: 0644]
content_skaterift/sound/cs/ch4s3.JC.ogg [new file with mode: 0644]
content_skaterift/sound/cs/intro.OTHER.ogg [new file with mode: 0644]
src/skaterift_script.c

diff --git a/content_skaterift/maps/dev_heaven/main.mdl b/content_skaterift/maps/dev_heaven/main.mdl
new file mode 100644 (file)
index 0000000..c83c222
Binary files /dev/null and b/content_skaterift/maps/dev_heaven/main.mdl differ
index 87d11a439a4fa6ce5d1044d3c4cf72665dbae36c..2551173fe8e431a8b567e174d713e72c0578df59 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/metascenes/ch2e1.ms b/content_skaterift/metascenes/ch2e1.ms
new file mode 100644 (file)
index 0000000..5565ebf
Binary files /dev/null and b/content_skaterift/metascenes/ch2e1.ms differ
index 73bfae638a286a345922682c287986050e44c7fd..66b50d5672a2fc3c65de5a66f775a19a94872a61 100644 (file)
Binary files a/content_skaterift/metascenes/ch2s3a.ms and b/content_skaterift/metascenes/ch2s3a.ms differ
diff --git a/content_skaterift/metascenes/ch2s4.ms b/content_skaterift/metascenes/ch2s4.ms
new file mode 100644 (file)
index 0000000..deaafcc
Binary files /dev/null and b/content_skaterift/metascenes/ch2s4.ms differ
diff --git a/content_skaterift/metascenes/ch2s5.ms b/content_skaterift/metascenes/ch2s5.ms
new file mode 100644 (file)
index 0000000..063c7f7
Binary files /dev/null and b/content_skaterift/metascenes/ch2s5.ms differ
diff --git a/content_skaterift/metascenes/ch2s6.ms b/content_skaterift/metascenes/ch2s6.ms
new file mode 100644 (file)
index 0000000..10c50c9
Binary files /dev/null and b/content_skaterift/metascenes/ch2s6.ms differ
diff --git a/content_skaterift/metascenes/ch3s1.ms b/content_skaterift/metascenes/ch3s1.ms
new file mode 100644 (file)
index 0000000..2091c2c
Binary files /dev/null and b/content_skaterift/metascenes/ch3s1.ms differ
diff --git a/content_skaterift/metascenes/ch3s2.ms b/content_skaterift/metascenes/ch3s2.ms
new file mode 100644 (file)
index 0000000..0990752
Binary files /dev/null and b/content_skaterift/metascenes/ch3s2.ms differ
diff --git a/content_skaterift/metascenes/ch3s3.ms b/content_skaterift/metascenes/ch3s3.ms
new file mode 100644 (file)
index 0000000..2e1c064
Binary files /dev/null and b/content_skaterift/metascenes/ch3s3.ms differ
diff --git a/content_skaterift/metascenes/ch4s1.ms b/content_skaterift/metascenes/ch4s1.ms
new file mode 100644 (file)
index 0000000..6e858e5
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..221baff
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..031a3e9
Binary files /dev/null and b/content_skaterift/metascenes/ch4s2.ms differ
diff --git a/content_skaterift/metascenes/ch4s3.ms b/content_skaterift/metascenes/ch4s3.ms
new file mode 100644 (file)
index 0000000..5fe7a9f
Binary files /dev/null and b/content_skaterift/metascenes/ch4s3.ms differ
diff --git a/content_skaterift/metascenes/intro.ms b/content_skaterift/metascenes/intro.ms
new file mode 100644 (file)
index 0000000..553827b
Binary files /dev/null and b/content_skaterift/metascenes/intro.ms differ
diff --git a/content_skaterift/playermodels/skaterift_fbi/ch_fbi.mdl b/content_skaterift/playermodels/skaterift_fbi/ch_fbi.mdl
new file mode 100644 (file)
index 0000000..3c3aa08
Binary files /dev/null and b/content_skaterift/playermodels/skaterift_fbi/ch_fbi.mdl differ
diff --git a/content_skaterift/playermodels/skaterift_fbi2/ch_fbi2.mdl b/content_skaterift/playermodels/skaterift_fbi2/ch_fbi2.mdl
new file mode 100644 (file)
index 0000000..30c504a
Binary files /dev/null and b/content_skaterift/playermodels/skaterift_fbi2/ch_fbi2.mdl differ
diff --git a/content_skaterift/playermodels/skaterift_jesus/ch_jesus.mdl b/content_skaterift/playermodels/skaterift_jesus/ch_jesus.mdl
new file mode 100644 (file)
index 0000000..f78a3ee
Binary files /dev/null and b/content_skaterift/playermodels/skaterift_jesus/ch_jesus.mdl differ
diff --git a/content_skaterift/playermodels/skaterift_president/ch_president.mdl b/content_skaterift/playermodels/skaterift_president/ch_president.mdl
new file mode 100644 (file)
index 0000000..882a400
Binary files /dev/null and b/content_skaterift/playermodels/skaterift_president/ch_president.mdl differ
diff --git a/content_skaterift/sound/cs/ch2e1.JC.ogg b/content_skaterift/sound/cs/ch2e1.JC.ogg
new file mode 100644 (file)
index 0000000..d5010f0
Binary files /dev/null and b/content_skaterift/sound/cs/ch2e1.JC.ogg differ
index 381a9b9e44c43f8e5dcece1003e0db4c6ec11f30..4cb7247385630b8935f39ec06d70f480d13207c9 100644 (file)
Binary files a/content_skaterift/sound/cs/ch2s2.MIKE.ogg and b/content_skaterift/sound/cs/ch2s2.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s3a.JC.ogg b/content_skaterift/sound/cs/ch2s3a.JC.ogg
new file mode 100644 (file)
index 0000000..5b9a4fb
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s3a.JC.ogg differ
index 2014e87e4da3a431e95351c9ae1c75f5a629b022..ad0d5099c57550f73a7e27b3bc4680585b4a71b7 100644 (file)
Binary files a/content_skaterift/sound/cs/ch2s3a.MIKE.ogg and b/content_skaterift/sound/cs/ch2s3a.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s3b.JC.ogg b/content_skaterift/sound/cs/ch2s3b.JC.ogg
new file mode 100644 (file)
index 0000000..de42dbd
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s3b.JC.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s3b.MIKE.ogg b/content_skaterift/sound/cs/ch2s3b.MIKE.ogg
new file mode 100644 (file)
index 0000000..901afdc
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s3b.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s4.JC.ogg b/content_skaterift/sound/cs/ch2s4.JC.ogg
new file mode 100644 (file)
index 0000000..f6d543b
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s4.JC.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s4.MIKE.ogg b/content_skaterift/sound/cs/ch2s4.MIKE.ogg
new file mode 100644 (file)
index 0000000..918c90c
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s4.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s5.MIKE.ogg b/content_skaterift/sound/cs/ch2s5.MIKE.ogg
new file mode 100644 (file)
index 0000000..3545859
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s5.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s6.JC.ogg b/content_skaterift/sound/cs/ch2s6.JC.ogg
new file mode 100644 (file)
index 0000000..ecb6eeb
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s6.JC.ogg differ
diff --git a/content_skaterift/sound/cs/ch2s6.MIKE.ogg b/content_skaterift/sound/cs/ch2s6.MIKE.ogg
new file mode 100644 (file)
index 0000000..fb3b189
Binary files /dev/null and b/content_skaterift/sound/cs/ch2s6.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch3s1.JC.ogg b/content_skaterift/sound/cs/ch3s1.JC.ogg
new file mode 100644 (file)
index 0000000..8bf3d77
Binary files /dev/null and b/content_skaterift/sound/cs/ch3s1.JC.ogg differ
diff --git a/content_skaterift/sound/cs/ch3s1.MIKE.ogg b/content_skaterift/sound/cs/ch3s1.MIKE.ogg
new file mode 100644 (file)
index 0000000..cc25243
Binary files /dev/null and b/content_skaterift/sound/cs/ch3s1.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch3s2.MIKE.ogg b/content_skaterift/sound/cs/ch3s2.MIKE.ogg
new file mode 100644 (file)
index 0000000..f4de6ee
Binary files /dev/null and b/content_skaterift/sound/cs/ch3s2.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch3s3.MIKE.ogg b/content_skaterift/sound/cs/ch3s3.MIKE.ogg
new file mode 100644 (file)
index 0000000..b190d21
Binary files /dev/null and b/content_skaterift/sound/cs/ch3s3.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch3s3.PRESIDENT.ogg b/content_skaterift/sound/cs/ch3s3.PRESIDENT.ogg
new file mode 100644 (file)
index 0000000..651942d
Binary files /dev/null and b/content_skaterift/sound/cs/ch3s3.PRESIDENT.ogg differ
diff --git a/content_skaterift/sound/cs/ch4s1.MIKE.ogg b/content_skaterift/sound/cs/ch4s1.MIKE.ogg
new file mode 100644 (file)
index 0000000..5e3f72c
Binary files /dev/null and b/content_skaterift/sound/cs/ch4s1.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch4s1a.MIKE.ogg b/content_skaterift/sound/cs/ch4s1a.MIKE.ogg
new file mode 100644 (file)
index 0000000..bc95e73
Binary files /dev/null and b/content_skaterift/sound/cs/ch4s1a.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch4s2.FBI MAN.ogg b/content_skaterift/sound/cs/ch4s2.FBI MAN.ogg
new file mode 100644 (file)
index 0000000..b8ad834
Binary files /dev/null and b/content_skaterift/sound/cs/ch4s2.FBI MAN.ogg differ
diff --git a/content_skaterift/sound/cs/ch4s2.MIKE.ogg b/content_skaterift/sound/cs/ch4s2.MIKE.ogg
new file mode 100644 (file)
index 0000000..7860d0a
Binary files /dev/null and b/content_skaterift/sound/cs/ch4s2.MIKE.ogg differ
diff --git a/content_skaterift/sound/cs/ch4s3.JC.ogg b/content_skaterift/sound/cs/ch4s3.JC.ogg
new file mode 100644 (file)
index 0000000..b0fb832
Binary files /dev/null and b/content_skaterift/sound/cs/ch4s3.JC.ogg differ
diff --git a/content_skaterift/sound/cs/intro.OTHER.ogg b/content_skaterift/sound/cs/intro.OTHER.ogg
new file mode 100644 (file)
index 0000000..c6e6754
Binary files /dev/null and b/content_skaterift/sound/cs/intro.OTHER.ogg differ
index 1a07fbe2da006d9b50122a677a57d117dcede17d..755c85393c16d046b841b33aa72ceb10439c402d 100644 (file)
@@ -7,6 +7,9 @@
 
 #define KCOL_JOHN KRED
 #define KCOL_MIKE KBLU
+#define KCOL_PRES KYEL
+#define KCOL_FBI  KGRN
+#define KCOL_JESUS KMAG
 
 enum escript_event
 {
@@ -60,6 +63,73 @@ static void _skaterift_dialogue( struct sr_subtitle *subtitles, u32 *index,
    *index = i;
 }
 
+static bool _skaterift_script_intro( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "a1", KCOL_JESUS "Aww hello" },
+      { "a2", KCOL_JESUS "welcome to heaven." },
+      { "a3", KCOL_JESUS "Not quite your time yet," },
+      { "a4", KCOL_JESUS "but if you wanna take a quick look around" },
+      { "a5", KCOL_JESUS "then feel free to do so." },
+      { "a6", KCOL_JESUS "We've got a great grift shop on the way out!" },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/intro.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+
 static bool _skaterift_script_ch1s2( enum escript_event ev, const char *inf )
 {
    static u32 state, subtitle_id;
@@ -647,6 +717,77 @@ static bool _skaterift_script_ch2s3a( enum escript_event ev, const char *inf )
       { "m5", KCOL_MIKE "Don't you think its.. pointless?" },
       { "m6", KCOL_MIKE "Myeah I'm heading back to the shop" },
       { "m7", KCOL_MIKE "Coming?" },
+      { "m8", KCOL_MIKE "Ohh man.." },
+      { "m9", KCOL_MIKE "What a **** racket" },
+      { "m10", KCOL_MIKE "It's 8pm even." },
+      { "j1",  KCOL_JOHN "You guys can't be walking in and scaring me like that" },
+      { "m11", KCOL_MIKE "John, " },
+      { "m12", KCOL_MIKE "Whats that?" },
+      { "j2",  KCOL_JOHN "uhhh just uh just uhh" },
+      { "j3",  KCOL_JOHN "just cleaning something up for a client" },
+      { "m13", KCOL_MIKE "A 20ft tall quaterpipe" },
+      { "m14", KCOL_MIKE "for a client.." },
+      { "m15", KCOL_MIKE "on an island full of pensioners?" },
+      { "j4",  KCOL_JOHN "Yeah why not?" },
+      { "j5",  KCOL_JOHN "Skating's taking off right now!" },
+      { "m16", KCOL_MIKE "Come on mate.." },
+      { "j6",  KCOL_JOHN "Aight look.." },
+      { "j7",  KCOL_JOHN "I'm just skimming little bits from the surplus" },
+      { "j8",  KCOL_JOHN "I got this plan right." },
+      { "j9",  KCOL_JOHN "It's gonna be BIG" },
+      { "j10", KCOL_JOHN "People from all over the world are gonna come to see it." },
+      { "j11", KCOL_JOHN "You know how like uh..." },
+      { "j12", KCOL_JOHN "You know how no one visits the west island?" },
+      { "m17", KCOL_MIKE "Well.. yeah?" },
+      { "j13", KCOL_JOHN "Behold!" },
+      { "j14", KCOL_JOHN "Mango mega island!" },
+      { "j15", KCOL_JOHN "A skaters dream.." },
+      { "m18", KCOL_MIKE "Ohhh yeah john" },
+      { "m19", KCOL_MIKE "Looks great!" },
+      { "m20", KCOL_MIKE "And whos gonna build this.." },
+      { "m21", KCOL_MIKE "gigantic skate thing then..?" },
+      { "j16", KCOL_JOHN "Well uhhh" },
+      { "j17", KCOL_JOHN "Thats where I need your guys help." },
+      { "m22", KCOL_MIKE "What are we gonna help with exactly?" },
+      { "m23", KCOL_MIKE "You always do this John." },
+      { "m24", KCOL_MIKE "Have some grand idea and suddenly everyones onboard with it." },
+      { "j18", KCOL_JOHN "Whens the last time I asked you for anything?" },
+      { "m25", KCOL_MIKE "Yesterday.." },
+      { "j19", KCOL_JOHN "Oh..." },
+      { "j20", KCOL_JOHN "Yeah, anyway" },
+      { "j21", KCOL_JOHN "All I need is for you guys to finish the time trials" },
+      { "j22", KCOL_JOHN "Go work on those, and come back when you've got it." },
+      { "m26", KCOL_MIKE "Yeah well I got news for you!" },
+      { "m27", KCOL_MIKE "Bird here has smashed all of them already." },
+      { "j23", KCOL_JOHN "wait what?" },
+      { "j24", KCOL_JOHN "You did!?" },
+      { "j25", KCOL_JOHN "really???" },
+      { "j26", KCOL_JOHN "Holy I knew you were good!" },
+      { "m28", KCOL_MIKE "Yeah but uhh.." },
+      { "m29", KCOL_MIKE "What exactly does this have to do with building a world record size skatepark island?" },
+      { "j27", KCOL_JOHN "You see.." },
+      { "j28", KCOL_JOHN "It was the missing component. It was speed." },
+      { "j29", KCOL_JOHN "It's all we needed, to build a time net" },
+      { "j30", KCOL_JOHN "Large enough to create infinite energy." },
+      { "m30", KCOL_MIKE "Infinite.. energy..?" },
+      { "j31", KCOL_JOHN "Yeah! You know to uh contact Allen and Alvin." },
+      { "j32", KCOL_JOHN "They're the ones who are gonna help us with this whole thing." },
+      { "m31", KCOL_MIKE "Them! Ahhh no man" },
+      { "m32", KCOL_MIKE "not the aliens again.." },
+      { "m33", KCOL_MIKE "the tiny little dudes you saw in a drug induced coma" },
+      { "m34", KCOL_MIKE "are gonna help us build a megapark, on an abandoned island" },
+      { "m35", KCOL_MIKE "I dont even know why I asked.." },
+      { "m36", KCOL_MIKE "I'm clocking out. See you later." },
+      { "j33", KCOL_JOHN "Look..." },
+      { "j34", KCOL_JOHN "I'm not crazy, I promise. Just trust me." },
+      { "j35", KCOL_JOHN "Lemme prove it." },
+      { "j36", KCOL_JOHN "Bring this with you, hold onto it." },
+      { "j37", KCOL_JOHN "Skate those trails as fast as you can with it on you." },
+      { "j38", KCOL_JOHN "You'll understand when it happens," },
+      { "j39", KCOL_JOHN "And you'll see what I mean by that" },
+      { "j40", KCOL_JOHN "You'll just see it.. and" },
+      { "j41", KCOL_JOHN "If anyone asks, you didn't get this from me." },
+      { "j42", KCOL_JOHN "But I'll be there, I'll be watching, just get on with it." },
       { NULL, NULL },
       };
       _skaterift_dialogue( EN, &subtitle_id, inf );
@@ -691,6 +832,789 @@ static bool _skaterift_script_ch2s3a( enum escript_event ev, const char *inf )
    return 0;
 }
 
+static bool _skaterift_script_ch2s4( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "j1",  KCOL_JOHN "Oh my god.." },
+      { "j2",  KCOL_JOHN "You **** did it now" },
+      { "j3",  KCOL_JOHN "I told you I am not crazy!" },
+      { "j4",  KCOL_JOHN "You've done me a real solid mate." },
+      { "j5",  KCOL_JOHN "When I switch this thing on" },
+      { "j6",  KCOL_JOHN "It's gonna broadcast our location to them.." },
+      { "j7",  KCOL_JOHN "We have just enough power. Thanks to you my friend" },
+      { "j8",  KCOL_JOHN "Okayyy any second" },
+      { "j9",  KCOL_JOHN "BOSH" },
+      { "j10",  KCOL_JOHN "HELLO MY FRIENDS" },
+      { "j11",  KCOL_JOHN "WE NEED HELP" },
+      { "j12",  KCOL_JOHN "THIS IS CAPTAIN JOHN COCROACH" },
+      { "j13",  KCOL_JOHN "PLEASE COME AS SOON AS YOU CAN TO MT.ZERO ISLAND" },
+      { "j14",  KCOL_JOHN "Our coordinates are...." },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch2s4.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch2e1( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "j1",  KCOL_JOHN "Hey bird I'm just working on some boards here." },
+      { "j2",  KCOL_JOHN "If you wanna give me a graphic," },
+      { "j3",  KCOL_JOHN "I'll print it onto this plywood and press it" },
+      { "j4",  KCOL_JOHN "Mike'l griptape it and seal it" },
+      { "j5",  KCOL_JOHN "Ready to sell and skate!" },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch2e1.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch2s5( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "m1",  KCOL_MIKE "Hi mate, hows it goin?" },
+      { "m2",  KCOL_MIKE "Yeah yeah.. I get you.. um." },
+      { "m3",  KCOL_MIKE "I genuinely have no idea where he found that cell thing" },
+      { "m4",  KCOL_MIKE "I reckon it came of some kind of secret government tech or whatever" },
+      { "m5",  KCOL_MIKE "but.." },
+      { "m6",  KCOL_MIKE "Now you know what he was doing with all those stupid poles he put up across the island" },
+      { "m7",  KCOL_MIKE "I'm starting to think I might be going crazy but.." },
+      { "m8",  KCOL_MIKE "Did you see the whole west side has actually been taken over?" },
+      { "m9",  KCOL_MIKE "Just like JC was saying.." },
+      { "m10",  KCOL_MIKE "Are you telling me the aliens are actually real?" },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch2s5.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch2s6( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "j1",  KCOL_JOHN "Ello guys" },
+      { "j2",  KCOL_JOHN "Bout time you showed up" },
+      { "j3",  KCOL_JOHN "Look who I've got here!" },
+      { "m1",  KCOL_MIKE "Uhhhhhhhhhhhhhhhhhhhhhhhhhhh" },
+      { "m2",  KCOL_MIKE "Right then." },
+      { "m3",  KCOL_MIKE "I almost feel bad for these guys" },
+      { "m4",  KCOL_MIKE "Couldve' been any scientist across the planet" },
+      { "m5",  KCOL_MIKE "you know actually smart people" },
+      { "m6",  KCOL_MIKE "but no.." },
+      { "m7",  KCOL_MIKE "JC somehow contacts them first" },
+      { "j4",  KCOL_JOHN "Heyyy man." },
+      { "j5",  KCOL_JOHN "This required a special kind of science" },
+      { "j6",  KCOL_JOHN "The kinda stuff the world isn't quite ready for yet." },
+      { "j7",  KCOL_JOHN "But if you're done insulting me.." },
+      { "j8",  KCOL_JOHN "We're off to the states for a bit." },
+      { "j9",  KCOL_JOHN "Fancy a road trip?" },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch2s6.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch3s1( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "j1",  KCOL_JOHN "Ohh this is it guys." },
+      { "j2",  KCOL_JOHN "Good enough!" },
+      { "m1",  KCOL_MIKE "Never even thought I'd visit the USA" },
+      { "m2",  KCOL_MIKE "But here we are I guess.." },
+      { "j3",  KCOL_JOHN "I've had weirder sundays." },
+      { "m3",  KCOL_MIKE "Somehow I'm not surprised." },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch3s1.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch3s2( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "m1",  KCOL_MIKE "Is that the FBI??" },
+      { "m2",  KCOL_MIKE "I don't know about this man things are getting weird." },
+      { "m3",  KCOL_MIKE "Oh no that is not good" },
+      { "m4",  KCOL_MIKE "What do they even want with him?" },
+      { "m5",  KCOL_MIKE "Ahhh yeah, the aliens. That'l do it." },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch3s2.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch3s3( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "p1",  KCOL_PRES "Yall have some explaining to do here.." },
+      { "p2",  KCOL_PRES "Every single power plant in the USA is currently offline" },
+      { "p3",  KCOL_PRES "And yet.." },
+      { "p4",  KCOL_PRES "There is no national emergency?" },
+      { "p5",  KCOL_PRES "Nothing is wrong!" },
+      { "p6",  KCOL_PRES "So where the hell is all this power coming from?" },
+      { "p7",  KCOL_PRES "We traced it back here, to you guys" },
+      { "p8",  KCOL_PRES "Now, please. Enlighten me." },
+      { "p9",  KCOL_PRES "How exactly are you powering all of America?" },
+      { "p10", KCOL_PRES "From this one tiny establishment?" },
+      { "m1",  KCOL_MIKE "Look, this is gonna be a tough one to explain mate" },
+      { "m2",  KCOL_MIKE "And to be honest I don't really get it myself" },
+      { "p11", KCOL_PRES "Do your best!" },
+      { "m3",  KCOL_MIKE "Mr. President, we saw you take JC," },
+      { "m4",  KCOL_MIKE "Didn't he explain it to you already?" },
+      { "p12", KCOL_PRES "JC JC.." },
+      { "p13", KCOL_PRES "Ah! John Cockroach.." },
+      { "p14", KCOL_PRES "Of course. He's a friend of yours?" },
+      { "m5",  KCOL_MIKE "Yeah.. I'm an intern at his wood company." },
+      { "m6",  KCOL_MIKE "And this is just a friend of ours here." },
+      { "p15", KCOL_PRES "So what you're telling me is, and what he told me is," },
+      { "p16", KCOL_PRES "Three random people, from a wood company," },
+      { "p17", KCOL_PRES "in Tasmania, Australia" },
+      { "p18", KCOL_PRES "just happen to have nuclear fusion" },
+      { "m7",  KCOL_MIKE "Yeah I guess.." },
+      { "p19", KCOL_PRES "Man I cannot believe that old guy was telling the truth this whole time" },
+      { "m8",  KCOL_MIKE "Thats what I've been saying!" },
+      { "p20", KCOL_PRES "The world don't make sense any more" },
+      { "p21", KCOL_PRES "Well! Fortunately for you lot," },
+      { "p22", KCOL_PRES "you're coming with us!" },
+      { "p23", KCOL_PRES "We're sending you to Cambodia." },
+      { "m9",  KCOL_MIKE "What!?" },
+      { "m10", KCOL_MIKE "Can he even do that?" },
+      { "p24", KCOL_PRES "Yes I can. Now, get in." },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch3s3.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch4s1a( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "m1",  KCOL_MIKE "This has gotta be some kindof dream right?" },
+      { "m2",  KCOL_MIKE "I mean... Cambodia?" },
+      { "m3",  KCOL_MIKE "What are we even doing here.?" },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch4s1a.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+
+static bool _skaterift_script_ch4s1( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "m1",  KCOL_MIKE "John hasn't turned up anywhere.." },
+      { "m2",  KCOL_MIKE "Not here, not back in Australia" },
+      { "m3",  KCOL_MIKE "nowhere?" },
+      { "m4",  KCOL_MIKE "I don't know how we can trust a single note.." },
+      { "m5",  KCOL_MIKE "I mean it is JC but.." },
+      { "m6",  KCOL_MIKE "Come on." },
+      { "m7",  KCOL_MIKE "I havn't seen him in weeks" },
+      { "m8",  KCOL_MIKE "I'm gonna go home," },
+      { "m9",  KCOL_MIKE "I'm bailing on this one man I'm sorry." },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch4s1.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch4s2( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "m1",  KCOL_MIKE "What the hell is that thing?" },
+      { "f1",  KCOL_FBI  "Look man, all they told is that uhh" },
+      { "f2",  KCOL_FBI  "they're sending you up to one of saturns moons.." },
+      { "f3",  KCOL_FBI  "On that thing." },
+      { "f4",  KCOL_FBI  "To help you on your mission." },
+      { "f5",  KCOL_FBI  "You guys are more important than any person on earth right now" },
+      { "f6",  KCOL_FBI  "According to the president." },
+      { "f7",  KCOL_FBI  "But obviously this is some kind of joke I'm not in on." },
+      { "f8",  KCOL_FBI  "I don't believe a word of it." },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch4s2.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+static bool _skaterift_script_ch4s3( enum escript_event ev, const char *inf )
+{
+   static u32 state, subtitle_id;
+   static struct cs_instance *override_inst;
+
+   if( ev == k_escript_event_call )
+   {
+      state = k_escript_state_loading;
+      override_inst = NULL;
+      subtitle_id = 0;
+      vg_info( "test:state = loading\n" );
+   }
+
+   if( ev == k_escript_event_cutscene_marker )
+   {
+      struct sr_subtitle EN[] = {
+      { "j1", KCOL_JOHN "Betcha didn't think ya'd see me here!!?" },
+      { "j2", KCOL_JOHN "Did you miss me?" },
+      { "j3", KCOL_JOHN "You're probably wondering how the hell I got up here myself right?" },
+      { "j4", KCOL_JOHN "Well. I'm not gonna tell you." },
+      { "j5", KCOL_JOHN "It was all a trick. A ROUSE!" },
+      { "j6", KCOL_JOHN "Truth is, none of this is really real!" },
+      { "j7", KCOL_JOHN "And I'm leaving you here." },
+      { "j8", KCOL_JOHN "Cause its the only way I'm gonna get you to wake up." },
+      { "j9", KCOL_JOHN "Sorry I had to do all this to you..." },
+      { "j10",KCOL_JOHN "We can still be friends right?" },
+      { NULL, NULL },
+      };
+      _skaterift_dialogue( EN, &subtitle_id, inf );
+
+      return 0;
+   }
+
+   /* scene 
+    * ---------------------------------------------------------------  */
+
+   if( state == k_escript_state_loading )
+   {
+      if( cmd_cutscene_load( 1, (const char *[]){ "metascenes/ch4s3.ms" } ) )
+      {
+         state = k_escript_state_initializing;
+         vg_info( "test:state = initializing\n" );
+      }
+   }
+
+   if( state == k_escript_state_initializing )
+   {
+      if( _cutscene.state == k_cutscene_state_ready )
+      {
+         _skaterift_script_bind_player();
+         state = k_escript_state_playing;
+         vg_info( "test:state = playing\n" );
+         _cutscene_play();
+      }
+   }
+
+   if( state == k_escript_state_playing )
+   {
+      if( _cutscene.state == k_cutscene_state_done )
+      {
+         state = k_escript_state_end;
+         vg_info( "test:state = end\n" );
+         _cutscene_unload();
+         return 1;
+      }
+   }
+
+   return 0;
+}
+
+
 /* This is the development one */
 static bool _skaterift_script_test( enum escript_event ev, const char *inf )
 {
@@ -813,6 +1737,7 @@ static bool _skaterift_script_test( enum escript_event ev, const char *inf )
 enum escript_script_id
 {
    k_escript_script_id_test = 0,
+   k_escript_script_id_intro,
    k_escript_script_id_ch1s2,
    k_escript_script_id_ch1s3,
    k_escript_script_id_ch1s3b,
@@ -822,6 +1747,17 @@ enum escript_script_id
    k_escript_script_id_ch2s1,
    k_escript_script_id_ch2s2,
    k_escript_script_id_ch2s3a,
+   k_escript_script_id_ch2s4,
+   k_escript_script_id_ch2e1,
+   k_escript_script_id_ch2s5,
+   k_escript_script_id_ch2s6,
+   k_escript_script_id_ch3s1,
+   k_escript_script_id_ch3s2,
+   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_max 
 };
 
@@ -839,6 +1775,7 @@ struct script_binding
 _script_bindings[] =
 {
    [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 },
@@ -848,6 +1785,17 @@ _script_bindings[] =
    [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 },
 };
 
 static int _skaterift_script_hook( int argc, const char *argv[] )