1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-18 10:38:31 +02:00
VVVVVV/mobile_version/src/gameclass.as
Terry Cavanagh 72d018ea04 Update mobile version to mobile v2.2.1
The android version just got a much needed update to fix some resolution issues on devices with cutouts.

It turns out the mobile source was actually pretty out of date, like 3 versions out of date! This commit brings it up to date.

All the changes have just been about keeping the game running on modern devices, though. The biggest change was adding the Starling library to the project, which made the game GPU powered and sped the whole thing up.
2022-12-02 18:19:58 +01:00

5290 lines
191 KiB
ActionScript

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<editor.ListOfMetaData.length){
menuoptions[tcount] = "next page";
menuoptionsactive[tcount] = true;
menuoptionslayout[tcount] = 10;
tcount++;
}else{
menuoptions[tcount] = "first page";
menuoptionsactive[tcount] = true;
menuoptionslayout[tcount] = 10;
tcount++;
}
menuoptions[tcount] = "< back"; menuoptionsactive[tcount] = true;
menuoptionslayout[tcount] = 3;
tcount++;
nummenuoptions = tcount;
menuxoff = -90;
menuyoff = -120;
}
}else if (t == "graphicoptions") {
if (advanced_mode) {
if(fullscreen){
menuoptions[0] = "change to windowed mode"; menuoptionsactive[0] = true;
}else {
menuoptions[0] = "change to fullscreen"; menuoptionsactive[0] = true;
}
menuoptions[1] = "enable acceleration"; menuoptionsactive[1] = true;
menuoptions[2] = "change scaling mode"; menuoptionsactive[2] = true;
if (advanced_smoothing) {
menuoptions[3] = "disable smoothing"; menuoptionsactive[3] = true;
}else{
menuoptions[3] = "enable smoothing"; menuoptionsactive[3] = true;
}
menuoptions[4] = "< back"; menuoptionsactive[4] = true;
menuoptionslayout[4] = 3;
nummenuoptions = 5;
menuxoff = -50; menuyoff = 16-(12*4);
}else{
if(fullscreen){
menuoptions[0] = "change to windowed mode"; menuoptionsactive[0] = true;
}else {
menuoptions[0] = "change to fullscreen"; menuoptionsactive[0] = true;
}
menuoptions[1] = "disable acceleration"; menuoptionsactive[1] = true;
menuoptions[2] = "< back"; menuoptionsactive[2] = true;
menuoptionslayout[2] = 3;
nummenuoptions = 3;
menuxoff = -50; menuyoff = 16-(12*2);
}
}else if (t == "options") {
menuoptions[0] = "accessibility options"; menuoptionsactive[0] = true;
menuoptionslayout[0] = 4;
menuoptions[1] = "unlock play modes"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 4;
menuoptions[2] = "clear data"; menuoptionsactive[2] = true;
menuoptionslayout[2] = 4;
menuoptions[3] = "< back"; menuoptionsactive[3] = true;
menuoptionslayout[3] = 3;
nummenuoptions = 4;
menuxoff = -40; menuyoff = -30-(12*3);
}else if (t == "accessibility") {
menuoptions[0] = "animated backgrounds"; menuoptionsactive[0] = true;
menuoptionslayout[0] = 4;
menuoptions[1] = "screen effects"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 4;
//menuoptions[2] = "invincibility"; menuoptionsactive[2] = true;
//menuoptions[3] = "slowdown"; menuoptionsactive[3] = true;
menuoptions[2] = "< back"; menuoptionsactive[2] = true;
menuoptionslayout[2] = 3;
nummenuoptions = 3;
menuxoff = -40; menuyoff = 16-(12*2);
}else if (t == "cleardatamenu") {
menuoptions[0] = "no! don't delete"; menuoptionsactive[0] = true;
menuoptionslayout[0] = 4;
menuoptions[1] = "delete everything"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 4;
nummenuoptions = 2;
menuxoff = -30; menuyoff = 32-(12*2)-32;
}else if (t == "setinvincibility") {
menuoptions[0] = "no, return to options"; menuoptionsactive[0] = true;
menuoptions[1] = "yes, delete saves"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = -30; menuyoff = 64-(12*2);
}else if (t == "setslowdown1") {
menuoptions[0] = "no, return to options"; menuoptionsactive[0] = true;
menuoptions[1] = "yes, delete saves"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = -30; menuyoff = 64-(12*2);
}else if (t == "setslowdown2") {
menuoptions[0] = "normal speed"; menuoptionsactive[0] = true;
menuoptions[1] = "80% speed"; menuoptionsactive[1] = true;
menuoptions[2] = "60% speed"; menuoptionsactive[2] = true;
menuoptions[3] = "40% speed"; menuoptionsactive[3] = true;
nummenuoptions = 4;
menuxoff = -40; menuyoff = 16-(12*3);
}else if (t == "unlockmenu") {
menuoptions[0] = "unlock time trials"; menuoptionsactive[0] = true; menuoptionslayout[0] = 9;
menuoptions[1] = "unlock intermissions"; menuoptionsactive[1] = !unlock[16]; menuoptionslayout[1] = 9;
menuoptions[2] = "unlock no death mode"; menuoptionsactive[2] = !unlock[17];menuoptionslayout[2] = 9;
menuoptions[3] = "unlock flip mode"; menuoptionsactive[3] = !unlock[18];menuoptionslayout[3] = 9;
menuoptions[4] = "unlock ship jukebox"; menuoptionsactive[4] = (stat_trinkets<20);menuoptionslayout[4] = 9;
menuoptions[5] = "unlock secret lab"; menuoptionsactive[5] = !unlock[8];menuoptionslayout[5] = 9;
menuoptions_alt[0] = "time trials unlocked";
menuoptions_alt[1] = "intermissions unlocked";
menuoptions_alt[2] = "no death mode unlocked";
menuoptions_alt[3] = "flip mode unlocked";
menuoptions_alt[4] = "ship jukebox unlocked";
menuoptions_alt[5] = "secret lab unlocked";
menuoptions[6] = "< back"; menuoptionsactive[6] = true;
menuoptionslayout[6] = 3;
nummenuoptions = 7;
menuxoff = -70; menuyoff = -55-(12*6);
}else if (t == "credits") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits2") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits3") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits4") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits5") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits6") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits7") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits8") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits9") {
menuoptions[0] = "first page"; menuoptionsactive[0] = true;
menuoptions[1] = "< back"; menuoptionsactive[1] = true;
menuoptionslayout[1] = 3;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "play") {
//Ok, here's where the unlock stuff comes into it:
//First up, time trials:
temp = 0;
if (unlock[0] && stat_trinkets >= 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<editor.ListOfMetaData.length){
menuoptions[tcount] = "next page";
menuoptionsactive[tcount] = true;
tcount++;
}else{
menuoptions[tcount] = "first page";
menuoptionsactive[tcount] = true;
tcount++;
}
menuoptions[tcount] = "return to menu";
menuoptionsactive[tcount] = true;
tcount++;
nummenuoptions = tcount;
menuxoff = -90;
menuyoff = 70-(tcount*10);
}
}else if (t == "graphicoptions") {
if (advanced_mode) {
if(fullscreen){
menuoptions[0] = "change to windowed mode"; menuoptionsactive[0] = true;
}else {
menuoptions[0] = "change to fullscreen"; menuoptionsactive[0] = true;
}
menuoptions[1] = "enable acceleration"; menuoptionsactive[1] = true;
menuoptions[2] = "change scaling mode"; menuoptionsactive[2] = true;
if (advanced_smoothing) {
menuoptions[3] = "disable smoothing"; menuoptionsactive[3] = true;
}else{
menuoptions[3] = "enable smoothing"; menuoptionsactive[3] = true;
}
menuoptions[4] = "return"; menuoptionsactive[4] = true;
nummenuoptions = 5;
menuxoff = -50; menuyoff = 16;
}else{
if(fullscreen){
menuoptions[0] = "change to windowed mode"; menuoptionsactive[0] = true;
}else {
menuoptions[0] = "change to fullscreen"; menuoptionsactive[0] = true;
}
menuoptions[1] = "disable acceleration"; menuoptionsactive[1] = true;
menuoptions[2] = "return"; menuoptionsactive[2] = true;
nummenuoptions = 3;
menuxoff = -50; menuyoff = 16;
}
}else if (t == "options") {
menuoptions[0] = "accessibility options"; menuoptionsactive[0] = true;
menuoptions[1] = "unlock play modes"; menuoptionsactive[1] = true;
menuoptions[2] = "clear data"; menuoptionsactive[2] = true;
menuoptions[3] = "return"; menuoptionsactive[3] = true;
nummenuoptions = 4;
menuxoff = -40; menuyoff = 0;
}else if (t == "accessibility") {
menuoptions[0] = "animated backgrounds"; menuoptionsactive[0] = true;
menuoptions[1] = "screen effects"; menuoptionsactive[1] = true;
//menuoptions[2] = "invincibility"; menuoptionsactive[2] = true;
//menuoptions[3] = "slowdown"; menuoptionsactive[3] = true;
menuoptions[2] = "return"; menuoptionsactive[2] = true;
nummenuoptions = 3;
menuxoff = -40; menuyoff = 16;
}else if (t == "cleardatamenu") {
menuoptions[0] = "no! don't delete"; menuoptionsactive[0] = true;
menuoptions[1] = "yes, delete everything"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = -30; menuyoff = 64;
}else if (t == "setinvincibility") {
menuoptions[0] = "no, return to options"; menuoptionsactive[0] = true;
menuoptions[1] = "yes, delete saves"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = -30; menuyoff = 64;
}else if (t == "setslowdown1") {
menuoptions[0] = "no, return to options"; menuoptionsactive[0] = true;
menuoptions[1] = "yes, delete saves"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = -30; menuyoff = 64;
}else if (t == "setslowdown2") {
menuoptions[0] = "normal speed"; menuoptionsactive[0] = true;
menuoptions[1] = "80% speed"; menuoptionsactive[1] = true;
menuoptions[2] = "60% speed"; menuoptionsactive[2] = true;
menuoptions[3] = "40% speed"; menuoptionsactive[3] = true;
nummenuoptions = 4;
menuxoff = -40; menuyoff = 16;
}else if (t == "unlockmenu") {
menuoptions[0] = "unlock time trials"; menuoptionsactive[0] = true;
menuoptions[1] = "unlock intermissions"; menuoptionsactive[1] = !unlock[16];
menuoptions[2] = "unlock no death mode"; menuoptionsactive[2] = !unlock[17];
menuoptions[3] = "unlock flip mode"; menuoptionsactive[3] = !unlock[18];
menuoptions[4] = "unlock ship jukebox"; menuoptionsactive[4] = (stat_trinkets<20);
menuoptions[5] = "unlock secret lab"; menuoptionsactive[5] = !unlock[8];
menuoptions[6] = "return"; menuoptionsactive[6] = true;
nummenuoptions = 7;
menuxoff = -70; menuyoff = -20;
}else if (t == "credits") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits2") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits3") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits4") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits5") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits6") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits7") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits8") {
menuoptions[0] = "next page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "credits9") {
menuoptions[0] = "first page"; menuoptionsactive[0] = true;
menuoptions[1] = "return"; menuoptionsactive[1] = true;
nummenuoptions = 2;
menuxoff = 20; menuyoff = 64;
}else if (t == "play") {
//Ok, here's where the unlock stuff comes into it:
//First up, time trials:
temp = 0;
if (unlock[0] && stat_trinkets >= 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.<SharedObject> = new Vector.<SharedObject>;
public var customcookieexists:Vector.<Boolean> = new Vector.<Boolean>;
public var customcookiesummary:Vector.<String> = new Vector.<String>;
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.<String> = new Vector.<String>;
public var menuoptions_alt:Vector.<String> = new Vector.<String>;
public var menuoptionsactive:Vector.<Boolean> = new Vector.<Boolean>;
public var menuoptionslayout:Vector.<int> = new Vector.<int>;
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.<String> = new Vector.<String>;
public var customcol:int, levelpage:int, playcustomlevel:int;
public var customleveltitle:String;
public var customlevelfilename:String;
public var customlevelstats:Vector.<String> = new Vector.<String>; //string array containing level filenames
public var customlevelscore:Vector.<int> = new Vector.<int>;
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;
}
}