package { import bigroom.input.KeyPoll; import flash.display.*; import flash.geom.*; import flash.events.*; import flash.net.*; import flash.desktop.NativeApplication; public class gameclass extends Sprite { public var GAMEMODE:int = 0; public var TITLEMODE:int = 1; public var CLICKTOSTART:int = 2; public var FOCUSMODE:int = 3; public var MAPMODE:int = 4; public var TELEPORTERMODE:int = 5; public var GAMECOMPLETE:int = 6; public var GAMECOMPLETE2:int = 7; public var EDITORMODE:int = 8; public var CONTROLTUTORIALMODE:int = 9; public function gameclass(dwgfx:dwgraphicsclass, map:mapclass, obj:entityclass, help:helpclass, music:musicclass):void { platform.init(); //Cross platform specific init NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, onActivate); NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, onDeactivate); infocus = true; paused = false; muted = false; globalsound = 1; /* if(device.devicetype != device.MOBILE){ addEventListener(Event.DEACTIVATE, windowNotActive); addEventListener(Event.ACTIVATE, windowActive); } */ //iOS only, turn off for android scores.init(stage); //gamestate = GAMEMODE; hascontrol = true; jumpheld = false; advancetext = false; jumppressed = 0; gravitycontrol = 0; teleport = false; companion = 0; roomchange = false; edteleportent = 0; //Added in the port! teleport_to_new_area = false; mapheld = false; teleport_to_x = 0; teleport_to_y = 0; teleportscript = ""; savemystats = false; menukludge = false; quickrestartkludge = false; tapleft = 0; tapright = 0; recording = 0; recordinit = false; playbackfinished = false; recordstring = ""; advancetext = false; pausescript = false; completestop = false; activeactivity = -1; act_fade = 0; backgroundtext = false; startscript = false; newscript = ""; inintermission = false; alarmon = false; alarmdelay = 0; blackout = false; creditposx = 0; creditposy = 0; creditposdelay = 0; useteleporter = false; teleport_to_teleporter = 0; teleblock = new Rectangle(); activetele = false; readytotele = 0; activity_lastprompt = ""; activity_r = 0; activity_g = 0; activity_b = 0; creditposition = 0; bestgamedeaths = -1; //Accessibility Options colourblindmode = false; noflashingmode = false; slowdown = 30; fullscreen = false;// true; //Assumed true at first unless overwritten at some point! advanced_mode = false; advanced_smoothing = true; advanced_scaling = 0; nodeathmode = false; nocutscenes = false; for (i = 0; i < 50; i++){ customscript.push(""); } customcol = 0; for (i = 0; i < 6; i++) { var cstats:Boolean; cstats = false; crewstats.push(cstats); tele_crewstats.push(false); quick_crewstats.push(false); besttimes.push( -1); besttrinkets.push( -1); bestlives.push( -1); bestrank.push( -1); } crewstats[0] = true; lastsaved = 0; tele_gametime = "00:00"; tele_trinkets = 0; tele_currentarea = "Error! Error!"; quick_gametime = "00:00"; quick_trinkets = 0; quick_currentarea = "Error! Error!"; //Menu stuff initiliased here: for (i = 0; i < 25; i++) { menuoptions.push(new String); menuoptions_alt.push(new String); menuoptionsactive.push(new Boolean); menuoptionslayout.push(new int(0)); var nb1:Boolean, nb2:Boolean; nb1 = false; nb2 = false; unlock.push(nb1); unlocknotify.push(nb2); } for (i = 0; i < 25; i++) { unlock[i] = false; unlocknotify[i] = false; } nummenuoptions = 0; currentmenuoption = 0; menuselection = "null"; currentmenuname = "null"; menuxoff = 0; menuyoff = 0; menucountdown = 0; menudest="null"; createmenu("mainmenu"); deathcounts = 0; gameoverdelay = 0; frames = 0; seconds = 0; minutes = 0; hours = 0; gamesaved = false; savetime = "00:00"; savearea = "nowhere"; savetrinkets = 0; intimetrial = false; timetrialcountdown = 0; timetrialshinytarget = 0; timetrialparlost = false; timetrialpar = 0; timetrialresulttime = 0; totalflips = 0; hardestroom = "Welcome Aboard"; hardestroomdeaths = 0; currentroomdeaths=0; sfpsmode = false; //by default, play at 30 fps inertia = 1.1; swnmode = false; swntimer = 0; swngame = 0;//Not playing sine wave ninja! swnstate = 0; swnstate2 = 0; swnstate3 = 0; swnstate4 = 0; swndelay = 0; swndeaths = 0; supercrewmate = false; scmhurt = false; scmprogress = 0; scmmoveme = false; swncolstate = 0; swncoldelay = 0; swnrecord = 0; swnbestrank = 0; swnrank = 0; swnmessage = 0; for (i = 0; i < 200; i++) { customlevelstats.push(""); customlevelscore.push(int(0)); } clearcustomlevelstats(); //Save stuff for (i = 0; i < 3; i++) { var supersave:saveclass = new saveclass(); savestate.push(supersave); } telecookie = SharedObject.getLocal("vvvvvv_telesave"); quickcookie = SharedObject.getLocal("vvvvvv_quicksave"); levelstatscookie = SharedObject.getLocal("vvvvvv_levelstats"); for (var i:int = 0; i < editor.playerlevel.length; i++) { customcookie.push(SharedObject.getLocal("vvvvvv_custom_" + String(i))); customcookieexists.push(false); customcookiesummary.push(false); } levelstatscookieloaded = true; if (levelstatscookie.data.num == undefined) { levelstatscookie.data.num = 0; } if (telecookie.data.savex == undefined) { telecookieexists = false; telesummary = ""; } else { telecookieexists = true; telesummary = telecookie.data.summary; } if (quickcookie.data.savex == undefined) { quickcookieexists = false; quicksummary = ""; } else { quickcookieexists = true; quicksummary = quickcookie.data.summary; } for (i = 0; i < editor.playerlevel.length; i++) { if(customcookie[i].data.savex == undefined) { customcookieexists[i] = false; customcookiesummary[i] = ""; } else { customcookieexists[i] = true; customcookiesummary[i] = customcookie[i].data.summary; } } screenshake = flashlight = 0; stat_trinkets = 0; test = false; teststring = "TEST = True"; state = 1; statedelay = 0; updatestate(dwgfx, map, obj, help, music); } public function onActivate(e:Event):void { platform.callonwake(); infocus = true; } public function onDeactivate(e:Event):void { infocus = false; } public function clearcustomlevelstats():void{ //just clearing the arrays for (var i:int = 0; i < 200; i++) { customlevelstats[i] = ""; customlevelscore[i] = 0; } numcustomlevelstats = 0; customlevelstatsloaded=false; //To ensure we don't load it where it isn't needed } public function updatecustomlevelstats(clevel:String, cscore:int):void{ var tvar:int = -1; for (var j:int = 0; j < numcustomlevelstats; j++) { if (clevel == customlevelstats[j]) { tvar=j; j=numcustomlevelstats+1; } } if (tvar >= 0) { //update existing entry customlevelscore[tvar]=cscore; }else{ //add a new entry if (numcustomlevelstats < 200) { customlevelstats[numcustomlevelstats]=clevel; customlevelscore[numcustomlevelstats]=cscore; numcustomlevelstats++; } } savecustomlevelstats(); } public function loadcustomlevelstats():void{ //Totally rewriten for mobile version, probably broken if (!customlevelstatsloaded) { numcustomlevelstats = levelstatscookie.data.num; if (numcustomlevelstats > 0) { if (numcustomlevelstats >= 200) numcustomlevelstats = 199; var lvlstring:String = levelstatscookie.data.customlevelscore; var values:Array; values = new Array; values = lvlstring.split(","); for (var i:int = 0; i < values.length; i++) { if (i < 200) customlevelscore[i] = int(values[i]); } lvlstring = levelstatscookie.data.customlevelstats; values = new Array; values = lvlstring.split("|"); for(i = 0; i < values.length; i++){ if (i < 200) customlevelstats[i] = values[i]; } } } } public function savecustomlevelstats():void { //Rewritten for mobile levelstatscookie = SharedObject.getLocal("vvvvvv_levelstats"); if (numcustomlevelstats >= 200) numcustomlevelstats = 199; levelstatscookie.data.num = numcustomlevelstats; var lvlstring:String = ""; for (var i:int = 0; i < numcustomlevelstats; i++) { lvlstring = lvlstring + customlevelscore[i] + ","; } levelstatscookie.data.customlevelscore = lvlstring; lvlstring = "" for (i = 0; i < numcustomlevelstats; i++) { lvlstring = lvlstring + customlevelstats[i] + "|"; } levelstatscookie.data.customlevelstats = lvlstring; levelstatscookie.flush(); levelstatscookie.close(); } public function inittouchpoints(key:KeyPoll):void { if (key.touchPoints > 0) { my = key.touchy[key.touchPoints - 1]; } } public function inbox(x:int, y:int, x1:int, y1:int, w:int, h:int):Boolean { if (x >= x1 && x <= x1 + w) { if (y >= y1 && y <= y1 + h) { return true; } } return false; } public var m_touchx:int, m_touchy:int; public var m_pressed:Boolean = false; public var b_gap:int = 40, b_size:int = 26; public function gettouchpoints_mainmenu(key:KeyPoll, dwgfx:dwgraphicsclass):void { //Checks for last touchpress. For main menu, check to see that you've lifted //your finger before continuing. if (!m_pressed) { if (key.touchPoints > 0) { m_pressed = true; m_touchx = key.touchx[key.touchPoints - 1]; m_touchy = key.touchy[key.touchPoints - 1]; if (dwgfx.flipmode) m_touchy = dwgfx.devicey - m_touchy; //These coordinates now need to be translated to actual screen coordinates //Gamecenter if(menustart && !showloadingnotice) { if (inbox(m_touchx, m_touchy, 0, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing * 2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing * 2))) { //Bring up game center achievements scores.showAchievements(); } } m_touchx -= dwgfx.screen.x; m_touchx = m_touchx / dwgfx.screensizemultiplier; m_touchy = m_touchy / dwgfx.screensizemultiplier; //Ok! Now we see if we've pressed any buttons! for (i = 0; i < nummenuoptions; i++) { switch(menuoptionslayout[i]) { case 0: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 70, 140 + (i * b_gap) + menuyoff - 6, 140, b_size)) { press_action = true; currentmenuoption = i; } } break; case 1: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 70, 140 + (i * b_gap) - 10 + menuyoff - 6, 140, b_size * 2)) { press_action = true; currentmenuoption = i; } } break; case 2: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 70, 140 + (i * b_gap)+20 + menuyoff - 6, 140, b_size)) { press_action = true; currentmenuoption = i; } } break; case 3: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, -8, 230 - 6, 70, b_size)) { press_action = true; currentmenuoption = i; } } break; case 4: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 90, 140 + (i * b_gap) + menuyoff - 6, 180, b_size)) { press_action = true; currentmenuoption = i; } } break; case 5: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 10, 140 + (i * 68)-10 + menuyoff - 6, 140, 40)) { press_action = true; currentmenuoption = i; } } break; case 6: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 170, 140 + ((i-3) * 68)-10 + menuyoff - 6, 140, 40)) { press_action = true; currentmenuoption = i; } } break; case 7: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, -8, 230 - 6-10, 70, b_size)) { press_action = true; currentmenuoption = i; } } break; case 8: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 320 - 70, 230 - 6-10, 70, b_size)) { press_action = true; currentmenuoption = i; } } break; case 9: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 90, 140 + (i * b_gap) + menuyoff - 6, 180, b_size)) { press_action = true; currentmenuoption = i; } } break; case 10: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 70, 240 - b_gap, 140, b_size)) { press_action = true; currentmenuoption = i; } } break; case 11: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 160 - 140, 140 + (i * 65)-10 + menuyoff - 6, 280, (b_size*2)+5)) { press_action = true; currentmenuoption = i; } } break; case 12: if (menuoptionsactive[i]) { if (inbox(m_touchx, m_touchy, 320 - 70, 0, 70, b_size+10)) { press_action = true; currentmenuoption = i; } } break; } if (!menustart) press_action = true; } } }else { if (key.touchPoints == 0) { m_pressed = false; } } } public function gettouchpoints_gamemenu(key:KeyPoll, obj:entityclass, music:musicclass, dwgfx:dwgraphicsclass):void { //Buttons for in game menu! if (!m_pressed) { if (key.touchPoints > 0) { m_pressed = true; m_touchx = key.touchx[key.touchPoints - 1]; m_touchy = key.touchy[key.touchPoints - 1]; if (dwgfx.flipmode) m_touchy = dwgfx.devicey - m_touchy; if (inbox(m_touchx, m_touchy, dwgfx.devicex - dwgfx.button_image_width[0] - dwgfx.buttonxspacing, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing*2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing*2) )) { press_map = true; } if(menupage == 0){ if (inbox(m_touchx, m_touchy, 0, 0, dwgfx.button_image_width[1] + (dwgfx.buttonxspacing*2), dwgfx.button_image_height[1] + (dwgfx.buttonyspacing*2) )) { menupage = 30; music.playef(11, 10); } } //These coordinates now need to be translated to actual screen coordinates m_touchx -= dwgfx.screen.x; m_touchx = m_touchx / dwgfx.screensizemultiplier; m_touchy = m_touchy / dwgfx.screensizemultiplier; //Ok! Now we see if we've pressed any buttons! if (inbox(m_touchx, m_touchy, 30 - 8-10, 220-20, 56+20, b_size+40)) { //Press map button //disablekludge_1 = !disablekludge_1; menupage = 0; music.playef(11, 10); }else if (inbox(m_touchx, m_touchy, 103-10, 220-20, 56+20, b_size+40)) { //Press crew button //disablekludge_2 = !disablekludge_2; menupage = 1; music.playef(11, 10); }else if (inbox(m_touchx, m_touchy, 185-4-10, 220-20, 56+20, b_size+40)) { //Press stats button //disablekludge_3 = !disablekludge_3; menupage = 2; music.playef(11, 10); }else if (inbox(m_touchx, m_touchy, 258-10, 220-20, 56+20, b_size+40)) { //Press quit button //disablekludge_4 = !disablekludge_4; menupage = 3; music.playef(11, 10); } if (menupage == 1 && !insecretlab && obj.flags[67] == 1) { if (inbox(m_touchx, m_touchy, 160 + 4 - 24-20, 110-20, (8 * 6)+40, b_size+40)) { //Warp to ship! press_action = true; } } if (menupage == 3 || menupage == 10 || menupage == 20) { if (inbox(m_touchx, m_touchy, 160 + 4 - 24-20, 110-20, (8 * 6)+40, b_size+40)) { //Press quit button press_action = true; } } if (menupage == 30) { //Change controls if (inbox(m_touchx, m_touchy, 160 - (12 * 8) - 20-10, 156-20, (8 * 8)+20, b_size+40)) { if(controlstyle!=0){ controlstyle = 0; music.playef(11, 10); savemystats = true; } } if (inbox(m_touchx, m_touchy, 160 - (4 * 8)-20, 156-10, (8 * 8)+20, b_size+40)) { if(controlstyle!=1){ controlstyle = 1; music.playef(11, 10); savemystats = true; } } if (inbox(m_touchx, m_touchy, 160 + (4 * 8)+20-10, 156-20, (8 * 8)+20, b_size+40)) { if(controlstyle!=2){ controlstyle = 2; music.playef(11, 10); savemystats = true; } } } } }else { if (key.touchPoints == 0) { m_pressed = false; } } } public function gettouchpoints_teleportmenu(key:KeyPoll, music:musicclass, dwgfx:dwgraphicsclass):void { //Buttons for in game menu! if (!m_pressed) { if (key.touchPoints > 0) { m_pressed = true; m_touchx = key.touchx[key.touchPoints - 1]; m_touchy = key.touchy[key.touchPoints - 1]; if (dwgfx.flipmode) m_touchy = dwgfx.devicey - m_touchy; //These coordinates now need to be translated to actual screen coordinates m_touchx -= dwgfx.screen.x; m_touchx = m_touchx / dwgfx.screensizemultiplier; m_touchy = m_touchy / dwgfx.screensizemultiplier; //Ok! Now we see if we've pressed any buttons! if (inbox(m_touchx, m_touchy, 5+10-20, 220-10-20, 64+40, b_size+40)) { //Press left press_left = true; music.playef(11, 10); }else if (inbox(m_touchx, m_touchy,320 - 5 - 64-20, 220-10-20, 64+40, b_size+40)) { //Press right press_right = true; music.playef(11, 10); }else if (inbox(m_touchx, m_touchy, 160 - 40+4-20, 220-20, 64+16+40, b_size+40)) { //Press teleport press_map = true; music.playef(11, 10); } } }else { if (key.touchPoints == 0) { m_pressed = false; } } } public function gettouchpoints_gamecomplete(key:KeyPoll, music:musicclass, dwgfx:dwgraphicsclass):void { //Buttons for in game menu! if (!m_pressed) { if (key.touchPoints > 0) { /* m_touchx = key.touchx[key.touchPoints - 1]; m_touchy = key.touchy[key.touchPoints - 1]; if (dwgfx.flipmode) m_touchy = dwgfx.devicey - m_touchy; //These coordinates now need to be translated to actual screen coordinates m_touchx -= dwgfx.screen.x; m_touchx = m_touchx / dwgfx.screensizemultiplier; m_touchy = m_touchy / dwgfx.screensizemultiplier; */ press_action = true; } }else { if (key.touchPoints == 0) { m_pressed = false; } } } public function gettouchpoints_controltutorial(key:KeyPoll, music:musicclass, dwgfx:dwgraphicsclass):void { //Buttons for in game menu! if (!m_pressed) { if (key.touchPoints > 0) { m_pressed = true; m_touchx = key.touchx[key.touchPoints - 1]; m_touchy = key.touchy[key.touchPoints - 1]; if (dwgfx.flipmode) m_touchy = dwgfx.devicey - m_touchy; //These coordinates now need to be translated to actual screen coordinates m_touchx -= dwgfx.screen.x; m_touchx = m_touchx / dwgfx.screensizemultiplier; m_touchy = m_touchy / dwgfx.screensizemultiplier; //Ok! Now we see if we've pressed any buttons! if (inbox(m_touchx, m_touchy, 160 + 4 - 24-20, 200-20, (8 * 7)+40, b_size+40)) { //Press continue press_action = true; music.playef(11, 10); } } }else { if (key.touchPoints == 0) { m_pressed = false; } } } public function gettouchpoints(key:KeyPoll, dwgfx:dwgraphicsclass):void { //Iterate through touch points, find buttons that are being pressed switch(controlstyle) { case 0: //Swipe controls for (i = 0; i < key.touchPoints; i++) { /*if (inbox(key.touchx[i], key.touchy[i], 0, dwgfx.buttonpos[0].y - 100, dwgfx.buttonsize + dwgfx.buttonxspacing+ (dwgfx.buttonxspacing/2), dwgfx.buttonsize + 200)) { press_left = true; }else if (inbox(key.touchx[i], key.touchy[i], dwgfx.buttonpos[1].x - (dwgfx.buttonxspacing/2), dwgfx.buttonpos[1].y - 100, dwgfx.buttonsize + (dwgfx.buttonxspacing*3), dwgfx.buttonsize + 200)) { press_right = true; }else */ if (insecretlab) { if (inbox(key.touchx[i], key.touchy[i], 0, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing * 2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing * 2) )) { scores.opengamecenter(); press_map = true; } } if (inbox(key.touchx[i], key.touchy[i], dwgfx.devicex - dwgfx.button_image_width[0] - dwgfx.buttonxspacing, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing*2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing*2) )) { press_map = true; }else { if (key.touchid[i] != key.controlstick) { press_action = true; } } } if (key.pushleft) press_left = true; if (key.pushright) press_right = true; break; case 1: //both sides for (i = 0; i < key.touchPoints; i++) { //if (inbox(key.touchx[i], key.touchy[i], 0, 0, dwgfx.devicex, dwgfx.devicey / 4)) { // press_action = true; //}else if (insecretlab) { if (inbox(key.touchx[i], key.touchy[i], 0, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing * 2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing * 2) )) { scores.opengamecenter(); press_map = true; } } if (inbox(key.touchx[i], key.touchy[i], dwgfx.devicex - dwgfx.button_image_width[0] - dwgfx.buttonxspacing, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing*2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing*2) )) { press_map = true; }else{ if (inbox(key.touchx[i], key.touchy[i], 0, 0, dwgfx.devicex / 2, dwgfx.devicey)) { press_left = true; }else if (inbox(key.touchx[i], key.touchy[i], dwgfx.devicex / 2, 0, dwgfx.devicex / 2, dwgfx.devicey)) { press_right = true; } } } /* if (last_action > 0) { if (!press_left || !press_right) { last_action = 0; }else { press_left = false; press_right = false; } } */ //if (last_action > 0) { if (press_left && press_right) { if (last_left > 0 && last_right > 0) { press_left = false; press_right = false; press_action = true; last_action = 1; }else if (last_left > 0 && last_right == 0) { press_right = false; press_action = true; }else if (last_left == 0 && last_right > 0) { press_left = false; press_action = true; } } //} if (press_left) { last_left = 2; }else { if (last_left > 0) last_left--; } if (press_right) { last_right = 2; }else { if (last_right > 0) last_right--; } break; case 2: //D-Pad controls for (i = 0; i < key.touchPoints; i++) { if (insecretlab) { if (inbox(key.touchx[i], key.touchy[i], 0, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing * 2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing * 2) )) { scores.opengamecenter(); press_map = true; } } if (inbox(key.touchx[i], key.touchy[i], dwgfx.devicex - dwgfx.button_image_width[0] - dwgfx.buttonxspacing, 0, dwgfx.button_image_width[0] + (dwgfx.buttonxspacing*2), dwgfx.button_image_height[0] + (dwgfx.buttonyspacing*2) )) { press_map = true; }else if (inbox(key.touchx[i], key.touchy[i], 0, dwgfx.buttonpos[2].y - (dwgfx.devicey*2/3), dwgfx.buttonsize + dwgfx.buttonxspacing+ (dwgfx.buttonxspacing/2), dwgfx.devicey)) { press_left = true; }else if (inbox(key.touchx[i], key.touchy[i], dwgfx.buttonpos[3].x - (dwgfx.buttonxspacing / 2), dwgfx.buttonpos[3].y -(dwgfx.devicey*2 / 3), dwgfx.buttonsize + (dwgfx.buttonxspacing * 5), dwgfx.devicey)) { press_right = true; }else if (key.touchx[i] > dwgfx.devicex / 2) { press_action = true; } } break; } } public function windowNotActive(e:Event):void{ infocus = false; } public function windowActive(e:Event):void{ infocus = true; } public function customstart(obj:entityclass, music:musicclass):void{ jumpheld = true; savex = edsavex; savey = edsavey; saverx = edsaverx; savery = edsavery; savegc = edsavegc; savedir = edsavedir; //Worldmap Start //savex = 6 * 8; savey = 15 * 8; saverx = 46; savery = 54; savegc = 0; savedir = 1; //Final Level Current savepoint = 0; gravitycontrol = savegc; coins = 0; trinkets = 0; crewmates = 0; //state = 2; deathseq = -1; lifeseq = 10; //Not dead, in game initilisation state state = 0; deathseq = -1; lifeseq = 0; //let's teleport in! //state = 2500; //if (!nocutscenes) music.play(5); } public function start(obj:entityclass, music:musicclass):void { jumpheld = true; savex = 232; savey = 113; saverx = 104; savery = 110; savegc = 0; savedir = 1; //Worldmap Start //savex = 6 * 8; savey = 15 * 8; saverx = 46; savery = 54; savegc = 0; savedir = 1; //Final Level Current savepoint = 0; gravitycontrol = savegc; coins = 0; trinkets = 0; //state = 2; deathseq = -1; lifeseq = 10; //Not dead, in game initilisation state state = 0; deathseq = -1; lifeseq = 0; //let's teleport in! //state = 2500; if (!nocutscenes) music.play(5); } public function startspecial(t:int, obj:entityclass, music:musicclass):void { jumpheld = true; switch(t) { case 0: //Secret Lab savex = 104; savey = 169; saverx = 118; savery = 106; savegc = 0; savedir = 1; break; case 1: //Intermission 1 (any) savex = 80; savey = 57; saverx = 41; savery = 56; savegc = 0; savedir = 0; break; default: savex = 232; savey = 113; saverx = 104; savery = 110; savegc = 0; savedir = 1; //Worldmap Start break; } savepoint = 0; gravitycontrol = savegc; coins = 0; trinkets = 0; state = 0; deathseq = -1; lifeseq = 0; } public function starttrial(t:int, obj:entityclass, music:musicclass):void { jumpheld = true; switch(t) { case 0: //Space Station 1 savex = 200; savey = 161; saverx = 113; savery = 105; savegc = 0; savedir = 1; break; case 1: //Lab savex = 191; savey = 33; saverx = 102; savery = 116; savegc = 0; savedir = 1; break; case 2: //Tower savex = 84; savey = 193, saverx = 108; savery = 109; savegc = 0; savedir = 1; break; case 3: //Space Station 2 savex = 148; savey = 38; saverx = 112; savery = 114; savegc = 1; savedir = 0; break; case 4: //Warp savex = 52; savey = 73; saverx = 114; savery = 101; savegc = 0; savedir = 1; break; case 5: //Final savex = 101; savey = 113; saverx = 46; savery = 54; savegc = 0; savedir = 1; break; default: savex = 232; savey = 113; saverx = 104; savery = 110; savegc = 0; savedir = 1; //Worldmap Start break; } savepoint = 0; gravitycontrol = savegc; coins = 0; trinkets = 0; //state = 2; deathseq = -1; lifeseq = 10; //Not dead, in game initilisation state state = 0; deathseq = -1; lifeseq = 0; } public function starttest(obj:entityclass, music:musicclass):void { jumpheld = true; //savex = 19*8; savey = 17*8; saverx = 50; savery = 50; savegc = 0; savedir = 1; //Generic Start //savex = 19*8; savey = 18*8; saverx = 114; savery = 101; savegc = 0; savedir = 1; //Warp Zone Start //savex = 20*8; savey = 18*8; saverx = 113; savery = 100; savegc = 0; savedir = 1; //Warp Zone current //savex = 6 * 8; savey = 6 * 8; saverx = 113; savery = 105; savegc = 0; savedir = 1; //Space Station Start //savex = 6 * 8; savey = 6 * 8; saverx = 50; savery = 42; savegc = 0; savedir = 1; //Space Station Reversal //savex = 16 * 8; savey = 10 * 8; saverx = 116; savery = 107; savegc = 0; savedir = 1; //Space Station Tele //savex = 5 * 8; savey = 5 * 8; saverx = 112; savery = 114; savegc = 1; savedir = 1; //Space Station 2 Start //savex = 22*8; savey = 10*8; saverx = 113; savery = 108; savegc = 0; savedir = 1; //Space Station 2 Tele1 //savex = 9*8; savey = 13*8; saverx = 118; savery = 108; savegc = 0; savedir = 1; //Space Station 2 s.driller //savex = 10*8; savey = 22*8; saverx = 111; savery = 107; savegc = 0; savedir = 1; //Space Station 2 ending //savex = 24*8; savey = 26*8; saverx = 53; savery = 52; savegc = 0; savedir = 1; //Actual start //savex = 5 * 8; savey = 5 * 8; saverx = 117; savery = 108; savegc = 0; savedir = 1; //Space Station 2 wip //savex = 18 * 8; savey = 24 * 8; saverx = 100; savery = 116; savegc = 0; savedir = 1; //Lab outside, start //savex = 17 * 8; savey = 24 * 8; saverx = 107; savery = 115; savegc = 1; savedir = 1; //Lab tele //savex = 31 * 8; savey = 12 * 8; saverx = 49; savery = 54; savegc = 1; savedir = 1; //Lab, final bit //savex = 19 * 8; savey = 14 * 8; saverx = 104; savery = 102; savegc = 0; savedir = 1; //Lab, ending //savex = 20; savey = 680*8; saverx = 109; savery = 101; savegc = 0; savedir = 1; //The tower //savex = 6 * 8; savey = 6 * 8; saverx = 108; savery = 109; savegc = 0; savedir = 1; //Area just before tower //savex = 6 * 8; savey = 6 * 8; saverx = 110; savery = 104; savegc = 0; savedir = 1; //Area after tower //savex = 70; savey = 129; saverx = 1; savery = 1; savegc = 0; savedir = 1; //The testbed //savex = 14 * 8; savey = 15 * 8; saverx = 102; savery = 111; savegc = 0; savedir = 1; //Worldmap Start //savex = 19 * 8; savey = 13 * 8; saverx = 114; savery = 117; savegc = 0; savedir = 1; //Warp zone entrance //savex = 19 * 8; savey = 13 * 8; saverx = 110; savery = 109; savegc = 0; savedir = 1; //The Elephant //savex = 16 * 8; savey = 15 * 8; saverx = 46; savery = 54; savegc = 0; savedir = 1; //Final Level Start //savex = 5 * 8; savey = 15 * 8; saverx = 41; savery = 52; savegc = 0; savedir = 1; //Final Level Midpoint //savex = (5-3) * 8; savey = (5+2) * 8; saverx = 52-2; savery = 53; savegc = 0; savedir = 1; //Final Level End //savex = 6 * 8; savey = 6 * 8; saverx = 117; savery = 107; savegc = 0; savedir = 1; //Space Station Start savex = 13 * 8; savey = 129; saverx = 102; savery = 111; savegc = 0; savedir = 1; //Worldmap Start ********** //savex = 13 * 8; savey = (19 * 8)-22; saverx = 107; savery = 108; savegc = 0; savedir = 1; //Worldmap Start //savex = 228; savey = 129; saverx = 53; savery = 49; savegc = 0; savedir = 0; //Intermission level 2 //savex = 80; savey = 57; saverx = 41; savery = 56; savegc = 0; savedir = 0; //Intermission level 1 //savex = 215; savey = 33; saverx = 52-1; savery = 56; savegc = 0; savedir = 0; //Intermission level 1 //savex = 104; savey = 169; saverx = 118; savery = 106; savegc = 0; savedir = 1; //Secret Lab //savex = 132; savey = 137; saverx = 119; savery = 107; savegc = 0; savedir = 1; //Secret Lab (beside gravitron) savepoint = 0; gravitycontrol = savegc; coins = 0; trinkets = 0; state = 0; deathseq = -1; lifeseq = 10; //music.play(1); } //Menu stuff first! public function createmenu(t:String):void { var tcount:int, i:int, tvar:int, j:int; for (i = 0; i < 25; i++) menuoptionslayout[i] = 0; currentmenuoption = 0; menuselection = "null"; currentmenuname = t; menuxoff = 0; menuyoff = 0; menucountdown = 0; menudest="null"; if (mobilemenu) { if (t == "mainmenu") { showloadingnotice = false; menuoptions[0] = "play"; menuoptionsactive[0] = true; menuoptionslayout[0] = 1; menuoptions[1] = "player worlds"; menuoptionsactive[1] = true; menuoptionslayout[1] = 2; /*menuoptions[2] = "super gravitron"; menuoptionsactive[2] = true; menuoptionslayout[2] = 2; */ menuoptions[2] = "options"; menuoptionsactive[2] = true; menuoptionslayout[2] = 7; menuoptions[3] = "credits"; menuoptionsactive[3] = true; menuoptionslayout[3] = 8; menuoptions[4] = "more games"; menuoptionsactive[4] = true; menuoptionslayout[4] = 12; nummenuoptions = 5; menuxoff = -16; menuyoff = -50+20; }else if (t == "playerworlds"){ menuoptions[0] = "play a level"; menuoptionsactive[0] = true; menuoptions[1] = "level editor"; menuoptionsactive[1] = true; menuoptions[2] = "< back"; menuoptionsactive[2] = true; menuoptionslayout[2] = 3; nummenuoptions = 3; menuxoff = -30; menuyoff = -40-(12*2); }else if (t == "quickloadlevel") { menuoptions[0] = "continue from save"; menuoptionsactive[0] = true; menuoptionslayout[0] = 4; menuoptions[1] = "start from beginning"; menuoptionsactive[1] = true; menuoptionslayout[1] = 4; menuoptions[2] = "< back"; menuoptionsactive[2] = true; menuoptionslayout[2] = 3; nummenuoptions = 3; menuxoff = -40; menuyoff = -30-(12*2); }else if (t == "youwannaquit") { menuoptions[0] = "yes, quit"; menuoptionsactive[0] = true; menuoptions[1] = "no, return"; menuoptionsactive[1] = true; nummenuoptions = 2; menuxoff = 0; menuyoff = -20-(12*2); }else if (t == "levellist"){ if (editor.ListOfMetaData.length == 0) { menuoptions[0] = "ok"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 0; menuyoff = -20; }else{ tcount = 0; for (i = 0; i < editor.ListOfMetaData.length; i++) { if (i >= levelpage * 3 && i < (levelpage * 3) + 3) { //This is, er, suboptimal. Whatever, life optimisation and all that tvar = -1; for (j = 0; j < numcustomlevelstats; j++) { if (editor.ListOfMetaData[i].filename == customlevelstats[j]) { tvar = customlevelscore[j]; j=numcustomlevelstats+1; } } /* if(tvar>=0){ if(customlevelscore[tvar]==0){ menuoptions[tcount] = " " + editor.ListOfMetaData[i].title; }else if(customlevelscore[tvar]==1){ menuoptions[tcount] = " * " + editor.ListOfMetaData[i].title; }else if(customlevelscore[tvar]==3){ menuoptions[tcount] = "** " + editor.ListOfMetaData[i].title; } }else{ menuoptions[tcount] = " " + editor.ListOfMetaData[i].title; } */ menuoptions[tcount] = String(i); menuoptions_alt[tcount] = String(tvar); menuoptionsactive[tcount] = true; menuoptionslayout[tcount] = 11; menuoptions[tcount] = menuoptions[tcount].toLowerCase(); tcount++; } } if((levelpage*3)+3= 3 && !unlocknotify[9]) temp++; if (unlock[1] && stat_trinkets >= 6 && !unlocknotify[10]) temp++; if (unlock[2] && stat_trinkets >= 9 && !unlocknotify[11]) temp++; if (unlock[3] && stat_trinkets >= 12 && !unlocknotify[12]) temp++; if (unlock[4] && stat_trinkets >= 15 && !unlocknotify[13]) temp++; if (unlock[5] && stat_trinkets >= 18 && !unlocknotify[14]) temp++; if (temp > 0) { //you've unlocked a time trial! if (unlock[0] && stat_trinkets >= 3) { unlocknotify[9] = true; unlock[9] = true; } if (unlock[1] && stat_trinkets >= 6) { unlocknotify[10] = true; unlock[10] = true; } if (unlock[2] && stat_trinkets >= 9) { unlocknotify[11] = true; unlock[11] = true; } if (unlock[3] && stat_trinkets >= 12) { unlocknotify[12] = true; unlock[12] = true; } if (unlock[4] && stat_trinkets >= 15) { unlocknotify[13] = true; unlock[13] = true; } if (unlock[5] && stat_trinkets >= 18) { unlocknotify[14] = true; unlock[14] = true; } if (temp == 1) { createmenu("unlocktimetrial"); savemystats = true; }else if (temp > 1) { createmenu("unlocktimetrials"); savemystats = true; } }else { //Alright, we haven't unlocked any time trials. How about no death mode? temp = 0; if (bestrank[0] >= 2) temp++; if (bestrank[1] >= 2) temp++; if (bestrank[2] >= 2) temp++; if (bestrank[3] >= 2) temp++; if (bestrank[4] >= 2) temp++; if (bestrank[5] >= 2) temp++; if (temp >= 4 && !unlocknotify[17]) { //Unlock No Death Mode unlocknotify[17] = true; unlock[17] = true; createmenu("unlocknodeathmode"); savemystats = true; }else{ //Alright then! Flip mode? if (unlock[5] && !unlocknotify[18]) { unlock[18] = true; unlocknotify[18] = true; createmenu("unlockflipmode"); savemystats = true; }else { //What about the intermission levels? if (unlock[7] && !unlocknotify[16]) { unlock[16] = true; unlocknotify[16] = true; createmenu("unlockintermission"); savemystats = true; }else { //ok, secret lab! no notification, but test: if (unlock[8]) { createmenu("playsecretlab"); }else{ menuoptions[0] = "continue"; menuoptionsactive[0] = true; menuoptions[1] = "play modes"; menuoptionsactive[1] = true; menuoptions[2] = "new game"; menuoptionsactive[2] = true; menuoptions[3] = "< back"; menuoptionsactive[3] = true; menuoptionslayout[3] = 3; nummenuoptions = 4; menuxoff = -20; menuyoff = -30 -(12*3); } } } } } }else if (t == "unlocktimetrial" || t == "unlocktimetrials") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "unlocknodeathmode") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "unlockintermission") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "unlockflipmode") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "playsecretlab") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; menuoptions[1] = "secret lab"; menuoptionsactive[1] = true; menuoptions[2] = "play modes"; menuoptionsactive[2] = true; menuoptions[3] = "new game"; menuoptionsactive[3] = true; menuoptions[4] = "< back"; menuoptionsactive[4] = true; menuoptionslayout[4] = 3; nummenuoptions = 5; menuxoff = -40; menuyoff = -35-(12*4); }else if (t == "newgamewarning") { menuoptions[0] = "start new game"; menuoptionsactive[0] = true; menuoptions[1] = "< back"; menuoptionsactive[1] = true; menuoptionslayout[1] = 3; nummenuoptions = 2; menuxoff = -30; menuyoff = 64-(16*2)-32; }else if (t == "flipmode_mobile") { menuoptions[0] = "change flip mode"; menuoptionsactive[0] = true; menuoptions[1] = "< back"; menuoptionsactive[1] = true; menuoptionslayout[1] = 3; nummenuoptions = 2; menuxoff = -30; menuyoff = 64-(16*2); }else if (t == "playmodes") { menuoptions[0] = "time trials"; menuoptionsactive[0] = true; menuoptions[1] = "intermissions"; menuoptionsactive[1] = unlock[16]; menuoptions[2] = "no death mode"; menuoptionsactive[2] = unlock[17]; menuoptions[3] = "flip mode"; menuoptionsactive[3] = unlock[18]; menuoptions[4] = "< back"; menuoptionsactive[4] = true; menuoptionslayout[4] = 3; nummenuoptions = 5; menuxoff = -70; menuyoff = -35-(12*4); }else if (t == "intermissionmenu") { menuoptions[0] = "play intermission 1"; menuoptionsactive[0] = true; menuoptions[1] = "play intermission 2"; menuoptionsactive[1] = true; menuoptions[2] = "< back"; menuoptionsactive[2] = true; menuoptionslayout[0] = 4; menuoptionslayout[1] = 4; menuoptionslayout[2] = 3; nummenuoptions = 3; menuxoff = -50; menuyoff = -35-(12*2); }else if (t == "playint1") { menuoptions[0] = "Vitellary"; menuoptionsactive[0] = true; menuoptions[1] = "Vermilion"; menuoptionsactive[1] = true; menuoptions[2] = "Verdigris"; menuoptionsactive[2] = true; menuoptions[3] = "Victoria"; menuoptionsactive[3] = true; menuoptions[4] = "< back"; menuoptionsactive[4] = true; menuoptionslayout[4] = 3; nummenuoptions = 5; menuxoff = -60; menuyoff = -30-(12*4); }else if (t == "playint2") { menuoptions[0] = "Vitellary"; menuoptionsactive[0] = true; menuoptions[1] = "Vermilion"; menuoptionsactive[1] = true; menuoptions[2] = "Verdigris"; menuoptionsactive[2] = true; menuoptions[3] = "Victoria"; menuoptionsactive[3] = true; menuoptions[4] = "< back"; menuoptionsactive[4] = true; menuoptionslayout[4] = 3; nummenuoptions = 5; menuxoff = -60; menuyoff = -30-(12*4); }else if (t == "continue") { menuoptions[0] = "continue from teleporter"; menuoptionsactive[0] = true; menuoptions[1] = "continue from quicksave"; menuoptionsactive[1] = true; menuoptionslayout[0] = 4; menuoptionslayout[1] = 4; menuoptions[2] = "< back"; menuoptionsactive[2] = true; menuoptionslayout[2] = 3; nummenuoptions = 3; menuxoff = -60; menuyoff = 20-(12*2); }else if (t == "startnodeathmode") { menuoptions[0] = "disable cutscenes"; menuoptionsactive[0] = true; menuoptions[1] = "enable cutscenes"; menuoptionsactive[1] = true; menuoptionslayout[0] = 4; menuoptionslayout[1] = 4; menuoptions[2] = "< back"; menuoptionsactive[2] = true; menuoptionslayout[2] = 3; nummenuoptions = 3; menuxoff = -60; menuyoff = 30-(12*2); }else if (t == "gameover") { nummenuoptions = 0; menucountdown = 120; menudest="gameover2"; }else if (t == "gameover2") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; menuoptionslayout[0] = 4; nummenuoptions = 1; menuxoff = -25; menuyoff = 80-8; }else if (t == "unlockmenutrials") { if (unlock[9]) { menuoptions[0] = "space station 1"; menuoptionsactive[0] = false; }else{ menuoptions[0] = "space station 1"; menuoptionsactive[0] = true;} if (unlock[10]) { menuoptions[1] = "the laboratory"; menuoptionsactive[1] = false; }else{ menuoptions[1] = "the laboratory"; menuoptionsactive[1] = true;} if (unlock[11]) { menuoptions[2] = "the tower"; menuoptionsactive[2] = false; }else{ menuoptions[2] = "the tower"; menuoptionsactive[2] = true;} if (unlock[12]) { menuoptions[3] = "space station 2"; menuoptionsactive[3] = false; }else{ menuoptions[3] = "space station 2"; menuoptionsactive[3] = true;} if (unlock[13]) { menuoptions[4] = "the warp zone"; menuoptionsactive[4] = false; }else{ menuoptions[4] = "the warp zone"; menuoptionsactive[4] = true;} if (unlock[14]) { menuoptions[5] = "the final level"; menuoptionsactive[5] = false; }else{ menuoptions[5] = "the final level"; menuoptionsactive[5] = true;} menuoptions_alt[0] = "space station 1 unlocked"; menuoptions_alt[1] = "the laboratory unlocked"; menuoptions_alt[2] = "the tower unlocked"; menuoptions_alt[3] = "space station 2 unlocked"; menuoptions_alt[4] = "the warp zone unlocked"; menuoptions_alt[5] = "the final level unlocked"; menuoptionslayout[0] = 9; menuoptionslayout[1] = 9; menuoptionslayout[2] = 9; menuoptionslayout[3] = 9; menuoptionslayout[4] = 9; menuoptionslayout[5] = 9; menuoptions[6] = "< back"; menuoptionsactive[6] = true; menuoptionslayout[6] = 3; nummenuoptions = 7; menuxoff = -80; menuyoff = -55-(12*6); }else if (t == "timetrials") { if (!unlock[9]) { menuoptions[0] = "???"; menuoptionsactive[0] = false; }else{ menuoptions[0] = "space station 1"; menuoptionsactive[0] = true;} if (!unlock[10]) { menuoptions[1] = "???"; menuoptionsactive[1] = false; }else{ menuoptions[1] = "the laboratory"; menuoptionsactive[1] = true;} if (!unlock[11]) { menuoptions[2] = "???"; menuoptionsactive[2] = false; }else{ menuoptions[2] = "the tower"; menuoptionsactive[2] = true;} if (!unlock[12]) { menuoptions[3] = "???"; menuoptionsactive[3] = false; }else{ menuoptions[3] = "space station 2"; menuoptionsactive[3] = true;} if (!unlock[13]) { menuoptions[4] = "???"; menuoptionsactive[4] = false; }else{ menuoptions[4] = "the warp zone"; menuoptionsactive[4] = true;} if (!unlock[14]) { menuoptions[5] = "???"; menuoptionsactive[5] = false; }else{ menuoptions[5] = "the final level"; menuoptionsactive[5] = true;} menuoptionslayout[0] = 5; menuoptionslayout[1] = 5; menuoptionslayout[2] = 5; menuoptionslayout[3] = 6; menuoptionslayout[4] = 6; menuoptionslayout[5] = 6; menuoptions[6] = "< back"; menuoptionsactive[6] = true; menuoptionslayout[6] = 3; nummenuoptions = 7; menuxoff = -80; menuyoff = -100; }else if (t == "nodeathmodecomplete") { nummenuoptions = 0; menucountdown = 90; menudest = "nodeathmodecomplete2"; }else if (t == "nodeathmodecomplete2") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; menuoptionslayout[0] = 4; nummenuoptions = 1; menuxoff = -25; menuyoff = 70-8; }else if (t == "timetrialcomplete") { nummenuoptions = 0; menucountdown = 90; menudest="timetrialcomplete2"; }else if (t == "timetrialcomplete2") { nummenuoptions = 0; menucountdown = 60; menudest="timetrialcomplete3"; }else if (t == "timetrialcomplete3") { menuoptions[0] = "try again"; menuoptionsactive[0] = true; menuoptions[1] = "< back"; menuoptionsactive[1] = true; menuoptionslayout[1] = 3; nummenuoptions = 2; menuxoff = -25; menuyoff = 70; }else if (t == "gamecompletecontinue") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; menuoptionslayout[0] = 4; nummenuoptions = 1; menuxoff = -25; menuyoff = 70-8; } }else{ if (t == "mainmenu") { menuoptions[0] = "start game"; menuoptionsactive[0] = true; menuoptions[1] = "player levels"; menuoptionsactive[1] = true; menuoptions[2] = "graphic options"; menuoptionsactive[2] = true; menuoptions[3] = "game options"; menuoptionsactive[3] = true; menuoptions[4] = "view credits"; menuoptionsactive[4] = true; menuoptions[5] = "quit game"; menuoptionsactive[5] = true; nummenuoptions = 6; menuxoff = -16; menuyoff = -10; }else if (t == "playerworlds"){ menuoptions[0] = "play a level"; menuoptionsactive[0] = true; menuoptions[1] = "level editor"; menuoptionsactive[1] = true; menuoptions[2] = "back to menu"; menuoptionsactive[3] = true; nummenuoptions = 3; menuxoff = -30; menuyoff = -40; }else if (t == "quickloadlevel") { menuoptions[0] = "continue from save"; menuoptionsactive[0] = true; menuoptions[1] = "start from beginning"; menuoptionsactive[1] = true; menuoptions[2] = "back to levels"; menuoptionsactive[2] = true; nummenuoptions = 3; menuxoff = -40; menuyoff = -30; }else if (t == "youwannaquit") { menuoptions[0] = "yes, quit"; menuoptionsactive[0] = true; menuoptions[1] = "no, return"; menuoptionsactive[1] = true; nummenuoptions = 2; menuxoff = 0; menuyoff = -20; }else if (t == "levellist"){ if (editor.ListOfMetaData.length == 0) { menuoptions[0] = "ok"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 0; menuyoff = -20; }else{ tcount = 0; for (i = 0; i < editor.ListOfMetaData.length; i++) { if (i >= levelpage * 8 && i < (levelpage * 8) + 8) { //This is, er, suboptimal. Whatever, life optimisation and all that tvar = -1; for (j = 0; j < numcustomlevelstats; j++) { if (editor.ListOfMetaData[i].filename == customlevelstats[j]) { tvar=j; j=numcustomlevelstats+1; } } if(tvar>=0){ if(customlevelscore[tvar]==0){ menuoptions[tcount] = " " + editor.ListOfMetaData[i].title; }else if(customlevelscore[tvar]==1){ menuoptions[tcount] = " * " + editor.ListOfMetaData[i].title; }else if(customlevelscore[tvar]==3){ menuoptions[tcount] = "** " + editor.ListOfMetaData[i].title; } }else{ menuoptions[tcount] = " " + editor.ListOfMetaData[i].title; } menuoptionsactive[tcount] = true; menuoptions[tcount] = menuoptions[tcount].toLowerCase(); tcount++; } } if((levelpage*8)+8= 3 && !unlocknotify[9]) temp++; if (unlock[1] && stat_trinkets >= 6 && !unlocknotify[10]) temp++; if (unlock[2] && stat_trinkets >= 9 && !unlocknotify[11]) temp++; if (unlock[3] && stat_trinkets >= 12 && !unlocknotify[12]) temp++; if (unlock[4] && stat_trinkets >= 15 && !unlocknotify[13]) temp++; if (unlock[5] && stat_trinkets >= 18 && !unlocknotify[14]) temp++; if (temp > 0) { //you've unlocked a time trial! if (unlock[0] && stat_trinkets >= 3) { unlocknotify[9] = true; unlock[9] = true; } if (unlock[1] && stat_trinkets >= 6) { unlocknotify[10] = true; unlock[10] = true; } if (unlock[2] && stat_trinkets >= 9) { unlocknotify[11] = true; unlock[11] = true; } if (unlock[3] && stat_trinkets >= 12) { unlocknotify[12] = true; unlock[12] = true; } if (unlock[4] && stat_trinkets >= 15) { unlocknotify[13] = true; unlock[13] = true; } if (unlock[5] && stat_trinkets >= 18) { unlocknotify[14] = true; unlock[14] = true; } if (temp == 1) { createmenu("unlocktimetrial"); savemystats = true; }else if (temp > 1) { createmenu("unlocktimetrials"); savemystats = true; } }else { //Alright, we haven't unlocked any time trials. How about no death mode? temp = 0; if (bestrank[0] >= 2) temp++; if (bestrank[1] >= 2) temp++; if (bestrank[2] >= 2) temp++; if (bestrank[3] >= 2) temp++; if (bestrank[4] >= 2) temp++; if (bestrank[5] >= 2) temp++; if (temp >= 4 && !unlocknotify[17]) { //Unlock No Death Mode unlocknotify[17] = true; unlock[17] = true; createmenu("unlocknodeathmode"); savemystats = true; }else{ //Alright then! Flip mode? if (unlock[5] && !unlocknotify[18]) { unlock[18] = true; unlocknotify[18] = true; createmenu("unlockflipmode"); savemystats = true; }else { //What about the intermission levels? if (unlock[7] && !unlocknotify[16]) { unlock[16] = true; unlocknotify[16] = true; createmenu("unlockintermission"); savemystats = true; }else { //ok, secret lab! no notification, but test: if (unlock[8]) { createmenu("playsecretlab"); }else{ menuoptions[0] = "continue"; menuoptionsactive[0] = true; menuoptions[1] = "play modes"; menuoptionsactive[1] = true; menuoptions[2] = "new game"; menuoptionsactive[2] = true; menuoptions[3] = "return"; menuoptionsactive[3] = true; nummenuoptions = 4; menuxoff = -20; menuyoff = -40; } } } } } }else if (t == "unlocktimetrial" || t == "unlocktimetrials") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "unlocknodeathmode") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "unlockintermission") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "unlockflipmode") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = 20; menuyoff = 70; }else if (t == "playsecretlab") { menuoptions[0] = "continue"; menuoptionsactive[0] = true; menuoptions[1] = "secret lab"; menuoptionsactive[1] = true; menuoptions[2] = "play modes"; menuoptionsactive[2] = true; menuoptions[3] = "new game"; menuoptionsactive[3] = true; menuoptions[4] = "return"; menuoptionsactive[4] = true; nummenuoptions = 5; menuxoff = -40; menuyoff = -30; }else if (t == "newgamewarning") { menuoptions[0] = "start new game"; menuoptionsactive[0] = true; menuoptions[1] = "return to menu"; menuoptionsactive[1] = true; nummenuoptions = 2; menuxoff = -30; menuyoff = 64; }else if (t == "playmodes") { menuoptions[0] = "time trials"; menuoptionsactive[0] = true; menuoptions[1] = "intermissions"; menuoptionsactive[1] = unlock[16]; menuoptions[2] = "no death mode"; menuoptionsactive[2] = unlock[17]; menuoptions[3] = "flip mode"; menuoptionsactive[3] = unlock[18]; menuoptions[4] = "return to play menu"; menuoptionsactive[4] = true; nummenuoptions = 5; menuxoff = -70; menuyoff = 8; }else if (t == "intermissionmenu") { menuoptions[0] = "play intermission 1"; menuoptionsactive[0] = true; menuoptions[1] = "play intermission 2"; menuoptionsactive[1] = true; menuoptions[2] = "return to play menu"; menuoptionsactive[2] = true; nummenuoptions = 3; menuxoff = -50; menuyoff = -35; }else if (t == "playint1") { menuoptions[0] = "Vitellary"; menuoptionsactive[0] = true; menuoptions[1] = "Vermilion"; menuoptionsactive[1] = true; menuoptions[2] = "Verdigris"; menuoptionsactive[2] = true; menuoptions[3] = "Victoria"; menuoptionsactive[3] = true; menuoptions[4] = "return"; menuoptionsactive[4] = true; nummenuoptions = 5; menuxoff = -60; menuyoff = 10; }else if (t == "playint2") { menuoptions[0] = "Vitellary"; menuoptionsactive[0] = true; menuoptions[1] = "Vermilion"; menuoptionsactive[1] = true; menuoptions[2] = "Verdigris"; menuoptionsactive[2] = true; menuoptions[3] = "Victoria"; menuoptionsactive[3] = true; menuoptions[4] = "return"; menuoptionsactive[4] = true; nummenuoptions = 5; menuxoff = -60; menuyoff = 10; }else if (t == "continue") { menuoptions[0] = "continue from teleporter"; menuoptionsactive[0] = true; menuoptions[1] = "continue from quicksave"; menuoptionsactive[1] = true; menuoptions[2] = "return to play menu"; menuoptionsactive[2] = true; nummenuoptions = 3; menuxoff = -60; menuyoff = 20; }else if (t == "startnodeathmode") { menuoptions[0] = "disable cutscenes"; menuoptionsactive[0] = true; menuoptions[1] = "enable cutscenes"; menuoptionsactive[1] = true; menuoptions[2] = "return to play menu"; menuoptionsactive[2] = true; nummenuoptions = 3; menuxoff = -60; menuyoff = 40; }else if (t == "gameover") { nummenuoptions = 0; menucountdown = 120; menudest="gameover2"; }else if (t == "gameover2") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = -25; menuyoff = 80; }else if (t == "unlockmenutrials") { if (unlock[9]) { menuoptions[0] = "space station 1"; menuoptionsactive[0] = true; }else{ menuoptions[0] = "space station 1"; menuoptionsactive[0] = true;} if (unlock[10]) { menuoptions[1] = "the laboratory"; menuoptionsactive[1] = true; }else{ menuoptions[1] = "the laboratory"; menuoptionsactive[1] = true;} if (unlock[11]) { menuoptions[2] = "the tower"; menuoptionsactive[2] = true; }else{ menuoptions[2] = "the tower"; menuoptionsactive[2] = true;} if (unlock[12]) { menuoptions[3] = "space station 2"; menuoptionsactive[3] = true; }else{ menuoptions[3] = "space station 2"; menuoptionsactive[3] = true;} if (unlock[13]) { menuoptions[4] = "the warp zone"; menuoptionsactive[4] = true; }else{ menuoptions[4] = "the warp zone"; menuoptionsactive[4] = true;} if (unlock[14]) { menuoptions[5] = "the final level"; menuoptionsactive[5] = true; }else{ menuoptions[5] = "the final level"; menuoptionsactive[5] = true;} menuoptions[6] = "return to unlock menu"; menuoptionsactive[6] = true; nummenuoptions = 7; menuxoff = -80; menuyoff = 0 - (12*6); }else if (t == "timetrials") { if (!unlock[9]) { menuoptions[0] = "???"; menuoptionsactive[0] = true; }else{ menuoptions[0] = "space station 1"; menuoptionsactive[0] = true;} if (!unlock[10]) { menuoptions[1] = "???"; menuoptionsactive[1] = true; }else{ menuoptions[1] = "the laboratory"; menuoptionsactive[1] = true;} if (!unlock[11]) { menuoptions[2] = "???"; menuoptionsactive[2] = true; }else{ menuoptions[2] = "the tower"; menuoptionsactive[2] = true;} if (!unlock[12]) { menuoptions[3] = "???"; menuoptionsactive[3] = true; }else{ menuoptions[3] = "space station 2"; menuoptionsactive[3] = true;} if (!unlock[13]) { menuoptions[4] = "???"; menuoptionsactive[4] = true; }else{ menuoptions[4] = "the warp zone"; menuoptionsactive[4] = true;} if (!unlock[14]) { menuoptions[5] = "???"; menuoptionsactive[5] = true; }else{ menuoptions[5] = "the final level"; menuoptionsactive[5] = true;} menuoptions[6] = "return to play menu"; menuoptionsactive[6] = true; nummenuoptions = 7; menuxoff = -80; menuyoff = 0 - (12*6); }else if (t == "nodeathmodecomplete") { nummenuoptions = 0; menucountdown = 90; menudest = "nodeathmodecomplete2"; }else if (t == "nodeathmodecomplete2") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = -25; menuyoff = 70; }else if (t == "timetrialcomplete") { nummenuoptions = 0; menucountdown = 90; menudest="timetrialcomplete2"; }else if (t == "timetrialcomplete2") { nummenuoptions = 0; menucountdown = 60; menudest="timetrialcomplete3"; }else if (t == "timetrialcomplete3") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; menuoptions[1] = "try again"; menuoptionsactive[1] = true; nummenuoptions = 2; menuxoff = -25; menuyoff = 70; }else if (t == "gamecompletecontinue") { menuoptions[0] = "return to play menu"; menuoptionsactive[0] = true; nummenuoptions = 1; menuxoff = -25; menuyoff = 70; } } } public function loadstats(map:mapclass, dwgfx:dwgraphicsclass):void { statcookie = SharedObject.getLocal("vvvvvv_unlock"); if (statcookie.data.stattrinkets == undefined) { savestats(map, dwgfx); //save with default values }else{ temp_unlock = statcookie.data.unlock.slice(); unlock = temp_unlock.slice(); temp_unlocknotify = statcookie.data.unlocknotify.slice(); unlocknotify = temp_unlocknotify.slice(); temp_besttimes = statcookie.data.besttimes.slice(); besttimes = temp_besttimes.slice(); temp_besttrinkets = statcookie.data.besttrinkets.slice(); besttrinkets = temp_besttrinkets.slice(); temp_bestlives = statcookie.data.bestlives.slice(); bestlives = temp_bestlives.slice(); temp_bestrank = statcookie.data.bestrank.slice(); bestrank = temp_bestrank.slice(); bestgamedeaths = statcookie.data.bestgamedeaths; stat_trinkets = statcookie.data.stattrinkets; fullscreen = statcookie.data.fullscreen; noflashingmode = statcookie.data.screenshakes; colourblindmode = statcookie.data.backgrounds; dwgfx.setflipmode = statcookie.data.flipmode; map.invincibility = statcookie.data.invincibility; slowdown = statcookie.data.slowdown; swnbestrank = statcookie.data.swnbestrank; swnrecord = statcookie.data.swnrecord; advanced_mode = statcookie.data.advanced_mode; advanced_smoothing = statcookie.data.advanced_smoothing; advanced_scaling = statcookie.data.advanced_scaling; controlstyle = statcookie.data.controlstyle; controlsensitivity = statcookie.data.controlsensitivity; showcontroltutorial = statcookie.data.showcontroltutorial; } statcookie.close(); } public function savestats(map:mapclass, dwgfx:dwgraphicsclass):void { statcookie = SharedObject.getLocal("vvvvvv_unlock"); temp_unlock = unlock.slice(); temp_unlocknotify = unlocknotify.slice(); statcookie.data.unlock = temp_unlock.slice(); statcookie.data.unlocknotify = temp_unlocknotify.slice(); temp_besttimes = besttimes.slice(); temp_besttrinkets = besttrinkets.slice(); temp_bestlives = bestlives.slice(); temp_bestrank = bestrank.slice(); statcookie.data.besttimes = temp_besttimes.slice(); statcookie.data.besttrinkets = temp_besttrinkets.slice(); statcookie.data.bestlives = temp_bestlives.slice(); statcookie.data.bestrank = temp_bestrank.slice(); statcookie.data.bestgamedeaths = bestgamedeaths; statcookie.data.stattrinkets = stat_trinkets; statcookie.data.fullscreen = fullscreen; statcookie.data.screenshakes = noflashingmode; statcookie.data.backgrounds = colourblindmode; statcookie.data.flipmode = dwgfx.setflipmode; statcookie.data.invincibility = map.invincibility; statcookie.data.slowdown = slowdown; statcookie.data.swnbestrank = swnbestrank; statcookie.data.swnrecord = swnrecord; statcookie.data.advanced_mode = advanced_mode; statcookie.data.advanced_smoothing = advanced_smoothing; statcookie.data.advanced_scaling = advanced_scaling; statcookie.data.controlstyle = controlstyle; statcookie.data.controlsensitivity = controlsensitivity; statcookie.data.showcontroltutorial = showcontroltutorial; statcookie.flush() statcookie.close(); } public function deletestats(map:mapclass, dwgfx:dwgraphicsclass):void { for (i = 0; i < 25; i++) { unlock[i] = false; unlocknotify[i] = false; } for (i = 0; i < 6; i++) { besttimes[i] = -1; besttrinkets[i] = -1; bestlives[i] = -1; bestrank[i] = -1; } dwgfx.setflipmode = false; stat_trinkets = 0; controlstyle = 0; controlsensitivity = 50; savestats(map, dwgfx); } public function unlocknum(t:int, map:mapclass, dwgfx:dwgraphicsclass):void { unlock[t] = true; savestats(map, dwgfx); } public function CopyLevelData():void { //Not used in mobile version } public function loadsummary(map:mapclass, help:helpclass):void { quickcookie = SharedObject.getLocal("vvvvvv_quicksave"); telecookie = SharedObject.getLocal("vvvvvv_telesave"); if (telecookie.data.savex == undefined) { telecookieexists = false; telesummary = ""; } else { telecookieexists = true; telesummary = telecookie.data.summary; tele_gametime = giventimestring(telecookie.data.hours, telecookie.data.minutes, telecookie.data.seconds, help); tele_trinkets = telecookie.data.trinkets; tele_currentarea = map.currentarea(map.area(telecookie.data.savex, telecookie.data.savey)); summary_crewstats = telecookie.data.crewstats.slice(); tele_crewstats = summary_crewstats.slice(); } if (quickcookie.data.savex == undefined) { quickcookieexists = false; quicksummary = ""; } else { quickcookieexists = true; quicksummary = quickcookie.data.summary; quick_gametime = giventimestring(quickcookie.data.hours, quickcookie.data.minutes, quickcookie.data.seconds, help); quick_trinkets = quickcookie.data.trinkets; quick_currentarea = map.currentarea(map.area(quickcookie.data.savex, quickcookie.data.savey)); summary_crewstats = quickcookie.data.crewstats.slice(); quick_crewstats = summary_crewstats.slice(); } } public function savequick(map:mapclass, obj:entityclass, music:musicclass, help:helpclass):void { quickcookie = SharedObject.getLocal("vvvvvv_quicksave"); //Save to the quicksave cookie quickcookieexists = true; //Flags, map and stats savestate[0].explored = map.explored.slice(); savestate[0].flags = obj.flags.slice(); savestate[0].crewstats = crewstats.slice(); savestate[0].collect = obj.collect.slice(); quickcookie.data.worldmap = savestate[0].explored.slice(); quickcookie.data.flags = savestate[0].flags.slice(); quickcookie.data.crewstats = savestate[0].crewstats.slice(); quickcookie.data.collect = savestate[0].collect.slice(); //trace(obj.flags); quickcookie.data.finalmode = map.finalmode; quickcookie.data.finalstretch = map.finalstretch; quickcookie.data.finalx = map.finalx; quickcookie.data.finaly = map.finaly; //Position quickcookie.data.savex = savex; quickcookie.data.savey = savey; quickcookie.data.saverx = saverx; quickcookie.data.savery = savery; quickcookie.data.savegc = savegc; quickcookie.data.savedir = savedir; quickcookie.data.savepoint = savepoint; quickcookie.data.trinkets = trinkets; quickcookie.data.currentsong = music.currentsong; quickcookie.data.teleportscript = teleportscript; //Special stats quickcookie.data.companion = companion; quickcookie.data.lastsaved = lastsaved; quickcookie.data.supercrewmate = supercrewmate; quickcookie.data.scmprogress = scmprogress; quickcookie.data.scmmoveme = scmmoveme; quickcookie.data.frames = frames; quickcookie.data.seconds = seconds; quickcookie.data.minutes = minutes; quickcookie.data.hours = hours; quickcookie.data.deathcounts = deathcounts; quickcookie.data.totalflips = totalflips; quickcookie.data.hardestroom = hardestroom; quickcookie.data.hardestroomdeaths = hardestroomdeaths; savearea = map.currentarea(map.area(roomx, roomy)); quickcookie.data.summary = savearea + ", " + timestring(help); quicksummary = quickcookie.data.summary; quickcookie.flush() quickcookie.close(); } public function customsavequick(t:int, map:mapclass, obj:entityclass, music:musicclass, help:helpclass):void { customcookie[t] = SharedObject.getLocal("vvvvvv_custom_" + String(t)); //Flags, map and stats savestate[2].explored = map.explored.slice(); savestate[2].flags = obj.flags.slice(); savestate[2].crewstats = crewstats.slice(); savestate[2].collect = obj.collect.slice(); savestate[2].customcollect = obj.customcollect.slice(); savestate[2].moods = obj.customcrewmoods.slice(); customcookie[t].data.worldmap = savestate[2].explored.slice(); customcookie[t].data.flags = savestate[2].flags.slice(); customcookie[t].data.crewstats = savestate[2].crewstats.slice(); customcookie[t].data.collect = savestate[2].collect.slice(); customcookie[t].data.customcollect = savestate[2].customcollect.slice(); customcookie[t].data.moods = savestate[2].moods.slice(); //trace(obj.flags); customcookie[t].data.finalmode = map.finalmode; customcookie[t].data.finalstretch = map.finalstretch; customcookie[t].data.finalx = map.finalx; customcookie[t].data.finaly = map.finaly; //Position customcookie[t].data.savex = savex; customcookie[t].data.savey = savey; customcookie[t].data.saverx = saverx; customcookie[t].data.savery = savery; customcookie[t].data.savegc = savegc; customcookie[t].data.savedir = savedir; customcookie[t].data.savepoint = savepoint; customcookie[t].data.trinkets = trinkets; customcookie[t].data.crewmates = crewmates; customcookie[t].data.currentsong = music.currentsong; customcookie[t].data.teleportscript = teleportscript; //Special stats customcookie[t].data.companion = companion; customcookie[t].data.lastsaved = lastsaved; customcookie[t].data.supercrewmate = supercrewmate; customcookie[t].data.scmprogress = scmprogress; customcookie[t].data.scmmoveme = scmmoveme; customcookie[t].data.frames = frames; customcookie[t].data.seconds = seconds; customcookie[t].data.minutes = minutes; customcookie[t].data.hours = hours; customcookie[t].data.deathcounts = deathcounts; customcookie[t].data.totalflips = totalflips; customcookie[t].data.hardestroom = hardestroom; customcookie[t].data.hardestroomdeaths = hardestroomdeaths; customcookie[t].data.showminimap = map.customshowmm; savearea = map.currentarea(map.area(roomx, roomy)) customcookie[t].data.summary = savearea + ", " + timestring(help); customcookiesummary[t] = customcookie[t].data.summary; customcookie[t].flush() customcookie[t].close(); customcookieexists[t] = true; customcookiesummary[t] = savearea + ", " + timestring(help); } public function loadquick(map:mapclass, obj:entityclass, music:musicclass):void { quickcookie = SharedObject.getLocal("vvvvvv_quicksave"); //Save to the quicksave cookie savestate[0].explored = quickcookie.data.worldmap.slice(); savestate[0].flags = quickcookie.data.flags.slice(); savestate[0].crewstats = quickcookie.data.crewstats.slice(); savestate[0].collect = quickcookie.data.collect.slice(); map.explored = savestate[0].explored.slice(); obj.flags = savestate[0].flags.slice(); crewstats = savestate[0].crewstats.slice(); obj.collect = savestate[0].collect.slice(); //trace(obj.flags); map.finalmode = quickcookie.data.finalmode; map.finalstretch = quickcookie.data.finalstretch; if (map.finalmode) { map.final_colormode = false; map.final_mapcol = 0; map.final_colorframe = 0; } if (map.finalstretch) { map.finalstretch = true; map.final_colormode = true; map.final_mapcol = 0; map.final_colorframe = 1; } map.finalx = quickcookie.data.finalx; map.finaly = quickcookie.data.finaly; //position savex = quickcookie.data.savex; savey = quickcookie.data.savey; saverx = quickcookie.data.saverx; savery = quickcookie.data.savery; savegc = quickcookie.data.savegc; savedir = quickcookie.data.savedir; savepoint = quickcookie.data.savepoint; trinkets = quickcookie.data.trinkets; //Special stats companion = quickcookie.data.companion; lastsaved = quickcookie.data.lastsaved; teleportscript = quickcookie.data.teleportscript; supercrewmate = quickcookie.data.supercrewmate; scmprogress = quickcookie.data.scmprogress; scmmoveme = quickcookie.data.scmmoveme; frames = quickcookie.data.frames; seconds = quickcookie.data.seconds; minutes = quickcookie.data.minutes; hours = quickcookie.data.hours; deathcounts = quickcookie.data.deathcounts; totalflips = quickcookie.data.totalflips; hardestroom = quickcookie.data.hardestroom; hardestroomdeaths = quickcookie.data.hardestroomdeaths; music.play(quickcookie.data.currentsong); //Ok, now we determine some game stuff based on the above: map.showteleporters = true; if(obj.flags[12]==1) map.showtargets = true; if (obj.flags[42] == 1) map.showtrinkets = true; quickcookie.close(); } public function customloadquick(t:int, map:mapclass, obj:entityclass, music:musicclass):void{ customcookie[t] = SharedObject.getLocal("vvvvvv_custom_" + String(t)); savestate[2].explored = customcookie[t].data.worldmap.slice(); savestate[2].flags = customcookie[t].data.flags.slice(); savestate[2].crewstats = customcookie[t].data.crewstats.slice(); savestate[2].collect = customcookie[t].data.collect.slice(); savestate[2].customcollect = customcookie[t].data.customcollect.slice(); savestate[2].moods = customcookie[t].data.moods.slice(); map.explored = savestate[2].explored.slice(); obj.flags = savestate[2].flags.slice(); crewstats = savestate[2].crewstats.slice(); obj.collect = savestate[2].collect.slice(); obj.customcollect = savestate[2].customcollect.slice(); obj.customcrewmoods = savestate[2].moods.slice(); //trace(obj.flags); map.finalmode = customcookie[t].data.finalmode; map.finalstretch = customcookie[t].data.finalstretch; if (map.finalmode) { map.final_colormode = false; map.final_mapcol = 0; map.final_colorframe = 0; } if (map.finalstretch) { map.finalstretch = true; map.final_colormode = true; map.final_mapcol = 0; map.final_colorframe = 1; } map.finalx = customcookie[t].data.finalx; map.finaly = customcookie[t].data.finaly; //position savex = customcookie[t].data.savex; savey = customcookie[t].data.savey; saverx = customcookie[t].data.saverx; savery = customcookie[t].data.savery; savegc = customcookie[t].data.savegc; savedir = customcookie[t].data.savedir; savepoint = customcookie[t].data.savepoint; trinkets = customcookie[t].data.trinkets; crewmates = customcookie[t].data.crewmates; //Special stats companion = customcookie[t].data.companion; lastsaved = customcookie[t].data.lastsaved; teleportscript = customcookie[t].data.teleportscript; supercrewmate = customcookie[t].data.supercrewmate; scmprogress = customcookie[t].data.scmprogress; scmmoveme = customcookie[t].data.scmmoveme; frames = customcookie[t].data.frames; seconds = customcookie[t].data.seconds; minutes = customcookie[t].data.minutes; hours = customcookie[t].data.hours; deathcounts = customcookie[t].data.deathcounts; totalflips = customcookie[t].data.totalflips; hardestroom = customcookie[t].data.hardestroom; hardestroomdeaths = customcookie[t].data.hardestroomdeaths; map.customshowmm = customcookie[t].data.showminimap; music.play(customcookie[t].data.currentsong); //Ok, now we determine some game stuff based on the above: map.showteleporters = true; if (obj.flags[12] == 1) map.showtargets = true; if (obj.flags[42] == 1) map.showtrinkets = true; customcookie[t].close(); } public function deletequick():void { quicksummary = ""; quickcookieexists = false; quickcookie.clear(); } public function telegotoship():void { //Special function to move the telesave to the ship teleporter. telecookie.data.savex = 13*8; telecookie.data.savey = 129; telecookie.data.saverx = 102; telecookie.data.savery = 111; telecookie.data.savegc = 0; telecookie.data.savedir = 1; telecookie.data.savepoint = 0; telecookie.data.currentsong = 4; telecookie.data.companion = 0; telecookie.data.finalmode = false;; telecookie.data.finalstretch = false; } public function savetele(map:mapclass, obj:entityclass, music:musicclass, help:helpclass):void { //do a quicksave instead savequick(map, obj, music, help); /* telecookie = SharedObject.getLocal("vvvvvv_telesave"); //Save to the telesave cookie telecookieexists = true; //Flags, map and stats savestate[1].explored = map.explored.slice(); savestate[1].flags = obj.flags.slice(); savestate[1].crewstats = crewstats.slice(); savestate[1].collect = obj.collect.slice(); telecookie.data.worldmap = savestate[1].explored.slice(); telecookie.data.flags = savestate[1].flags.slice(); telecookie.data.crewstats = savestate[1].crewstats.slice(); telecookie.data.collect = savestate[1].collect.slice(); telecookie.data.finalmode = map.finalmode; telecookie.data.finalstretch = map.finalstretch; telecookie.data.finalx = map.finalx; telecookie.data.finaly = map.finaly; //Position telecookie.data.savex = savex; telecookie.data.savey = savey; telecookie.data.saverx = saverx; telecookie.data.savery = savery; telecookie.data.savegc = savegc; telecookie.data.savedir = savedir; telecookie.data.savepoint = savepoint; telecookie.data.trinkets = trinkets; if (music.nicechange != -1) { telecookie.data.currentsong = music.nicechange; }else{ telecookie.data.currentsong = music.currentsong; } telecookie.data.teleportscript = teleportscript; //Special stats telecookie.data.companion = companion; telecookie.data.lastsaved = lastsaved; telecookie.data.supercrewmate = supercrewmate; telecookie.data.scmprogress = scmprogress; telecookie.data.scmmoveme = scmmoveme; telecookie.data.frames = frames; telecookie.data.seconds = seconds; telecookie.data.minutes = minutes; telecookie.data.hours = hours; telecookie.data.deathcounts = deathcounts; telecookie.data.totalflips = totalflips; telecookie.data.hardestroom = hardestroom; telecookie.data.hardestroomdeaths = hardestroomdeaths; savearea = map.currentarea(map.area(roomx, roomy)) telecookie.data.summary = savearea + ", " + timestring(help); telesummary = telecookie.data.summary; telecookie.flush(); telecookie.close(); */ } public function loadtele(map:mapclass, obj:entityclass, music:musicclass):void { telecookie = SharedObject.getLocal("vvvvvv_telesave"); //Save to the telesave cookie savestate[1].explored = telecookie.data.worldmap.slice(); savestate[1].flags = telecookie.data.flags.slice(); savestate[1].crewstats = telecookie.data.crewstats.slice(); savestate[1].collect = telecookie.data.collect.slice(); map.explored = savestate[1].explored.slice(); obj.flags = savestate[1].flags.slice(); crewstats = savestate[1].crewstats.slice(); obj.collect = savestate[1].collect.slice(); map.finalmode = telecookie.data.finalmode; map.finalstretch = telecookie.data.finalstretch; if (map.finalmode) { map.final_colormode = false; map.final_mapcol = 0; map.final_colorframe = 0; } if (map.finalstretch) { map.finalstretch = true; map.final_colormode = true; map.final_mapcol = 0; map.final_colorframe = 1; } map.finalx = telecookie.data.finalx; map.finaly = telecookie.data.finaly; //position savex = telecookie.data.savex; savey = telecookie.data.savey; saverx = telecookie.data.saverx; savery = telecookie.data.savery; savegc = telecookie.data.savegc; savedir = telecookie.data.savedir; savepoint = telecookie.data.savepoint; trinkets = telecookie.data.trinkets; //trinkets = 19; obj.flags[41] = 0; obj.flags[42] = 0; obj.collect[18] = 0; //Testing Victoria epilogue criteria# //Special stats companion = telecookie.data.companion; lastsaved = telecookie.data.lastsaved; teleportscript = telecookie.data.teleportscript; supercrewmate = telecookie.data.supercrewmate; scmprogress = telecookie.data.scmprogress; scmmoveme = telecookie.data.scmmoveme; frames = telecookie.data.frames; seconds = telecookie.data.seconds; minutes = telecookie.data.minutes; hours = telecookie.data.hours; deathcounts = telecookie.data.deathcounts; totalflips = telecookie.data.totalflips; hardestroom = telecookie.data.hardestroom; hardestroomdeaths = telecookie.data.hardestroomdeaths; music.play(telecookie.data.currentsong); //Ok, now we determine some game stuff based on the above: map.showteleporters = true; if(obj.flags[12]==1) map.showtargets = true; if (obj.flags[42] == 1) map.showtrinkets = true; telecookie.close(); } public function deletetele():void { telesummary = ""; telecookieexists = false; telecookie.clear(); } public function crewrescued():int { temp = 0; if (crewstats[0]) temp++; if (crewstats[1]) temp++; if (crewstats[2]) temp++; if (crewstats[3]) temp++; if (crewstats[4]) temp++; if (crewstats[5]) temp++; return temp; } public function unrescued():String { //Randomly return the name of an unrescued crewmate if (Math.random() * 100 > 50) { if (!crewstats[5]) return "Victoria"; if (!crewstats[2]) return "Vitellary"; if (!crewstats[4]) return "Verdigris"; if (!crewstats[3]) return "Vermilion"; }else { if (Math.random() * 100 > 50) { if (!crewstats[2]) return "Vitellary"; if (!crewstats[4]) return "Verdigris"; if (!crewstats[3]) return "Vermilion"; if (!crewstats[5]) return "Victoria"; }else { if (!crewstats[4]) return "Verdigris"; if (!crewstats[3]) return "Vermilion"; if (!crewstats[5]) return "Victoria"; if (!crewstats[2]) return "Vitellary"; } } return "you"; } public function gethardestroom(map:mapclass):void { if (currentroomdeaths > hardestroomdeaths) { hardestroomdeaths = currentroomdeaths; hardestroom = map.roomname; if (map.roomname == "glitch") { if (roomx == 42 && roomy == 51) { hardestroom = "Rear Vindow"; }else if (roomx == 48 && roomy == 51) { hardestroom = "On the Vaterfront"; }else if (roomx == 49 && roomy == 51) { hardestroom = "The Untouchavles"; } }else if (map.roomname == "change") { if (roomx == 45 && roomy == 51) hardestroom =map.specialnames[3]; if (roomx == 46 && roomy == 51) hardestroom =map.specialnames[4]; if (roomx == 47 && roomy == 51) hardestroom =map.specialnames[5]; if (roomx == 50 && roomy == 53) hardestroom =map.specialnames[6]; if (roomx == 50 && roomy == 54) hardestroom = map.specialnames[7]; } } } public function updatestate(dwgfx:dwgraphicsclass, map:mapclass, obj:entityclass, help:helpclass, music:musicclass):void { statedelay--; if(statedelay<=0) statedelay=0; if (statedelay <= 0) { switch(state){ case 0: //Do nothing here! Standard game state break; case 1: //Game initilisation state = 0; break; case 2: //Opening cutscene advancetext = true; hascontrol = false; state = 3; dwgfx.createtextbox("To do: write quick", 50, 80, 164, 164, 255); dwgfx.addline("intro to story!"); //Oh no! what happen to rest of crew etc crash into dimension break; case 4: //End of opening cutscene for now switch(controlstyle) { case 0: dwgfx.createtextbox(" Swipe on the left side to move ", -1, 195, 174, 174, 174); break; case 1: dwgfx.createtextbox(" Touch the screen sides to move ", -1, 195, 174, 174, 174); break; case 2: dwgfx.createtextbox(" Tap the buttons to move ", -1, 195, 174, 174, 174); break; } dwgfx.textboxtimer(60); state = 0; break; case 5: //Demo over advancetext = true; hascontrol = false; /*dwgfx.createtextbox(" Prototype Complete ", 50, 80, 164, 164, 255); dwgfx.addline("Congrats! More Info Soon!"); dwgfx.textboxcenter(); */ startscript = true; newscript="returntohub"; obj.removetrigger(5); state = 6; break; case 7: //End of opening cutscene for now dwgfx.textboxremove(); hascontrol = true; advancetext = false; state = 0; break; case 8: //Enter dialogue obj.removetrigger(8); if (obj.flags[13] == 0) { obj.changeflag(13, 1); if (mobilemenu) { dwgfx.createtextbox(" Tap the top right corner ", -1, 155, 174, 174, 174); dwgfx.addline(" to view map and crew"); }else{ dwgfx.createtextbox(" Press ENTER to view map ", -1, 155, 174, 174, 174); dwgfx.addline(" and quicksave"); } dwgfx.textboxtimer(60); } state = 0; break; case 9: //Start SWN Minigame Mode B obj.removetrigger(9); swnmode = true; swngame = 6; swndelay = 150; swntimer = 60 * 30; //set the checkpoint in the middle of the screen savepoint = 0; savex = 148; savey = 100; savegc = 0; saverx = roomx; savery = roomy; savedir = 0; state = 0; break; case 10: //Start SWN Minigame Mode A obj.removetrigger(10); swnmode = true; swngame = 4; swndelay = 150; swntimer = 60 * 30; //set the checkpoint in the middle of the screen savepoint = 0; savex = 148; savey = 100; savegc = 0; saverx = roomx; savery = roomy; savedir = 0; state = 0; break; case 11: //Intermission 1 instructional textbox, depends on last saved dwgfx.textboxremovefast(); dwgfx.createtextbox(" When you're NOT standing on ", -1, 3, 174, 174, 174); if (dwgfx.flipmode) { if (lastsaved == 2) { dwgfx.addline(" the ceiling, Vitellary will"); }else if (lastsaved == 3) { dwgfx.addline(" the ceiling, Vermilion will"); }else if (lastsaved == 4) { dwgfx.addline(" the ceiling, Verdigris will"); }else if (lastsaved == 5) { dwgfx.addline(" the ceiling, Victoria will"); } }else{ if (lastsaved == 2) { dwgfx.addline(" the floor, Vitellary will"); }else if (lastsaved == 3) { dwgfx.addline(" the floor, Vermilion will"); }else if (lastsaved == 4) { dwgfx.addline(" the floor, Verdigris will"); }else if (lastsaved == 5) { dwgfx.addline(" the floor, Victoria will"); } } dwgfx.addline(" stop and wait for you."); dwgfx.textboxtimer(180); state = 0; break; case 12: //Intermission 1 instructional textbox, depends on last saved obj.removetrigger(12); if (obj.flags[61] == 0) { obj.changeflag(61, 1); dwgfx.textboxremovefast(); dwgfx.createtextbox(" You can't continue to the next ", -1, 8, 174, 174, 174); if (lastsaved == 5) { dwgfx.addline(" room until she is safely across. "); }else { dwgfx.addline(" room until he is safely across. "); } dwgfx.textboxtimer(120); } state = 0; break; case 13: //textbox removal obj.removetrigger(13); dwgfx.textboxremovefast(); state = 0; break; case 14: //Intermission 1 instructional textbox, depends on last saved if (dwgfx.flipmode) { dwgfx.createtextbox(" When you're standing on the ceiling, ", -1, 3, 174, 174, 174); }else{ dwgfx.createtextbox(" When you're standing on the floor, ", -1, 3, 174, 174, 174); } if (lastsaved == 2) { dwgfx.addline(" Vitellary will try to walk to you. "); }else if (lastsaved == 3) { dwgfx.addline(" Vermilion will try to walk to you. "); }else if (lastsaved == 4) { dwgfx.addline(" Verdigris will try to walk to you. "); }else if (lastsaved == 5) { dwgfx.addline(" Victoria will try to walk to you. ");} dwgfx.textboxtimer(280); state = 0; break; case 15: //leaving the naughty corner obj.entities[obj.getplayer()].tile = 0; state = 0; break; case 16: //entering the naughty corner if(obj.entities[obj.getplayer()].tile == 0){ obj.entities[obj.getplayer()].tile = 144; music.playef(2, 10); } state = 0; break; case 17: //Arrow key tutorial /* obj.removetrigger(17); dwgfx.createtextbox(" If you prefer, you can press UP or ", -1, 195, 174, 174, 174); dwgfx.addline(" DOWN instead of ACTION to flip."); dwgfx.textboxtimer(100); */ state = 0; break; case 20: if (obj.flags[1] == 0) { obj.changeflag(1, 1); state = 0; dwgfx.textboxremove(); } obj.removetrigger(20); break; case 21: if (obj.flags[2] == 0) { obj.changeflag(2, 1); state = 0; dwgfx.textboxremove(); } obj.removetrigger(21); break; case 22: if (obj.flags[3] == 0) { dwgfx.textboxremovefast(); obj.changeflag(3, 1); state = 0; switch(controlstyle) { case 0: case 2: dwgfx.createtextbox(" Tap on the right to flip ", -1, 25, 174, 174, 174); break; case 1: dwgfx.createtextbox(" Tap both sides together to flip ", -1, 25, 174, 174, 174); break; } dwgfx.textboxtimer(60); } obj.removetrigger(22); break; case 30: //Generic "run script" if (obj.flags[4] == 0) { obj.changeflag(4, 1); startscript = true; newscript="firststeps"; state = 0; } obj.removetrigger(30); state = 0; break; case 31: //state = 55; statedelay = 50; state = 0; statedelay = 0; if (obj.flags[6] == 0) { obj.changeflag(6, 1); obj.changeflag(5, 1); startscript = true; newscript="communicationstation"; state = 0; statedelay = 0; } obj.removetrigger(31); break; case 32: //Generic "run script" if (obj.flags[7] == 0) { obj.changeflag(7, 1); startscript = true; newscript="teleporterback"; state = 0; } obj.removetrigger(32); state = 0; break; case 33: //Generic "run script" if (obj.flags[9] == 0) { obj.changeflag(9, 1); startscript = true; newscript="rescueblue"; state = 0; } obj.removetrigger(33); state = 0; break; case 34: //Generic "run script" if (obj.flags[10] == 0) { obj.changeflag(10, 1); startscript = true; newscript="rescueyellow"; state = 0; } obj.removetrigger(34); state = 0; break; case 35: //Generic "run script" if (obj.flags[11] == 0) { obj.changeflag(11, 1); startscript = true; newscript="rescuegreen"; state = 0; } obj.removetrigger(35); state = 0; break; case 36: //Generic "run script" if (obj.flags[8] == 0) { obj.changeflag(8, 1); startscript = true; newscript="rescuered"; state = 0; } obj.removetrigger(36); state = 0; break; case 37: //Generic "run script" if (companion == 0) { startscript = true; newscript="int2_yellow"; state = 0; } obj.removetrigger(37); state = 0; break; case 38: //Generic "run script" if (companion == 0) { startscript = true; newscript="int2_red"; state = 0; } obj.removetrigger(38); state = 0; break; case 39: //Generic "run script" if (companion == 0) { startscript = true; newscript="int2_green"; state = 0; } obj.removetrigger(39); state = 0; break; case 40: //Generic "run script" if (companion == 0) { startscript = true; newscript="int2_blue"; state = 0; } obj.removetrigger(40); state = 0; break; case 41: //Generic "run script" if (obj.flags[60] == 0) { obj.changeflag(60, 1); startscript = true; if (lastsaved == 2) { newscript = "int1yellow_2"; }else if (lastsaved == 3) { newscript = "int1red_2"; }else if (lastsaved == 4) { newscript = "int1green_2"; }else if (lastsaved == 5) { newscript = "int1blue_2";} state = 0; } obj.removetrigger(41); state = 0; break; case 42: //Generic "run script" if (obj.flags[62] == 0) { obj.changeflag(62, 1); startscript = true; if (lastsaved == 2) { newscript = "int1yellow_3"; }else if (lastsaved == 3) { newscript = "int1red_3"; }else if (lastsaved == 4) { newscript = "int1green_3"; }else if (lastsaved == 5) { newscript = "int1blue_3";} state = 0; } obj.removetrigger(42); state = 0; break; case 43: //Generic "run script" if (obj.flags[63] == 0) { obj.changeflag(63, 1); startscript = true; if (lastsaved == 2) { newscript = "int1yellow_4"; }else if (lastsaved == 3) { newscript = "int1red_4"; }else if (lastsaved == 4) { newscript = "int1green_4"; }else if (lastsaved == 5) { newscript = "int1blue_4";} state = 0; } obj.removetrigger(43); state = 0; break; case 44: //Generic "run script" if (obj.flags[64] == 0) { obj.changeflag(64, 1); startscript = true; if (lastsaved == 2) { newscript = "int1yellow_5"; }else if (lastsaved == 3) { newscript = "int1red_5"; }else if (lastsaved == 4) { newscript = "int1green_5"; }else if (lastsaved == 5) { newscript = "int1blue_5";} state = 0; } obj.removetrigger(44); state = 0; break; case 45: //Generic "run script" if (obj.flags[65] == 0) { obj.changeflag(65, 1); startscript = true; if (lastsaved == 2) { newscript = "int1yellow_6"; }else if (lastsaved == 3) { newscript = "int1red_6"; }else if (lastsaved == 4) { newscript = "int1green_6"; }else if (lastsaved == 5) { newscript = "int1blue_6";} state = 0; } obj.removetrigger(45); state = 0; break; case 46: //Generic "run script" if (obj.flags[66] == 0) { obj.changeflag(66, 1); startscript = true; if (lastsaved == 2) { newscript = "int1yellow_7"; }else if (lastsaved == 3) { newscript = "int1red_7"; }else if (lastsaved == 4) { newscript = "int1green_7"; }else if (lastsaved == 5) { newscript = "int1blue_7";} state = 0; } obj.removetrigger(46); state = 0; break; case 47: //Generic "run script" if (obj.flags[69] == 0) { obj.changeflag(69, 1); startscript = true; newscript="trenchwarfare"; state = 0; } obj.removetrigger(47); state = 0; break; case 48: //Generic "run script" if (obj.flags[70] == 0) { obj.changeflag(70, 1); startscript = true; newscript="trinketcollector"; state = 0; } obj.removetrigger(48); state = 0; break; case 49: //Start final level music if (obj.flags[71] == 0) { obj.changeflag(71, 1); music.niceplay(15); //Final level remix state = 0; } obj.removetrigger(49); state = 0; break; case 50: music.playef(15, 10); dwgfx.createtextbox("Help! Can anyone hear", 35, 15, 255, 134, 255); dwgfx.addline("this message?"); dwgfx.textboxtimer(60); state++; statedelay = 100; break; case 51: music.playef(15, 10); dwgfx.createtextbox("Verdigris? Are you out", 30, 12, 255, 134, 255); dwgfx.addline("there? Are you ok?"); dwgfx.textboxtimer(60); state++; statedelay = 100; break; case 52: music.playef(15, 10); dwgfx.createtextbox("Please help us! We've crashed", 5, 22, 255, 134, 255); dwgfx.addline("and need assistance!"); dwgfx.textboxtimer(60); state++; statedelay = 100; break; case 53: music.playef(15, 10); dwgfx.createtextbox("Hello? Anyone out there?", 40, 15, 255, 134, 255); dwgfx.textboxtimer(60); state++; statedelay = 100; break; case 54: music.playef(15, 10); dwgfx.createtextbox("This is Doctor Violet from the", 5, 8, 255, 134, 255); dwgfx.addline("D.S.S. Souleye! Please respond!"); dwgfx.textboxtimer(60); state++; statedelay = 100; break; case 55: music.playef(15, 10); dwgfx.createtextbox("Please... Anyone...", 45, 14, 255, 134, 255); dwgfx.textboxtimer(60); state++; statedelay = 100; break; case 56: music.playef(15, 10); dwgfx.createtextbox("Please be alright, everyone...", 25, 18, 255, 134, 255); dwgfx.textboxtimer(60); state=50; statedelay = 100; break; case 80: //Used to return to menu from the game if(dwgfx.fademode == 1) state++; break; case 81: gamestate = 1; dwgfx.fademode = 4; music.play(6); dwgfx.backgrounddrawn = false; map.tdrawback = true; dwgfx.flipmode = false; createmenu("mainmenu"); state = 0; break; case 82: //Time Trial Complete! obj.removetrigger(82); hascontrol = false; timetrialresulttime = seconds + (minutes * 60); timetrialrank = 0; if (timetrialresulttime <= timetrialpar) timetrialrank++; if (trinkets >= timetrialshinytarget) timetrialrank++; if (deathcounts == 0) timetrialrank++; if (timetrialresulttime < besttimes[timetriallevel] || besttimes[timetriallevel]==-1) { besttimes[timetriallevel] = timetrialresulttime; } if (trinkets > besttrinkets[timetriallevel] || besttrinkets[timetriallevel]==-1) { besttrinkets[timetriallevel] = trinkets; } if (deathcounts < bestlives[timetriallevel] || bestlives[timetriallevel]==-1) { bestlives[timetriallevel] = deathcounts; } if (timetrialrank > bestrank[timetriallevel] || bestrank[timetriallevel]==-1) { bestrank[timetriallevel] = timetrialrank; scores.reportAchievement(6 + timetriallevel); } savestats(map, dwgfx); dwgfx.fademode = 2; music.fadeout(); state++; break; case 83: frames--; if(dwgfx.fademode == 1) state++; break; case 84: dwgfx.flipmode = false; gamestate = 1; dwgfx.fademode = 4; dwgfx.backgrounddrawn = true; map.tdrawback = true; createmenu("timetrialcomplete"); state = 0; break; case 85: //Cutscene skip version of final level change obj.removetrigger(85); //Init final stretch state++; music.playef(9, 10); music.play(2); obj.flags[72] = 1; screenshake = 10; flashlight = 5; map.finalstretch = true; map.warpx = false; map.warpy = false; map.background = 6; map.final_colormode = true; map.final_colorframe = 1; state = 0; break; //From 90-100 are run scripts for the eurogamer expo only, remove later case 90: //Generic "run script" startscript = true; newscript="startexpolevel_station1"; obj.removetrigger(90); state = 0; break; case 91: //Generic "run script" startscript = true; newscript="startexpolevel_lab"; obj.removetrigger(91); state = 0; break; case 92: //Generic "run script" startscript = true; newscript="startexpolevel_warp"; obj.removetrigger(92); state = 0; break; case 93: //Generic "run script" startscript = true; newscript="startexpolevel_tower"; obj.removetrigger(93); state = 0; break; case 94: //Generic "run script" startscript = true; newscript="startexpolevel_station2"; obj.removetrigger(94); state = 0; break; case 95: //Generic "run script" startscript = true; newscript="startexpolevel_final"; obj.removetrigger(95); state = 0; break; case 96: //Used to return to gravitron to game if(dwgfx.fademode == 1) state++; break; case 97: gamestate = 0; dwgfx.fademode = 4; startscript = true; newscript="returntolab"; state = 0; break; case 100: // // Meeting crewmate in the warpzone // obj.removetrigger(100); if (obj.flags[4] == 0) { obj.changeflag(4, 1); state++; } break; case 101: i = obj.getplayer(); hascontrol = false; if (obj.entities[i].onroof > 0 && gravitycontrol == 1) { gravitycontrol = 0; music.playef(1, 10); } if (obj.entities[i].onground > 0) { state++; } break; case 102: companion = 6; i = obj.getcompanion(6); obj.entities[i].tile = 0; obj.entities[i].state = 1; advancetext = true; hascontrol = false; dwgfx.createtextbox("Captain! I've been so worried!", 60, 90, 164, 255, 164); state++; music.playef(12, 10); break; case 104: dwgfx.createtextbox("I'm glad you're ok!", 135, 152, 164, 164, 255); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 106: dwgfx.createtextbox("I've been trying to find a", 74, 70, 164, 255, 164); dwgfx.addline("way out, but I keep going"); dwgfx.addline("around in circles..."); state++; music.playef(2, 10); dwgfx.textboxactive(); i = obj.getcompanion(6); obj.entities[i].tile = 54; obj.entities[i].state = 0; break; case 108: dwgfx.createtextbox("Don't worry! I have a", 125, 152, 164, 164, 255); dwgfx.addline("teleporter key!"); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 110: i = obj.getcompanion(6); obj.entities[i].tile = 0; obj.entities[i].state = 1; dwgfx.createtextbox("Follow me!", 185, 154, 164, 164, 255); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 112: dwgfx.textboxremove(); hascontrol = true; advancetext = false; state = 0; break; case 115: // // Test script for space station, totally delete me! // i = obj.getplayer(); hascontrol = false; state++; break; case 116: advancetext = true; hascontrol = false; dwgfx.createtextbox("Sorry Eurogamers! Teleporting around", 60 - 20, 200, 255, 64, 64); dwgfx.addline("the map doesn't work in this version!"); dwgfx.textboxcenterx(); state++; break; case 118: dwgfx.textboxremove(); hascontrol = true; advancetext = false; state = 0; break; case 120: // // Meeting crewmate in the space station // obj.removetrigger(120); if (obj.flags[5] == 0) { obj.changeflag(5, 1); state++; } break; case 121: i = obj.getplayer(); hascontrol = false; if (obj.entities[i].onground > 0 && gravitycontrol == 0) { gravitycontrol = 1; music.playef(1, 10); } if (obj.entities[i].onroof > 0) { state++; } break; case 122: companion = 7; i = obj.getcompanion(7); obj.entities[i].tile = 6; obj.entities[i].state = 1; advancetext = true; hascontrol = false; dwgfx.createtextbox("Captain! You're ok!", 60-10, 90-40, 255, 255, 134); state++; music.playef(14, 10); break; case 124: dwgfx.createtextbox("I've found a teleporter, but", 60-20, 90 - 40, 255, 255, 134); dwgfx.addline("I can't get it to go anywhere..."); state++; music.playef(2, 10); dwgfx.textboxactive(); i = obj.getcompanion(7); //obj.entities[i].tile = 66; obj.entities[i].state = 0; break; case 126: dwgfx.createtextbox("I can help with that!", 125, 152-40, 164, 164, 255); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 128: dwgfx.createtextbox("I have the teleporter", 130, 152-35, 164, 164, 255); dwgfx.addline("codex for our ship!"); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 130: dwgfx.createtextbox("Yey! Let's go home!", 60-30, 90-35, 255, 255, 134); state++; music.playef(14, 10); dwgfx.textboxactive(); i = obj.getcompanion(7); obj.entities[i].tile = 6; obj.entities[i].state = 1; break; case 132: dwgfx.textboxremove(); hascontrol = true; advancetext = false; state = 0; break; case 200: //Init final stretch state++; music.playef(9, 10); //music.play(2); obj.flags[72] = 1; screenshake = 10; flashlight = 5; map.finalstretch = true; map.warpx = false; map.warpy = false; map.background = 6; map.final_colormode = true; map.final_colorframe = 1; startscript = true; newscript="finalterminal_finish"; state = 0; break; case 300: startscript = true; newscript="custom_"+customscript[0]; obj.removetrigger(300); state = 0; break; case 301: startscript = true; newscript="custom_"+customscript[1]; obj.removetrigger(301); state = 0; break; case 302: startscript = true; newscript="custom_"+customscript[2]; obj.removetrigger(302); state = 0; break; case 303: startscript = true; newscript="custom_"+customscript[3]; obj.removetrigger(303); state = 0; break; case 304: startscript = true; newscript="custom_"+customscript[4]; obj.removetrigger(304); state = 0; break; case 305: startscript = true; newscript="custom_"+customscript[5]; obj.removetrigger(305); state = 0; break; case 306: startscript = true; newscript="custom_"+customscript[6]; obj.removetrigger(306); state = 0; break; case 307: startscript = true; newscript="custom_"+customscript[7]; obj.removetrigger(307); state = 0; break; case 308: startscript = true; newscript="custom_"+customscript[8]; obj.removetrigger(308); state = 0; break; case 309: startscript = true; newscript="custom_"+customscript[9]; obj.removetrigger(309); state = 0; break; case 310: startscript = true; newscript="custom_"+customscript[10]; obj.removetrigger(310); state = 0; break; case 311: startscript = true; newscript="custom_"+customscript[11]; obj.removetrigger(311); state = 0; break; case 312: startscript = true; newscript="custom_"+customscript[12]; obj.removetrigger(312); state = 0; break; case 313: startscript = true; newscript="custom_"+customscript[13]; obj.removetrigger(313); state = 0; break; case 314: startscript = true; newscript="custom_"+customscript[14]; obj.removetrigger(314); state = 0; break; case 315: startscript = true; newscript="custom_"+customscript[15]; obj.removetrigger(315); state = 0; break; case 316: startscript = true; newscript="custom_"+customscript[16]; obj.removetrigger(316); state = 0; break; case 317: startscript = true; newscript="custom_"+customscript[17]; obj.removetrigger(317); state = 0; break; case 318: startscript = true; newscript="custom_"+customscript[18]; obj.removetrigger(318); state = 0; break; case 319: startscript = true; newscript="custom_"+customscript[19]; obj.removetrigger(319); state = 0; break; case 320: startscript = true; newscript="custom_"+customscript[20]; obj.removetrigger(320); state = 0; break; case 321: startscript = true; newscript="custom_"+customscript[21]; obj.removetrigger(321); state = 0; break; case 322: startscript = true; newscript="custom_"+customscript[22]; obj.removetrigger(322); state = 0; break; case 323: startscript = true; newscript="custom_"+customscript[23]; obj.removetrigger(323); state = 0; break; case 324: startscript = true; newscript="custom_"+customscript[24]; obj.removetrigger(324); state = 0; break; case 325: startscript = true; newscript="custom_"+customscript[25]; obj.removetrigger(325); state = 0; break; case 326: startscript = true; newscript="custom_"+customscript[26]; obj.removetrigger(326); state = 0; break; case 327: startscript = true; newscript="custom_"+customscript[27]; obj.removetrigger(327); state = 0; break; case 328: startscript = true; newscript="custom_"+customscript[28]; obj.removetrigger(328); state = 0; break; case 329: startscript = true; newscript="custom_"+customscript[29]; obj.removetrigger(329); state = 0; break; case 330: startscript = true; newscript="custom_"+customscript[30]; obj.removetrigger(330); state = 0; break; case 331: startscript = true; newscript="custom_"+customscript[31]; obj.removetrigger(331); state = 0; break; case 332: startscript = true; newscript="custom_"+customscript[32]; obj.removetrigger(332); state = 0; break; case 333: startscript = true; newscript="custom_"+customscript[33]; obj.removetrigger(333); state = 0; break; case 334: startscript = true; newscript="custom_"+customscript[34]; obj.removetrigger(334); state = 0; break; case 335: startscript = true; newscript="custom_"+customscript[35]; obj.removetrigger(335); state = 0; break; case 336: startscript = true; newscript="custom_"+customscript[36]; obj.removetrigger(336); state = 0; break; case 1000: dwgfx.showcutscenebars = true; hascontrol = false; completestop = true; state++; statedelay = 15; break; case 1001: //Found a trinket! advancetext = true; state++; if (dwgfx.flipmode) { dwgfx.createtextbox(" Congratulations! ", 50, 105, 174, 174, 174); dwgfx.addline(""); dwgfx.addline("You have found a shiny trinket!"); dwgfx.textboxcenterx(); if (map.custommode) { dwgfx.createtextbox(" " + help.number(trinkets) + " out of " + help.number(map.customtrinkets), 50, 65, 174, 174, 174); }else{ dwgfx.createtextbox(" " + help.number(trinkets) + " out of Twenty ", 50, 65, 174, 174, 174); } dwgfx.textboxcenterx(); }else{ dwgfx.createtextbox(" Congratulations! ", 50, 85, 174, 174, 174); dwgfx.addline(""); dwgfx.addline("You have found a shiny trinket!"); dwgfx.textboxcenterx(); if (map.custommode) { dwgfx.createtextbox(" " + help.number(trinkets) + " out of " + help.number(map.customtrinkets), 50, 135, 174, 174, 174); }else{ dwgfx.createtextbox(" " + help.number(trinkets) + " out of Twenty ", 50, 135, 174, 174, 174); } dwgfx.textboxcenterx(); } break; case 1003: dwgfx.textboxremove(); hascontrol = true; advancetext = false; completestop = false; state = 0; //music.play(music.resumesong); music.musicfadein = 90; dwgfx.showcutscenebars = false; break; case 1010: dwgfx.showcutscenebars = true; hascontrol = false; completestop = true; state++; statedelay = 15; break; case 1011: //Found a trinket! advancetext = true; state++; if (dwgfx.flipmode) { dwgfx.createtextbox(" Congratulations! ", 50, 105, 174, 174, 174); dwgfx.addline(""); dwgfx.addline("You have found a lost crewmate!"); dwgfx.textboxcenterx(); if(int(map.customcrewmates-crewmates)==0) { dwgfx.createtextbox(" All crewmates rescued! ", 50, 135, 174, 174, 174); } else if(map.customcrewmates-crewmates==1) { dwgfx.createtextbox(" " + help.number(int(map.customcrewmates-crewmates))+ " remains ", 50, 135, 174, 174, 174); } else { dwgfx.createtextbox(" " + help.number(int(map.customcrewmates-crewmates))+ " remain ", 50, 135, 174, 174, 174); } dwgfx.textboxcenterx(); } else { dwgfx.createtextbox(" Congratulations! ", 50, 85, 174, 174, 174); dwgfx.addline(""); dwgfx.addline("You have found a lost crewmate!"); dwgfx.textboxcenterx(); if(int(map.customcrewmates-crewmates)==0) { dwgfx.createtextbox(" All crewmates rescued! ", 50, 135, 174, 174, 174); } else if(map.customcrewmates-crewmates==1) { dwgfx.createtextbox(" " + help.number(int(map.customcrewmates-crewmates))+ " remains ", 50, 135, 174, 174, 174); } else { dwgfx.createtextbox(" " + help.number(int(map.customcrewmates-crewmates))+ " remain ", 50, 135, 174, 174, 174); } dwgfx.textboxcenterx(); } break; case 1013: dwgfx.textboxremove(); hascontrol = true; advancetext = false; completestop = false; state = 0; if(map.customcrewmates-crewmates==0) { if(map.custommodeforreal) { dwgfx.fademode = 2; if(!muted && editor.levmusic>0) music.musicfadein = 90; if(editor.levmusic>0) music.fadeout(); state=1014; } else { gamestate = EDITORMODE; dwgfx.backgrounddrawn=false; if(!muted && editor.levmusic>0) music.musicfadein = 90; if(editor.levmusic>0) music.fadeout(); } } else { if(!muted && editor.levmusic>0) music.musicfadein = 90; } dwgfx.showcutscenebars = false; break; case 1014: frames--; if(dwgfx.fademode == 1) state++; break; case 1015: dwgfx.flipmode = false; gamestate = TITLEMODE; dwgfx.fademode = 4; music.play(6); dwgfx.backgrounddrawn = true; map.tdrawback = true; //Update level stats if(map.customcrewmates-crewmates==0) { //Finished level if(map.customtrinkets-trinkets==0) { //and got all the trinkets! updatecustomlevelstats(customlevelfilename, 3); } else { updatecustomlevelstats(customlevelfilename, 1); } } createmenu("levellist"); state = 0; break; case 2000: //Game Saved! if (intimetrial || nodeathmode || inintermission) { state = 0; }else{ savetele(map, obj, music, help); if (dwgfx.flipmode) { dwgfx.createtextbox(" Game Saved ", -1, 202, 174, 174, 174); dwgfx.textboxtimer(25); }else{ dwgfx.createtextbox(" Game Saved ", -1, 12, 174, 174, 174); dwgfx.textboxtimer(25); } state = 0; } break; case 2500: music.play(5); //Activating a teleporter (appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 2501: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; //we're done here! music.playef(10, 10); break; case 2502: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].xp = obj.entities[obj.getteleporter()].xp+44; obj.entities[i].yp = obj.entities[obj.getteleporter()].yp+44; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; i = obj.getteleporter(); obj.entities[i].tile = 1; obj.entities[i].colour = 101; break; case 2503: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 2504: state++; i = obj.getplayer(); //obj.entities[i].xp += 10; break; case 2505: state++; i = obj.getplayer(); obj.entities[i].xp += 8; break; case 2506: state++; i = obj.getplayer(); obj.entities[i].xp += 6; break; case 2507: state++; i = obj.getplayer(); //obj.entities[i].xp += 4; break; case 2508: state++; i = obj.getplayer(); obj.entities[i].xp += 2; break; case 2509: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 1; break; case 2510: advancetext = true; hascontrol = false; dwgfx.createtextbox("Hello?", 125+24, 152-20, 164, 164, 255); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 2512: advancetext = true; hascontrol = false; dwgfx.createtextbox("Is anyone there?", 125+8, 152-24, 164, 164, 255); state++; music.playef(11, 10); dwgfx.textboxactive(); break; case 2514: dwgfx.textboxremove(); hascontrol = true; advancetext = false; state = 0; music.play(3); break; case 3000: //Activating a teleporter (long version for level complete) state++; statedelay = 30; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 3001: //Activating a teleporter 2 state++; statedelay = 15; flashlight = 5; music.playef(9, 10); break; case 3002: //Activating a teleporter 2 state++; statedelay = 15; flashlight = 5; music.playef(9, 10); break; case 3003: //Activating a teleporter 2 state++; statedelay = 15; flashlight = 5; music.playef(9, 10); break; case 3004: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; //we're done here! music.playef(10, 10); break; case 3005: //Activating a teleporter 2 state++; statedelay = 50; //testing! //state = 3006; //Warp Zone //state = 3020; //Space Station switch(companion) { case 6: state = 3006; break; //Warp Zone case 7: state = 3020; break; //Space Station case 8: state = 3040; break; //Lab case 9: state = 3060; break; //Tower case 10: state = 3080; break; //Intermission 2 case 11: state = 3085; break; //Intermission 1 } i = obj.getplayer(); obj.entities[i].colour = 0; obj.entities[i].invis = true; i = obj.getcompanion(companion); if(i>-1){ obj.entities[i].active = false; } i = obj.getteleporter(); obj.entities[i].tile = 1; obj.entities[i].colour = 100; break; case 3006: //Level complete! (warp zone) unlocknum(4, map, dwgfx); lastsaved = 4; music.play(0); state++; statedelay = 75; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 180, 165, 165, 255); }else{ dwgfx.createtextbox("", -1, 12, 165, 165, 255); } //dwgfx.addline(" Level Complete! "); dwgfx.addline(" "); dwgfx.addline(""); dwgfx.addline(""); dwgfx.textboxcenterx(); /* advancetext = true; hascontrol = false; state = 3; dwgfx.createtextbox("To do: write quick", 50, 80, 164, 164, 255); dwgfx.addline("intro to story!");*/ break; case 3007: state++; statedelay = 45; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 104, 175,174,174); }else { dwgfx.createtextbox("", -1, 64+8+16, 175,174,174); } dwgfx.addline(" You have rescued "); dwgfx.addline(" a crew member! "); dwgfx.addline(""); dwgfx.textboxcenterx(); break; case 3008: state++; statedelay = 45; temp = 6 - crewrescued(); if (temp == 1) { tempstring = " One remains "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else if (temp > 0) { tempstring = " " + help.number(temp) + " remain "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else { if (dwgfx.flipmode) { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 128+16, 174, 174, 174); } } dwgfx.textboxcenterx(); break; case 3009: state++; statedelay = 0; if (dwgfx.flipmode) { dwgfx.createtextbox(" Tap screen to continue ", -1, 20, 164, 164, 255); }else { dwgfx.createtextbox(" Tap screen to continue ", -1, 196, 164, 164, 255); } dwgfx.textboxcenterx(); break; case 3010: if (jumppressed) { state++; statedelay = 30; dwgfx.textboxremove(); } break; case 3011: state = 3070; statedelay = 0; break; case 3020: //Level complete! (Space Station 2) unlocknum(3, map, dwgfx); lastsaved = 2; music.play(0); state++; statedelay = 75; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 180, 165, 165, 255); }else{ dwgfx.createtextbox("", -1, 12, 165, 165, 255); } //dwgfx.addline(" Level Complete! "); dwgfx.addline(" "); dwgfx.addline(""); dwgfx.addline(""); dwgfx.textboxcenterx(); /* advancetext = true; hascontrol = false; state = 3; dwgfx.createtextbox("To do: write quick", 50, 80, 164, 164, 255); dwgfx.addline("intro to story!");*/ break; case 3021: state++; statedelay = 45; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 104, 174,175,174); }else { dwgfx.createtextbox("", -1, 64+8+16, 174,175,174); } dwgfx.addline(" You have rescued "); dwgfx.addline(" a crew member! "); dwgfx.addline(""); dwgfx.textboxcenterx(); break; case 3022: state++; statedelay = 45; temp = 6 - crewrescued(); if (temp == 1) { tempstring = " One remains "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else if (temp > 0) { tempstring = " " + help.number(temp) + " remain "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else { if (dwgfx.flipmode) { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 128+16, 174, 174, 174); } } dwgfx.textboxcenterx(); break; case 3023: state++; statedelay = 0; if (dwgfx.flipmode) { dwgfx.createtextbox(" Tap screen to continue ", -1, 20, 164, 164, 255); }else { dwgfx.createtextbox(" Tap screen to continue ", -1, 196, 164, 164, 255); } dwgfx.textboxcenterx(); break; case 3024: if (jumppressed) { state++; statedelay = 30; dwgfx.textboxremove(); } break; case 3025: state = 3070; statedelay = 0; break; case 3040: //Level complete! (Lab) unlocknum(1, map, dwgfx); lastsaved = 5; music.play(0); state++; statedelay = 75; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 180, 165, 165, 255); }else{ dwgfx.createtextbox("", -1, 12, 165, 165, 255); } //dwgfx.addline(" Level Complete! "); dwgfx.addline(" "); dwgfx.addline(""); dwgfx.addline(""); dwgfx.textboxcenterx(); /* advancetext = true; hascontrol = false; state = 3; dwgfx.createtextbox("To do: write quick", 50, 80, 164, 164, 255); dwgfx.addline("intro to story!");*/ break; case 3041: state++; statedelay = 45; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 104, 174,174,175); }else { dwgfx.createtextbox("", -1, 64+8+16, 174,174,175); } dwgfx.addline(" You have rescued "); dwgfx.addline(" a crew member! "); dwgfx.addline(""); dwgfx.textboxcenterx(); break; case 3042: state++; statedelay = 45; temp = 6 - crewrescued(); if (temp == 1) { tempstring = " One remains "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else if (temp > 0) { tempstring = " " + help.number(temp) + " remain "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else { if (dwgfx.flipmode) { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 128+16, 174, 174, 174); } } dwgfx.textboxcenterx(); break; case 3043: state++; statedelay = 0; if (dwgfx.flipmode) { dwgfx.createtextbox(" Tap screen to continue ", -1, 20, 164, 164, 255); }else { dwgfx.createtextbox(" Tap screen to continue ", -1, 196, 164, 164, 255); } dwgfx.textboxcenterx(); break; case 3044: if (jumppressed) { state++; statedelay = 30; dwgfx.textboxremove(); } break; case 3045: state = 3070; statedelay = 0; break; case 3050: //Level complete! (Space Station 1) unlocknum(0, map, dwgfx); lastsaved = 1; music.play(0); state++; statedelay = 75; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 180, 165, 165, 255); }else{ dwgfx.createtextbox("", -1, 12, 165, 165, 255); } //dwgfx.addline(" Level Complete! "); dwgfx.addline(" "); dwgfx.addline(""); dwgfx.addline(""); dwgfx.textboxcenterx(); /* advancetext = true; hascontrol = false; state = 3; dwgfx.createtextbox("To do: write quick", 50, 80, 164, 164, 255); dwgfx.addline("intro to story!");*/ break; case 3051: state++; statedelay = 45; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 104, 175,175,174); }else { dwgfx.createtextbox("", -1, 64+8+16, 175,175,174); } dwgfx.addline(" You have rescued "); dwgfx.addline(" a crew member! "); dwgfx.addline(""); dwgfx.textboxcenterx(); break; case 3052: state++; statedelay = 45; temp = 6 - crewrescued(); if (temp == 1) { tempstring = " One remains "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else if (temp > 0) { tempstring = " " + help.number(temp) + " remain "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else { if (dwgfx.flipmode) { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 128+16, 174, 174, 174); } } dwgfx.textboxcenterx(); break; case 3053: state++; statedelay = 0; if (dwgfx.flipmode) { dwgfx.createtextbox(" Tap screen to continue ", -1, 20, 164, 164, 255); }else { dwgfx.createtextbox(" Tap screen to continue ", -1, 196, 164, 164, 255); } dwgfx.textboxcenterx(); break; case 3054: if (jumppressed) { state++; statedelay = 30; dwgfx.textboxremove(); crewstats[1] = 0; //Set violet's rescue script to 0 to make the next bit easier teleportscript = ""; } break; case 3055: dwgfx.fademode = 2; state++; statedelay = 10; break; case 3056: if(dwgfx.fademode==1){ startscript = true; if (nocutscenes) { newscript="bigopenworldskip"; }else{ newscript = "bigopenworld"; } state = 0; } break; case 3060: //Level complete! (Tower) unlocknum(2, map, dwgfx); lastsaved = 3; music.play(0); state++; statedelay = 75; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 180, 165, 165, 255); }else{ dwgfx.createtextbox("", -1, 12, 165, 165, 255); } //dwgfx.addline(" Level Complete! "); dwgfx.addline(" "); dwgfx.addline(""); dwgfx.addline(""); dwgfx.textboxcenterx(); /* advancetext = true; hascontrol = false; state = 3; dwgfx.createtextbox("To do: write quick", 50, 80, 164, 164, 255); dwgfx.addline("intro to story!");*/ break; case 3061: state++; statedelay = 45; if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 104, 175,174,175); }else { dwgfx.createtextbox("", -1, 64+8+16, 175,174,175); } dwgfx.addline(" You have rescued "); dwgfx.addline(" a crew member! "); dwgfx.addline(""); dwgfx.textboxcenterx(); break; case 3062: state++; statedelay = 45; temp = 6 - crewrescued(); if (temp == 1) { tempstring = " One remains "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else if (temp > 0) { tempstring = " " + help.number(temp) + " remain "; if (dwgfx.flipmode) { dwgfx.createtextbox(tempstring, -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(tempstring, -1, 128+16, 174, 174, 174); } }else { if (dwgfx.flipmode) { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 72, 174, 174, 174); }else { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 128+16, 174, 174, 174); } } dwgfx.textboxcenterx(); break; case 3063: state++; statedelay = 0; if (dwgfx.flipmode) { dwgfx.createtextbox(" Tap screen to continue ", -1, 20, 164, 164, 255); }else { dwgfx.createtextbox(" Tap screen to continue ", -1, 196, 164, 164, 255); } dwgfx.textboxcenterx(); break; case 3064: if (jumppressed) { state++; statedelay = 30; dwgfx.textboxremove(); } break; case 3065: state = 3070; statedelay = 0; break; case 3070: dwgfx.fademode = 2; state++; break; case 3071: if (dwgfx.fademode == 1) state++; break; case 3072: //Ok, we need to adjust some flags based on who've we've rescued. Some of there conversation options //change depending on when they get back to the ship. if (lastsaved == 2) { if (crewstats[3]) obj.flags[25] = 1; if (crewstats[4]) obj.flags[26] = 1; if (crewstats[5]) obj.flags[24] = 1; }else if (lastsaved == 3) { if (crewstats[2]) obj.flags[50] = 1; if (crewstats[4]) obj.flags[49] = 1; if (crewstats[5]) obj.flags[48] = 1; }else if (lastsaved == 4) { if (crewstats[2]) obj.flags[54] = 1; if (crewstats[3]) obj.flags[55] = 1; if (crewstats[5]) obj.flags[56] = 1; }else if (lastsaved == 5) { if (crewstats[2]) obj.flags[37] = 1; if (crewstats[3]) obj.flags[38] = 1; if (crewstats[4]) obj.flags[39] = 1; } //We're pitch black now, make a decision companion = 0; if (crewrescued() == 6) { startscript = true; newscript="startlevel_final"; state = 0; }else if (crewrescued() == 4) { companion = 11; supercrewmate = true; scmprogress = 0; startscript = true; newscript = "intermission_1"; obj.flags[19] = 1; if (lastsaved == 2) obj.flags[32] = 1; if (lastsaved == 3) obj.flags[35] = 1; if (lastsaved == 4) obj.flags[34] = 1; if (lastsaved == 5) obj.flags[33] = 1; state = 0; }else if (crewrescued() == 5) { startscript = true; newscript = "intermission_2"; obj.flags[20] = 1; if (lastsaved == 2) obj.flags[32] = 1; if (lastsaved == 3) obj.flags[35] = 1; if (lastsaved == 4) obj.flags[34] = 1; if (lastsaved == 5) obj.flags[33] = 1; state = 0; }else { startscript = true; newscript="regularreturn"; state = 0; } break; case 3080: //returning from an intermission, very like 3070 if (inintermission) { dwgfx.fademode = 2; companion = 0; state=3100; }else{ unlocknum(7, map, dwgfx); dwgfx.fademode = 2; companion = 0; state++; } break; case 3081: if (dwgfx.fademode == 1) state++; break; case 3082: map.finalmode = false; startscript = true; newscript="regularreturn"; state = 0; break; case 3085: //returning from an intermission, very like 3070 //return to menu from here if (inintermission) { companion = 0; supercrewmate = false; state++; dwgfx.fademode = 2; music.fadeout(); state=3100; }else{ unlocknum(6, map, dwgfx); dwgfx.fademode = 2; companion = 0; supercrewmate = false; state++; } break; case 3086: if (dwgfx.fademode == 1) state++; break; case 3087: map.finalmode = false; startscript = true; newscript="regularreturn"; state = 0; break; case 3100: if(dwgfx.fademode == 1) state++; break; case 3101: dwgfx.flipmode = false; gamestate = 1; dwgfx.fademode = 4; dwgfx.backgrounddrawn = true; map.tdrawback = true; createmenu("play"); music.play(6); state = 0; break; //startscript = true; newscript="returntohub"; //state = 0; /*case 3025: if (recording == 1) { //if recording the input, output it to debug here trace(recordstring); help.toclipboard(recordstring); } test = true; teststring = recordstring; dwgfx.createtextbox(" Congratulations! ", 50, 80, 164, 164, 255); dwgfx.addline(""); dwgfx.addline("Your play of this level has"); dwgfx.addline("been copied to the clipboard."); dwgfx.addline(""); dwgfx.addline("Please consider pasting and"); dwgfx.addline("sending it to me! Even if you"); dwgfx.addline("made a lot of mistakes - knowing"); dwgfx.addline("exactly where people are having"); dwgfx.addline("trouble is extremely useful!"); dwgfx.textboxcenter(); state = 0; break;*/ case 3500: music.fadeout(); state++; statedelay = 120; //state = 3511; //testing break; case 3501: //Game complete! scores.reportAchievement(scores.vvvvvvgamecomplete); unlocknum(5, map, dwgfx); crewstats[0] = true; state++; statedelay = 75; music.play(7); if (dwgfx.flipmode) { dwgfx.createtextbox("", -1, 180, 164, 165, 255); }else{ dwgfx.createtextbox("", -1, 12, 164, 165, 255); } dwgfx.addline(" "); dwgfx.addline(""); dwgfx.addline(""); dwgfx.textboxcenterx(); break; case 3502: state++; statedelay = 45+15; if (dwgfx.flipmode) { dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 175-24, 0, 0, 0); }else{ dwgfx.createtextbox(" All Crew Members Rescued! ", -1, 64, 0, 0, 0);} savetime = timestring(help); break; case 3503: state++; statedelay = 45; tempstring = help.number(trinkets); if (dwgfx.flipmode) { dwgfx.createtextbox("Trinkets Found:", 48, 155-24, 0,0,0); dwgfx.createtextbox(tempstring, 180, 155-24, 0, 0, 0); }else{ dwgfx.createtextbox("Trinkets Found:", 48, 84, 0,0,0); dwgfx.createtextbox(tempstring, 180, 84, 0, 0, 0); } break; case 3504: state++; statedelay = 45+15; tempstring = String(savetime); if (dwgfx.flipmode) { dwgfx.createtextbox(" Game Time:", 64, 143-24, 0,0,0); dwgfx.createtextbox(tempstring, 180, 143-24, 0, 0, 0); }else{ dwgfx.createtextbox(" Game Time:", 64, 96, 0,0,0); dwgfx.createtextbox(tempstring, 180, 96, 0, 0, 0); } break; case 3505: state++; statedelay = 45; if (dwgfx.flipmode) { dwgfx.createtextbox(" Total Flips:", 64, 116-24, 0,0,0); dwgfx.createtextbox(String(totalflips), 180, 116-24, 0, 0, 0); }else{ dwgfx.createtextbox(" Total Flips:", 64, 123, 0,0,0); dwgfx.createtextbox(String(totalflips), 180, 123, 0, 0, 0); } break; case 3506: state++; statedelay = 45+15; if (dwgfx.flipmode) { dwgfx.createtextbox("Total Deaths:", 64, 104-24, 0,0,0); dwgfx.createtextbox(String(deathcounts), 180, 104-24, 0, 0, 0); }else{ dwgfx.createtextbox("Total Deaths:", 64, 135, 0,0,0); dwgfx.createtextbox(String(deathcounts), 180, 135, 0, 0, 0); } break; case 3507: state++; statedelay = 45+15; if (dwgfx.flipmode) { tempstring = "Hardest Room (with " + String(hardestroomdeaths) + " deaths)"; dwgfx.createtextbox(tempstring, -1, 81-24, 0,0,0); dwgfx.createtextbox(hardestroom, -1, 69-24, 0, 0, 0); }else{ tempstring = "Hardest Room (with " + String(hardestroomdeaths) + " deaths)"; dwgfx.createtextbox(tempstring, -1, 158, 0,0,0); dwgfx.createtextbox(hardestroom, -1, 170, 0, 0, 0); } break; case 3508: state++; statedelay = 0; if (dwgfx.flipmode) { dwgfx.createtextbox(" Tap screen to continue ", -1, 20, 164, 164, 255); }else{ dwgfx.createtextbox(" Tap screen to continue ", -1, 196, 164, 164, 255); } dwgfx.textboxcenterx(); break; case 3509: if (jumppressed) { state++; statedelay = 30; dwgfx.textboxremove(); } break; case 3510: //Save stats and stuff here if (obj.flags[73] == 0) { //flip mode complete scores.reportAchievement(scores.vvvvvvgamecompleteflip); unlock[19] = true; } if (bestgamedeaths == -1) { bestgamedeaths = deathcounts; }else { if (deathcounts < bestgamedeaths) { bestgamedeaths = deathcounts; } } if (bestgamedeaths > -1) { if (bestgamedeaths <= 500) { scores.reportAchievement(scores.vvvvvvcomplete500); } if (bestgamedeaths <= 250) { scores.reportAchievement(scores.vvvvvvcomplete250); } if (bestgamedeaths <= 100) { scores.reportAchievement(scores.vvvvvvcomplete100); } if (bestgamedeaths <= 50) { scores.reportAchievement(scores.vvvvvvcomplete50); } } savestats(map, dwgfx); if (nodeathmode) { scores.reportAchievement(scores.vvvvvvmaster); //bloody hell unlock[20] = true; state = 3520; statedelay = 0; }else{ statedelay = 120; state++; } break; case 3511: //Activating a teleporter (long version for level complete) i = obj.getplayer(); obj.entities[i].colour = 102; obj.flags[67] = 1; state++; statedelay = 30; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 3512: //Activating a teleporter 2 state++; statedelay = 15; flashlight = 5; music.playef(9, 10); break; case 3513: //Activating a teleporter 2 state++; statedelay = 15; flashlight = 5; music.playef(9, 10); break; case 3514: //Activating a teleporter 2 state++; statedelay = 15; flashlight = 5; music.playef(9, 10); break; case 3515: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; i = obj.getplayer(); obj.entities[i].colour = 0; obj.entities[i].invis = true; //we're done here! music.playef(10, 10); statedelay = 60; break; case 3516: dwgfx.fademode = 2; state++; break; case 3517: if (dwgfx.fademode == 1) { state++; statedelay = 30; } break; case 3518: dwgfx.fademode = 4; state = 0; statedelay = 30; //music.play(5); //music.play(10); map.finalmode = false; map.final_colormode = false; map.final_mapcol = 0; map.final_colorframe = 0; map.finalstretch = false; map.finalx = 100; map.finaly = 100; dwgfx.cutscenebarspos = 320; teleport_to_new_area = true; teleportscript = "gamecomplete"; break; case 3520: //NO DEATH MODE COMPLETE JESUS hascontrol = false; crewstats[0] = true; dwgfx.fademode = 2; state++; break; case 3521: if(dwgfx.fademode == 1) state++; break; case 3522: dwgfx.flipmode = false; gamestate = 1; dwgfx.fademode = 4; dwgfx.backgrounddrawn = true; map.tdrawback = true; createmenu("nodeathmodecomplete"); state = 0; break; case 4000: //Activating a teleporter (short version) state++; statedelay = 10; flashlight = 5; screenshake = 10; music.playef(9, 10); break; case 4001: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; //we're done here! music.playef(10, 10); break; case 4002: //Activating a teleporter 2 state++; statedelay = 10; //testing! //state = 3006; //Warp Zone //state = 3020; //Space Station //state = 3040; //Lab i = obj.getplayer(); obj.entities[i].colour = 0; obj.entities[i].invis = true; i = obj.getteleporter(); if(i>-1){ obj.entities[i].tile = 1; obj.entities[i].colour = 100; } break; case 4003: state = 0; statedelay = 0; teleport_to_new_area = true; break; case 4010: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4011: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4012: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4013: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4014: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4015: state++; i = obj.getplayer(); obj.entities[i].xp += 8; break; case 4016: state++; i = obj.getplayer(); obj.entities[i].xp += 6; break; case 4017: state++; i = obj.getplayer(); obj.entities[i].xp += 3; break; case 4018: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 1; break; case 4019: if (intimetrial || nodeathmode || inintermission) { }else{ savetele(map, obj, music, help); } i = obj.getteleporter(); activetele = true; teleblock.x = obj.entities[i].xp - 32; teleblock.y = obj.entities[i].yp - 32; teleblock.width = 160; teleblock.height = 160; hascontrol = true; advancetext = false; state = 0; break; case 4020: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4021: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4022: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4023: state++; i = obj.getplayer(); obj.entities[i].xp += 12; break; case 4024: state++; i = obj.getplayer(); obj.entities[i].xp += 12; break; case 4025: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4026: state++; i = obj.getplayer(); obj.entities[i].xp += 8; break; case 4027: state++; i = obj.getplayer(); obj.entities[i].xp += 5; break; case 4028: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 2; break; case 4029: hascontrol = true; advancetext = false; state = 0; break; case 4030: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4031: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4032: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 0; obj.entities[i].ay = -6; obj.entities[i].ax = -6; obj.entities[i].vy = -6; obj.entities[i].vx = -6; break; case 4033: state++; i = obj.getplayer(); obj.entities[i].xp -= 12; break; case 4034: state++; i = obj.getplayer(); obj.entities[i].xp -= 12; break; case 4035: state++; i = obj.getplayer(); obj.entities[i].xp -= 10; break; case 4036: state++; i = obj.getplayer(); obj.entities[i].xp -= 8; break; case 4037: state++; i = obj.getplayer(); obj.entities[i].xp -= 5; break; case 4038: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp -= 2; break; case 4039: hascontrol = true; advancetext = false; state = 0; break; case 4040: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4041: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4042: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4043: state++; i = obj.getplayer(); obj.entities[i].xp += 12; obj.entities[i].yp -= 15; break; case 4044: state++; i = obj.getplayer(); obj.entities[i].xp += 12; obj.entities[i].yp -= 10; break; case 4045: state++; i = obj.getplayer(); obj.entities[i].xp += 12; obj.entities[i].yp -= 10; break; case 4046: state++; i = obj.getplayer(); obj.entities[i].xp += 8; obj.entities[i].yp -= 8; break; case 4047: state++; i = obj.getplayer(); obj.entities[i].xp += 6; obj.entities[i].yp -= 8; break; case 4048: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 3; break; case 4049: hascontrol = true; advancetext = false; state = 0; break; case 4050: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4051: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4052: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4053: state++; i = obj.getplayer(); obj.entities[i].xp += 4; obj.entities[i].yp -= 15; break; case 4054: state++; i = obj.getplayer(); obj.entities[i].xp += 4; obj.entities[i].yp -= 10; break; case 4055: state++; i = obj.getplayer(); obj.entities[i].xp += 4; obj.entities[i].yp -= 10; break; case 4056: state++; i = obj.getplayer(); obj.entities[i].xp += 4; obj.entities[i].yp -= 8; break; case 4057: state++; i = obj.getplayer(); obj.entities[i].xp += 2; obj.entities[i].yp -= 8; break; case 4058: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 1; break; case 4059: hascontrol = true; advancetext = false; state = 0; break; case 4060: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4061: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4062: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 0; obj.entities[i].ay = -6; obj.entities[i].ax = -6; obj.entities[i].vy = -6; obj.entities[i].vx = -6; break; case 4063: state++; i = obj.getplayer(); obj.entities[i].xp -= 28; obj.entities[i].yp -= 8; break; case 4064: state++; i = obj.getplayer(); obj.entities[i].xp -= 28; obj.entities[i].yp -= 8; break; case 4065: state++; i = obj.getplayer(); obj.entities[i].xp -= 25; break; case 4066: state++; i = obj.getplayer(); obj.entities[i].xp -= 25; break; case 4067: state++; i = obj.getplayer(); obj.entities[i].xp -= 20; break; case 4068: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp -= 16; break; case 4069: hascontrol = true; advancetext = false; state = 0; break; case 4070: //Activating a teleporter (special for final script, player has colour changed to match rescued crewmate) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4071: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4072: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].colour = obj.crewcolour(lastsaved); obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4073: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4074: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4075: state++; i = obj.getplayer(); obj.entities[i].xp += 8; break; case 4076: state++; i = obj.getplayer(); obj.entities[i].xp += 6; break; case 4077: state++; i = obj.getplayer(); obj.entities[i].xp += 3; break; case 4078: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 1; break; case 4079: state = 0; startscript = true; newscript = "finallevel_teleporter"; break; case 4080: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4081: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4082: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4083: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4084: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4085: state++; i = obj.getplayer(); obj.entities[i].xp += 8; break; case 4086: state++; i = obj.getplayer(); obj.entities[i].xp += 6; break; case 4087: state++; i = obj.getplayer(); obj.entities[i].xp += 3; break; case 4088: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 1; break; case 4089: startscript = true; newscript = "gamecomplete_ending"; state = 0; break; case 4090: //Activating a teleporter (default appear) state++; statedelay = 15; flashlight = 5; screenshake = 90; music.playef(9, 10); break; case 4091: //Activating a teleporter 2 state++; statedelay = 0; flashlight = 5; screenshake = 0; music.playef(10, 10); break; case 4092: //Activating a teleporter 2 state++; statedelay = 5; i = obj.getplayer(); j = obj.getteleporter(); if (j != -1) { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } obj.entities[i].colour = 0; obj.entities[i].invis = false; obj.entities[i].dir = 1; obj.entities[i].ay = -6; obj.entities[i].ax = 6; obj.entities[i].vy = -6; obj.entities[i].vx = 6; break; case 4093: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4094: state++; i = obj.getplayer(); obj.entities[i].xp += 10; break; case 4095: state++; i = obj.getplayer(); obj.entities[i].xp += 8; break; case 4096: state++; i = obj.getplayer(); obj.entities[i].xp += 6; break; case 4097: state++; i = obj.getplayer(); obj.entities[i].xp += 3; break; case 4098: state++; statedelay = 15; i = obj.getplayer(); obj.entities[i].xp += 1; break; case 4099: if (nocutscenes) { startscript = true; newscript = "levelonecompleteskip"; }else{ startscript = true; newscript = "levelonecomplete_ending"; } state = 0; break; } } } public function lifesequence(obj:entityclass):void{ if (lifeseq > 0) { i = obj.getplayer(); obj.entities[i].invis = false; if (lifeseq == 2) obj.entities[i].invis = true; if (lifeseq == 6) obj.entities[i].invis = true; if (lifeseq >= 8) obj.entities[i].invis = true; if (lifeseq > 5) gravitycontrol = savegc; lifeseq--; if (lifeseq <= 0) { obj.entities[i].invis = false; } } } public function resetgameclock():void { frames = 0; seconds = 0; minutes = 0; hours = 0; } public function gameclock():void { frames++; if (frames >= 30) { frames -= 30; seconds++; if (seconds >= 60) { seconds -= 60; minutes++; if (minutes >= 60) { minutes -= 60; hours++; } } } } public function giventimestring(hrs:int, min:int, sec:int, help:helpclass):String { tempstring = ""; if (hrs > 0) { tempstring += String(hrs) + ":"; } tempstring += help.twodigits(min) + ":" + help.twodigits(sec); return tempstring; } public function timestring(help:helpclass):String { tempstring = ""; if (hours > 0) { tempstring += String(hours) + ":"; } tempstring += help.twodigits(minutes) + ":" + help.twodigits(seconds); return tempstring; } public function partimestring(help:helpclass):String { //given par time in seconds: tempstring = ""; if (timetrialpar >= 60) { tempstring = help.twodigits(int((timetrialpar - (timetrialpar % 60)) / 60)) + ":" + help.twodigits(timetrialpar % 60); }else { tempstring = "00:" + help.twodigits(timetrialpar); } return tempstring; } public function resulttimestring(help:helpclass):String { //given result time in seconds: tempstring = ""; if (timetrialresulttime > 60) { tempstring = help.twodigits(int((timetrialresulttime - (timetrialresulttime % 60)) / 60)) + ":" + help.twodigits(timetrialresulttime % 60); }else { tempstring = "00:" + help.twodigits(timetrialresulttime); } return tempstring; } public function timetstring(t:int, help:helpclass):String { //given par time in seconds: tempstring = ""; if (t >= 60) { tempstring = help.twodigits(int((t - (t % 60)) / 60)) + ":" + help.twodigits(t % 60); }else { tempstring = "00:" + help.twodigits(t); } return tempstring; } public function deathsequence(map:mapclass, obj:entityclass, music:musicclass):void { if (supercrewmate && scmhurt) { i = obj.getscm(); }else{ i = obj.getplayer(); } obj.entities[i].colour = 1; obj.entities[i].invis = false; if (deathseq == 30) { if (nodeathmode) { music.fadeout(); gameoverdelay = 60; } deathcounts++; music.playef(2,10); obj.entities[i].invis = true; if (map.finalmode) { map.roomdeathsfinal[roomx - 41 + (20 * (roomy - 48))]++; currentroomdeaths = map.roomdeathsfinal[roomx - 41 + (20 * (roomy - 48))]; }else{ map.roomdeaths[roomx - 100 + (20*(roomy - 100))]++; currentroomdeaths = map.roomdeaths[roomx - 100 + (20 * (roomy - 100))]; } } if (deathseq == 25) obj.entities[i].invis = true; if (deathseq == 20) obj.entities[i].invis = true; if (deathseq == 16) obj.entities[i].invis = true; if (deathseq == 14) obj.entities[i].invis = true; if (deathseq == 12) obj.entities[i].invis = true; if (deathseq < 10) obj.entities[i].invis = true; if (!nodeathmode) { if (deathseq <= 1) obj.entities[i].invis = false; }else { gameoverdelay--; } } public function initteleportermode(map:mapclass):void { //Set the teleporter variable to the right position! teleport_to_teleporter = 0; for (i = 0; i < map.numteleporters; i++) { if (roomx == map.teleporters[i].x + 100 && roomy == map.teleporters[i].y + 100) { teleport_to_teleporter = i; } } } public function swnpenalty():void { //set the SWN clock back to the closest 5 second interval if (swntimer <= 150) { swntimer += 8; if (swntimer > 150) swntimer = 150; }else if (swntimer <= 300) { swntimer += 8; if (swntimer > 300) swntimer = 300; }else if (swntimer <= 450) { swntimer += 8; if (swntimer > 450) swntimer = 450; }else if (swntimer <= 600) { swntimer += 8; if (swntimer > 600) swntimer = 600; }else if (swntimer <= 750) { swntimer += 8; if (swntimer > 750) swntimer = 750; }else if (swntimer <= 900) { swntimer += 8; if (swntimer > 900) swntimer = 900; }else if (swntimer <= 1050) { swntimer += 8; if (swntimer > 1050) swntimer = 1050; }else if (swntimer <= 1200) { swntimer += 8; if (swntimer > 1200) swntimer = 1200; }else if (swntimer <= 1350) { swntimer += 8; if (swntimer > 1350) swntimer = 1350; }else if (swntimer <= 1500) { swntimer += 8; if (swntimer > 1500) swntimer = 1500; }else if (swntimer <= 1650) { swntimer += 8; if (swntimer > 1650) swntimer = 1650; }else if (swntimer <= 1800) { swntimer += 8; if (swntimer > 1800) swntimer = 1800; }else if (swntimer <= 2100) { swntimer += 8; if (swntimer > 2100) swntimer = 2100; }else if (swntimer <= 2400) { swntimer += 8; if (swntimer > 2400) swntimer = 2400; } } //Game room control public var door_left:int, door_right:int, door_up:int, door_down:int; public var roomx:int, roomy:int, roomchangedir:int; public var temp:int, i:int, j:int, k:int; //Save points public var savex:int, savey:int, saverx:int, savery:int; public var savegc:int, savedir:int; //Game save variables: two cookies, one for quicksaves and one for teleporters public var telecookie:SharedObject, quickcookie:SharedObject, statcookie:SharedObject; public var customcookie:Vector. = new Vector.; public var customcookieexists:Vector. = new Vector.; public var customcookiesummary:Vector. = new Vector.; public var telecookieexists:Boolean, quickcookieexists:Boolean; public var telesummary:String, quicksummary:String; public var tele_crewstats:Array = new Array(); public var tele_gametime:String; public var tele_trinkets:int; public var tele_currentarea:String; public var quick_crewstats:Array = new Array(); public var quick_gametime:String; public var quick_trinkets:int; public var quick_currentarea:String; public var summary_crewstats:Array;// = new Array(); public var savestate:Array = new Array(); //Added for port public var edsavex:int, edsavey:int, edsaverx:int, edsavery:int; public var edsavegc:int, edsavedir:int; //State Logic stuff public var state:int, statedelay:int; public var gamestate:int; public var hascontrol:Boolean, jumpheld:Boolean, jumppressed:int; public var gravitycontrol:int; public var infocus:Boolean, paused:Boolean; public var muted:Boolean; public var mutebutton:int; public var globalsound:int; public var mx:int, my:int; public var screenshake:int, flashlight:int; public var test:Boolean, teststring:String, tempstring:String; public var advancetext:Boolean, pausescript:Boolean; public var deathseq:int, lifeseq:int; public var coins:int, trinkets:int, crewmates:int, trinketcollect:int; public var savepoint:int, teleport:Boolean, teleportxpos:int; public var edteleportent:int; public var completestop:Boolean; public var inertia:Number; public var companion:int, roomchange:Boolean; public var teleblock:Rectangle, activetele:Boolean, readytotele:int; public var activeactivity:int, act_fade:int; public var activity_lastprompt:String, activity_r:int, activity_g:int, activity_b:int; public var backgroundtext:Boolean; public var press_left:Boolean, press_right:Boolean, press_action:Boolean, press_map:Boolean; //Some stats: public var totalflips:int; public var hardestroom:String, hardestroomdeaths:int, currentroomdeaths:int; //Menu interaction stuff public var mapheld:Boolean; //Is the map key being held down? public var menupage:int; public var crewstats:Array = new Array(); public var lastsaved:int; public var deathcounts:int; public var frames:int, seconds:int, minutes:int, hours:int; public var gamesaved:Boolean; public var savetime:String, savearea:String, savetrinkets:int; public var startscript:Boolean, newscript:String; public var mainmenu:int, menustart:Boolean; //teleporting public var teleport_to_new_area:Boolean; public var teleport_to_x:int, teleport_to_y:int; public var teleportscript:String; public var useteleporter:Boolean; public var teleport_to_teleporter:int; //Screenrecording stuff, for beta/trailer public var recording:int; public var recordstring:String; public var combomode:Boolean, combolen:int, comboaction:String; public var currentaction:String, recordinit:Boolean; public var alarmon:Boolean, alarmdelay:int; public var blackout:Boolean; public var playback:Array = new Array(); public var playbackpos:int, playbacksize:int; public var playmove:int, playcombo:int; public var playbackfinished:Boolean; //functions for recording: public function initplayback():void { playback = new Array(); playback = recordstring.split(","); playbacksize = playback.length; playbackpos = 0; } //Main Menu Variables public var menuoptions:Vector. = new Vector.; public var menuoptions_alt:Vector. = new Vector.; public var menuoptionsactive:Vector. = new Vector.; public var menuoptionslayout:Vector. = new Vector.; public var nummenuoptions:int, currentmenuoption:int; public var menuselection:String, currentmenuname:String, previousmenuname:String; public var menuxoff:int, menuyoff:int; public var menucountdown:int, menudest:String; public var creditposx:int, creditposy:int, creditposdelay:int; //60 fps mode! public var sfpsmode:Boolean; //Sine Wave Ninja Minigame public var swnmode:Boolean; public var swngame:int, swnstate:int, swnstate2:int, swnstate3:int, swnstate4:int, swndelay:int, swndeaths:int; public var swntimer:int, swncolstate:int, swncoldelay:int; public var swnrecord:int, swnbestrank:int, swnrank:int, swnmessage:int; //SuperCrewMate Stuff public var supercrewmate:Boolean, scmhurt:Boolean, scmprogress:int, scmmoveme:Boolean; //Accessibility Options public var colourblindmode:Boolean; public var noflashingmode:Boolean; public var slowdown:int; public var nodeathmode:Boolean; public var gameoverdelay:int; public var nocutscenes:Boolean; //Time Trials public var intimetrial:Boolean, timetrialparlost:Boolean; public var timetrialcountdown:int, timetrialshinytarget:int, timetriallevel:int; public var timetrialpar:int, timetrialresulttime:int, timetrialrank:int; public var creditposition:int; public var insecretlab:Boolean; public var inintermission:Boolean; //Tap sensors public var tapleft:int, tapright:int; //Stats public var unlock:Array = new Array(); public var unlocknotify:Array = new Array(); public var temp_unlock:Array; public var temp_unlocknotify:Array; public var stat_trinkets:int; public var fullscreen:Boolean; public var bestgamedeaths:int; public var stat_screenshakes:Boolean; public var stat_backgrounds:Boolean; public var stat_flipmode:Boolean; public var stat_invincibility:Boolean; public var stat_slowdown:int; public var besttimes:Array = new Array(); public var besttrinkets:Array = new Array(); public var bestlives:Array = new Array(); public var bestrank:Array = new Array(); public var temp_besttimes:Array; public var temp_besttrinkets:Array; public var temp_bestlives:Array; public var temp_bestrank:Array; public var savemystats:Boolean; public var menukludge:Boolean; public var quickrestartkludge:Boolean; public var advanced_mode:Boolean; public var advanced_smoothing:Boolean; public var advanced_scaling:int; public var fullscreentoggleheld:Boolean = false; //Custom stuff public var levelstatscookie:SharedObject; public var levelstatscookieloaded:Boolean; public var customscript:Vector. = new Vector.; public var customcol:int, levelpage:int, playcustomlevel:int; public var customleveltitle:String; public var customlevelfilename:String; public var customlevelstats:Vector. = new Vector.; //string array containing level filenames public var customlevelscore:Vector. = new Vector.; public var numcustomlevelstats:int; public var customlevelstatsloaded:Boolean; //Control types! //0 is swipe, 1 is both sides, 2 is d-pad public var controlstyle:int = 0; public var last_left:int = 0, last_right:int = 0; public var last_action:int = 0; public var controlsensitivity:int = 50; //Mobile menu options public var mobilemenu:Boolean = true; public var autoquicksave:Boolean = false; public var mobilequicksave_thisroom:Boolean = false; public var controltutorialstate:int = 0; public var controltutorialstatedelay:int = 0; public var controllerp1:int = 0; public var controllerp2:int = 0; public var controllerp3:int = 0; public var showloadingnotice:Boolean = false; public var disablekludge_1:Boolean = false; public var disablekludge_2:Boolean = false; public var disablekludge_3:Boolean = false; public var disablekludge_4:Boolean = false; public var showcontroltutorial:int = 0; public var platform:platformclass = new platformclass; public var scores:scoreclass = new scoreclass; } }