1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-03 03:23:33 +02:00
VVVVVV/mobile_version/src/editor.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

1506 lines
48 KiB
ActionScript

package {
import flash.geom.*;
import flash.events.*;
import flash.net.*;
import starling.display.Image;
import starling.textures.RenderTexture;
public class editor {
public static function init():void {
for (var i:int = 0 ; i < 3000; i++) {
edentity.push(new edentitiesclass);
}
for (i = 0; i < 500; i++) {
hooklist.push("");
sb.push("");
}
for (i = 0; i < 400; i++) {
level.push(new edlevelclass);
}
//m_editorSavePath = FileSystemUtils::GetInstance().GetUserDocuments();
m_editorSavePath = "";
maxwidth=20;
maxheight = 20;
//We create a blank map
for (var j:int = 0; j < 30 * maxwidth; j++){
for (i = 0; i < 40 * maxheight; i++){
contents.push(int(0));
}
}
for (j = 0; j < 30; j++){
for (i = 0; i < 40; i++){
swapmap.push(int(0));
}
}
for (i = 0; i < 30 * maxheight; i++){
vmult.push(int(i * 40 * maxwidth));
}
reset();
playerlevel.push(new XML( new lvl_pyramid )); playerlevel_spikyness.push(int(1));
playerlevel.push(new XML( new lvl_seasons )); playerlevel_spikyness.push(int(1));
playerlevel.push(new XML( new lvl_victuals )); playerlevel_spikyness.push(int(1));
playerlevel.push(new XML( new lvl_4kvvvv )); playerlevel_spikyness.push(int(2));
playerlevel.push(new XML( new lvl_quantumtunnel12 )); playerlevel_spikyness.push(int(2));
playerlevel.push(new XML( new lvl_variationventure )); playerlevel_spikyness.push(int(2));
playerlevel.push(new XML( new lvl_vertexvortex )); playerlevel_spikyness.push(int(2));
playerlevel.push(new XML( new lvl_333333_easy )); playerlevel_spikyness.push(int(3));
playerlevel.push(new XML( new lvl_linewrap )); playerlevel_spikyness.push(int(3));
playerlevel.push(new XML( new lvl_soulsearching )); playerlevel_spikyness.push(int(3));
playerlevel.push(new XML( new lvl_towerofpower )); playerlevel_spikyness.push(int(3));
playerlevel.push(new XML( new lvl_varietyshow )); playerlevel_spikyness.push(int(3));
playerlevel.push(new XML( new lvl_a_new_dimension )); playerlevel_spikyness.push(int(4));
playerlevel.push(new XML( new lvl_roadtrip )); playerlevel_spikyness.push(int(4));
playerlevel.push(new XML( new lvl_the_dual_challenge )); playerlevel_spikyness.push(int(4));
playerlevel.push(new XML( new lvl_vertiginousviridian )); playerlevel_spikyness.push(int(4));
playerlevel.push(new XML( new lvl_vvvvvvgoldenspiral )); playerlevel_spikyness.push(int(5));
getDirectoryData();
/*
trace("loading level data:");
getDirectoryData();
for (i = 0; i < ListOfMetaData.length; i++) {
trace(ListOfMetaData[i].title, ListOfMetaData[i].creator);
}
trace("done!");
*/
}
// comparison, not case sensitive.
public static function compare_nocase(first:String, second:String):Boolean {
//Not used
//For alphabetical sorting of two strings
return true;
}
public static function getDirectoryData():void {
ListOfMetaData.length = 0;
for (var i:int = 0; i < playerlevel.length; i++) {
ListOfMetaData.push(getLevelMetaData(i));
}
/*
var ts:String = "";
for(i = 0; i < ListOfMetaData.length; i++){
for(var k:int = 0; k < ListOfMetaData.length; k++){
if (compare_nocase(ListOfMetaData[i].title, ListOfMetaData[k].title)) {
ts = ListOfMetaData[i];
ListOfMetaData[i] = ListOfMetaData[k];
ListOfMetaData[k] = ts;
}
}
}
*/
}
public static function getLevelMetaData(t:int):LevelMetaData {
var temp:LevelMetaData = new LevelMetaData;
temp.timeCreated = playerlevel[t].Data.MetaData.Created.text();
temp.creator = playerlevel[t].Data.MetaData.Creator.text();
temp.title = playerlevel[t].Data.MetaData.Title.text();
temp.timeModified = playerlevel[t].Data.MetaData.Modified.text();
temp.modifier = playerlevel[t].Data.MetaData.Modifiers.text();
temp.Desc1 = playerlevel[t].Data.MetaData.Desc1.text();
temp.Desc2 = playerlevel[t].Data.MetaData.Desc2.text();
temp.Desc3 = playerlevel[t].Data.MetaData.Desc3.text();
temp.website = playerlevel[t].Data.MetaData.website.text();
temp.filename = String(t);
temp.file_num = t;
temp.version = 2; //All these files are version 2
return temp;
}
public static function reset():void {
version = 2; //New smaller format change is 2
mapwidth=5;
mapheight = 5;
editordata.title = "Untitled Level";
editordata.creator = "Unknown";
Desc1="";
Desc2="";
Desc3="";
website = "";
roomnamehide=0;
zmod=false;
xmod=false;
spacemod=false;
spacemenu=0;
shiftmenu=false;
shiftkey=false;
saveandquit=false;
note="";
notedelay=0;
roomnamemod=false;
textentry=false;
savemod=false;
loadmod=false;
//deletekeyheld = false;
titlemod=false;
creatormod=false;
desc1mod=false;
desc2mod=false;
desc3mod=false;
websitemod=false;
settingsmod=false;
warpmod=false; //Two step process
warpent = -1;
boundarymod=0;
boundarytype=0;
boundx1=0;
boundx2=0;
boundy1=0;
boundy2 = 0;
scripttextmod=false;
scripttextent=0;
scripttexttype = 0;
drawmode=0;
dmtile=0;
dmtileeditor=0;
entcol = 0;
tilex=0;
tiley=0;
levx=0;
levy=0;
keydelay=0;
lclickdelay=0;
savekey=false;
loadkey=false;
updatetiles=true;
changeroom=true;
levmusic = 0;
entframe=0;
entframedelay = 0;
numtrinkets=0;
numcrewmates = 0;
editordata.numedentities=0;
levmusic = 0;
roomtextmod=false;
roomtextent = 0;
for (var j:int = 0; j < maxheight; j++){
for (var i:int = 0; i < maxwidth; i++){
level[i + (j * maxwidth)].tileset = 0;
level[i + (j * maxwidth)].tilecol = (i + j) % 32;
level[i + (j * maxwidth)].roomname = ""
level[i + (j * maxwidth)].warpdir = 0;
level[i + (j * maxwidth)].platx1 = 0;
level[i + (j * maxwidth)].platy1 = 0;
level[i + (j * maxwidth)].platx2 = 320;
level[i + (j * maxwidth)].platy2 = 240;
level[i + (j * maxwidth)].platv = 4;
level[i + (j * maxwidth)].enemyx1 = 0;
level[i + (j * maxwidth)].enemyy1 = 0
level[i + (j * maxwidth)].enemyx2 = 320;
level[i + (j * maxwidth)].enemyy2 = 240;
}
}
for (j = 0; j < 30 * maxwidth; j++){
for (i = 0; i < 40 * maxheight; i++) {
contents[i + (j * 30 * maxwidth)] = 0;
}
}
if(numhooks>0){
for (i = 0; i < numhooks; i++) {
removehook(hooklist[i]);
}
}
for (i = 0; i < 500; i++){
sb[i]="";
}
for (i = 0; i < 500; i++){
hooklist[i] = "";
}
clearscriptbuffer();
sblength=1;
sbx=0;
sby=0;
pagey=0;
scripteditmod=false;
sbscript="null";
scripthelppage=0;
scripthelppagedelay = 0;
hookmenupage=0;
hookmenu=0;
numhooks=0;
customscript.length = 0;
}
public static function gethooks():void {
//Scan through the script and create a hooks list based on it
numhooks=0;
var tstring:String;
var tstring2:String;
for (var i:int = 0; i < customscript.length; i++){
tstring = customscript[i];
if(tstring.length-1>=0){
tstring = tstring.substr(tstring.length - 1, 1);
}else{
tstring="";
}
if(tstring==":"){
tstring2="";
tstring=customscript[i];
tstring2 = tstring.substr(0, tstring.length - 1);
hooklist[numhooks] = tstring2;
numhooks++;
}
}
}
public static function loadhookineditor(t:String):void{
//Find hook t in the scriptclass, then load it into the editor
clearscriptbuffer();
var tstring:String;
var removemode:Boolean = false;
for (var i:int = 0; i < customscript.length; i++){
if (customscript[i] == t + ":") {
removemode=true;
}else if (removemode) {
tstring = customscript[i];
if (tstring != "") {
tstring = tstring[tstring.length() - 1];
}
if (tstring == ":"){
//this is a hook
removemode=false;
}else{
//load in this line
sb[sblength - 1] = customscript[i];
sblength++;
}
}
}
if(sblength>1) sblength--;
}
public static function addhooktoscript(t:String):void{
//Adds hook+the scriptbuffer to the end of the scriptclass
removehookfromscript(t);
customscript.push(t + ":");
if (sblength >= 1) {
for (var i:int = 0; i < sblength; i++){
customscript.push(sb[i]);
}
}
}
public static function removehookfromscript(t:String):void {
//Find hook t in the scriptclass, then removes it (and any other code with it)
var tstring:String;
var removemode:Boolean = false;
for (var i:int = 0; i < customscript.length; i++) {
if (customscript[i] == t + ":") {
removemode=true;
//Remove this line
for (var j:int = i; j < customscript.length - 1; j++){
customscript[j] = customscript[j + 1];
}
customscript.pop();
i--;
}else if(removemode){
//If this line is not the start of a new hook, remove it!
tstring = customscript[i];
tstring = tstring.substr(tstring.length - 1, 1);
if(tstring==":"){
//this is a hook
removemode=false;
}else{
//Remove this line
for (j = i; j < customscript.length - 1; j++) {
customscript[j] = customscript[j + 1];
}
customscript.pop();
i--;
}
}
}
}
public static function removehook(t:String):void {
//Check the hooklist for the hook t. If it's there, remove it from here and the script
for (var i:int = 0; i < numhooks; i++) {
if (hooklist[i] == t) {
removehookfromscript(t);
for (var j:int = i; j < numhooks; j++) {
hooklist[j]=hooklist[j+1];
}
hooklist[numhooks] = "";
numhooks--;
i--;
}
}
}
public static function addhook(t:String):void{
//Add an empty function to the list in both editor and script
removehook(t);
hooklist[numhooks] = t;
numhooks++;
addhooktoscript(t);
}
public static function checkhook(t:String):Boolean {
//returns true if hook t already is in the list
for (var i:int = 0; i < numhooks; i++) {
if(hooklist[i]==t) return true;
}
return false;
}
public static function clearscriptbuffer():void{
for (var i:int = 0; i < sblength + 1; i++) {
sb[i] = "";
}
sblength=1;
}
public static function removeline(t:int):void{
//Remove line t from the script
if (sblength > 0) {
if (sblength == t) {
sblength--;
}else{
for (var i:int = t; i < sblength; i++){
sb[i] = sb[i + 1];
}
sb[sblength] = "";
sblength--;
}
}
}
public static function insertline(t:int):void{
//insert a blank line into script at line t
for (var i:int = sblength; i >= t; i--) {
sb[i + 1] = sb[i];
}
sb[t] = "";
sblength++;
}
public static function loadlevel(rxi:int, ryi:int):void {
//Set up our buffer array to be picked up by mapclass
rxi -= 100;
ryi -= 100;
if (rxi < 0) rxi += mapwidth;
if (ryi < 0) ryi += mapheight;
if (rxi >= mapwidth) rxi -= mapwidth;
if (ryi >= mapheight) ryi -= mapheight;
for (var j:int = 0; j < 30; j++){
for (var i:int = 0; i < 40; i++) {
swapmap[i + (j * 40)] = contents[i + (rxi * 40) + vmult[j + (ryi * 30)]];
}
}
}
public static function getlevelcol(t:int):int{
if (level[t].tileset == 0) { //Space Station
return level[t].tilecol;
}else if (level[t].tileset == 1) { //Outside
return 32 + level[t].tilecol;
}else if (level[t].tileset == 2) { //Lab
return 40 + level[t].tilecol;
}else if (level[t].tileset == 3) { //Warp Zone
return 46 + level[t].tilecol;
}else if (level[t].tileset == 4) { //Ship
return 52 + level[t].tilecol;
}
return 0;
}
public static function getenemycol(t:int):int{
switch(t){
//RED
case 3: case 7: case 12: case 23: case 28: case 34: case 42: case 48: case 58:
return 6;
break;
//GREEN
case 5: case 9: case 22: case 25: case 29: case 31: case 38: case 46: case 52: case 53:
return 7;
break;
//BLUE
case 1: case 6: case 14: case 27: case 33: case 44: case 50: case 57:
return 12;
break;
//YELLOW
case 4: case 17: case 24: case 30: case 37: case 45: case 51: case 55:
return 9;
break;
//PURPLE
case 2: case 11: case 15: case 19: case 32: case 36: case 49:
return 20;
break;
//CYAN
case 8: case 10: case 13: case 18: case 26: case 35: case 41: case 47: case 54:
return 11;
break;
//PINK
case 16: case 20: case 39: case 43: case 56:
return 8;
break;
//ORANGE
case 21: case 40:
return 17;
break;
default:
return 6;
break;
}
return 0;
}
public static function getwarpbackground(rx:int, ry:int):int {
var tmp:int = rx + (maxwidth * ry);
switch(level[tmp].tileset){
case 0: //Space Station
switch(level[tmp].tilecol) {
case 0: return 3; break;
case 1: return 2; break;
case 2: return 1; break;
case 3: return 4; break;
case 4: return 5; break;
case 5: return 3; break;
case 6: return 1; break;
case 7: return 0; break;
case 8: return 5; break;
case 9: return 0; break;
case 10: return 2; break;
case 11: return 1; break;
case 12: return 5; break;
case 13: return 0; break;
case 14: return 3; break;
case 15: return 2; break;
case 16: return 4; break;
case 17: return 0; break;
case 18: return 3; break;
case 19: return 1; break;
case 20: return 4; break;
case 21: return 5; break;
case 22: return 1; break;
case 23: return 4; break;
case 24: return 5; break;
case 25: return 0; break;
case 26: return 3; break;
case 27: return 1; break;
case 28: return 5; break;
case 29: return 4; break;
case 30: return 5; break;
case 31: return 2; break;
default: return 6; break;
}
break;
case 1: //Outside
switch(level[tmp].tilecol) {
case 0: return 3; break;
case 1: return 1; break;
case 2: return 0; break;
case 3: return 2; break;
case 4: return 4; break;
case 5: return 5; break;
case 6: return 2; break;
case 7: return 4; break;
default: return 6; break;
}
break;
case 2: //Lab
switch(level[tmp].tilecol) {
case 0: return 0; break;
case 1: return 1; break;
case 2: return 2; break;
case 3: return 3; break;
case 4: return 4; break;
case 5: return 5; break;
case 6: return 6; break;
default: return 6; break;
}
break;
case 3: //Warp Zone
switch(level[tmp].tilecol) {
case 0: return 0; break;
case 1: return 1; break;
case 2: return 2; break;
case 3: return 3; break;
case 4: return 4; break;
case 5: return 5; break;
case 6: return 6; break;
default: return 6; break;
}
break;
case 4: //Ship
switch(level[tmp].tilecol) {
case 0: return 5; break;
case 1: return 0; break;
case 2: return 4; break;
case 3: return 2; break;
case 4: return 3; break;
case 5: return 1; break;
case 6: return 6; break;
default: return 6; break;
}
break;
case 5: //Tower
return 6;
break;
default:
return 6;
break;
}
}
public static function getenemyframe(t:int):int {
switch(t){
case 0: return 78; break;
case 1: return 88; break;
case 2: return 36; break;
case 3: return 164; break;
case 4: return 68; break;
case 5: return 48; break;
case 6: return 176; break;
case 7: return 168; break;
case 8: return 112; break;
case 9: return 114; break;
default: return 78; break;
}
return 78;
}
public static function placetile(x:int, y:int, t:int):void {
if (x >= 0 && y >= 0 && x < mapwidth * 40 && y < mapheight * 30) {
contents[x + (levx * 40) + vmult[y + (levy * 30)]] = t;
}
}
public static function placetilelocal(x:int, y:int, t:int):void {
if (x >= 0 && y >= 0 && x < 40 && y < 30) {
contents[x + (levx * 40) + vmult[y + (levy * 30)]] = t;
}
updatetiles=true;
}
public static function base(x:int, y:int):int {
//Return the base tile for the given tileset and colour
temp = x + (y * maxwidth);
if(level[temp].tileset==0){ //Space Station
if (level[temp].tilecol >= 22) {
return 483 + ((level[temp].tilecol - 22) * 3);
}else if (level[temp].tilecol >= 11) {
return 283 + ((level[temp].tilecol-11)*3);
}else{
return 83 + (level[temp].tilecol * 3);
}
}else if (level[temp].tileset == 1) { //Outside
return 480 + (level[temp].tilecol*3);
}else if (level[temp].tileset == 2) { //Lab
return 280 + (level[temp].tilecol*3);
}else if (level[temp].tileset == 3) { //Warp Zone/Intermission
return 80 + (level[temp].tilecol * 3);
}else if (level[temp].tileset == 4) { //SHIP
return 101 + (level[temp].tilecol * 3);
}
return 0;
}
public static function backbase(x:int, y:int):int {
//Return the base tile for the background of the given tileset and colour
temp = x + (y * maxwidth);
if (level[temp].tileset == 0) { //Space Station
//Pick depending on tilecol
switch(level[temp].tilecol) {
case 0: case 5: case 26:
return 680; //Blue
break;
case 3: case 16: case 23:
return 683; //Yellow
break;
case 9: case 12: case 21:
return 686; //Greeny Cyan
break;
case 4: case 8: case 24: case 28: case 30:
return 689; //Green
break;
case 20: case 29:
return 692; //Orange
break;
case 2: case 6: case 11: case 22: case 27:
return 695; //Red
break;
case 1: case 10: case 15: case 19: case 31:
return 698; //Pink
break;
case 14: case 18:
return 701; //Dark Blue
break;
case 7: case 13: case 17: case 25:
return 704; //Cyan
break;
default:
return 680;
break;
}
}else if (level[temp].tileset == 1) { //outside
return 680 + (level[temp].tilecol * 3);
}else if (level[temp].tileset == 2) { //Lab
return 0;
}else if (level[temp].tileset == 3) { //Warp Zone/Intermission
return 120 + (level[temp].tilecol * 3)
} else if(level[temp].tileset==4) { //SHIP
return 741 + (level[temp].tilecol * 3);
}
return 0;
}
public static function at(x:int, y:int):int {
if (x < 0) return at(0, y);
if (y < 0) return at(x, 0);
if (x >= 40) return at(39, y);
if (y >= 30) return at(x, 29);
if (x >= 0 && y >= 0 && x < 40 && y < 30) {
return contents[x + (levx * 40) + vmult[y + (levy * 30)]];
}
return 0;
}
public static function freewrap(x:int, y:int):int {
if (x < 0) return freewrap(x + (mapwidth * 40), y);
if (y < 0) return freewrap(x, y + (mapheight * 30));
if (x >= (mapwidth * 40)) return freewrap(x - (mapwidth * 40), y);
if (y >= (mapheight * 30)) return freewrap(x, y - (mapheight * 30));
if (x >= 0 && y >= 0 && x < (mapwidth * 40) && y < (mapheight * 30)) {
if (contents[x + vmult[y]] == 0) {
return 0;
}else{
if (contents[x + vmult[y]]>= 2 && contents[x + vmult[y]] < 80) {
return 0;
}
if (contents[x + vmult[y]]>= 680) {
return 0;
}
}
}
return 1;
}
public static function backonlyfree(x:int, y:int):int {
//Returns 1 if tile is a background tile, 0 otherwise
if (x < 0) return backonlyfree(0, y);
if (y < 0) return backonlyfree(x, 0);
if (x >= 40) return backonlyfree(39, y);
if (y >= 30) return backonlyfree(x, 29);
if (x >= 0 && y >= 0 && x < 40 && y < 30) {
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]]>= 680) {
return 1;
}
}
return 0;
}
public static function backfree(x:int, y:int):int {
//Returns 0 if tile is not a block or background tile, 1 otherwise
if (x < 0) return backfree(0, y);
if (y < 0) return backfree(x, 0);
if (x >= 40) return backfree(39, y);
if (y >= 30) return backfree(x, 29);
if (x >= 0 && y >= 0 && x < 40 && y < 30) {
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]] == 0) {
return 0;
}else{
//if(contents[x+(levx*40)+vmult[y+(levy*30)]]>=2 && contents[x+(levx*40)+vmult[y+(levy*30)]]<80){
// return 0;
//}
}
}
return 1;
}
public static function spikefree(x:int, y:int):int {
//Returns 0 if tile is not a block or spike, 1 otherwise
if (x == -1) return free(0, y);
if (y == -1) return free(x, 0);
if (x == 40) return free(39, y);
if (y == 30) return free(x, 29);
if (x >= 0 && y >= 0 && x < 40 && y < 30) {
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]] == 0) {
return 0;
}else{
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]]>= 680) {
return 0;
}
}
}
return 1;
}
public static function free(x:int, y:int):int {
//Returns 0 if tile is not a block, 1 otherwise
if (x == -1) return free(0, y);
if (y == -1) return free(x, 0);
if (x == 40) return free(39, y);
if (y == 30) return free(x, 29);
if (x >= 0 && y >= 0 && x < 40 && y < 30) {
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]] == 0) {
return 0;
}else {
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]]>= 2 && contents[x + (levx * 40) + vmult[y + (levy * 30)]] < 80) {
return 0;
}
if (contents[x + (levx * 40) + vmult[y + (levy * 30)]]>= 680) {
return 0;
}
}
}
return 1;
}
public static function absfree(x:int, y:int):int {
//Returns 0 if tile is not a block, 1 otherwise, abs on grid
if (x >= 0 && y >= 0 && x < mapwidth * 40 && y < mapheight * 30) {
if (contents[x + vmult[y]] == 0) {
return 0;
}else{
if (contents[x + vmult[y]]>= 2 && contents[x + vmult[y]] < 80){
return 0;
}
if (contents[x + vmult[y]]>= 680) {
return 0;
}
}
}
return 1;
}
public static function match(x:int, y:int):int {
if (free(x - 1, y) == 0 && free(x, y - 1) == 0 && free(x + 1, y) == 0 && free(x, y + 1) == 0) return 0;
if (free(x - 1, y) == 0 && free(x, y - 1) == 0) return 10;
if (free(x + 1, y) == 0 && free(x, y - 1) == 0) return 11;
if (free(x - 1, y) == 0 && free(x, y + 1) == 0) return 12;
if (free(x + 1, y) == 0 && free(x, y + 1) == 0) return 13;
if (free(x, y - 1) == 0) return 1;
if (free(x - 1, y) == 0) return 2;
if (free(x, y + 1) == 0) return 3;
if (free(x + 1, y) == 0) return 4;
if (free(x - 1, y - 1) == 0) return 5;
if (free(x + 1, y - 1) == 0) return 6;
if (free(x - 1, y + 1) == 0) return 7;
if (free(x + 1, y + 1) == 0) return 8;
return 0;
}
public static function warpzonematch(x:int, y:int):int {
if (free(x - 1, y) == 0 && free(x, y - 1) == 0 && free(x + 1, y) == 0 && free(x, y + 1) == 0) return 0;
if (free(x - 1, y) == 0 && free(x, y - 1) == 0) return 10;
if (free(x + 1, y) == 0 && free(x, y - 1) == 0) return 11;
if (free(x - 1, y) == 0 && free(x, y + 1) == 0) return 12;
if (free(x + 1, y) == 0 && free(x, y + 1) == 0) return 13;
if (free(x, y - 1) == 0) return 1;
if (free(x - 1, y) == 0) return 2;
if (free(x, y + 1) == 0) return 3;
if (free(x + 1, y) == 0) return 4;
if (free(x - 1, y - 1) == 0) return 5;
if (free(x + 1, y - 1) == 0) return 6;
if (free(x - 1, y + 1) == 0) return 7;
if (free(x + 1, y + 1) == 0) return 8;
return 0;
}
public static function outsidematch(x:int, y:int):int {
if (backonlyfree(x - 1, y) == 0 && backonlyfree(x + 1, y) == 0) return 2;
if (backonlyfree(x, y - 1) == 0 && backonlyfree(x, y + 1) == 0) return 1;
return 0;
}
public static function backmatch(x:int, y:int):int{
//Returns the first position match for a border
// 5 1 6
// 2 X 4
// 7 3 8
/*
if(at(x-1,y)>=80 && at(x,y-1)>=80) return 10;
if(at(x+1,y)>=80 && at(x,y-1)>=80) return 11;
if(at(x-1,y)>=80 && at(x,y+1)>=80) return 12;
if(at(x+1,y)>=80 && at(x,y+1)>=80) return 13;
if(at(x,y-1)>=80) return 1;
if(at(x-1,y)>=80) return 2;
if(at(x,y+1)>=80) return 3;
if(at(x+1,y)>=80) return 4;
if(at(x-1,y-1)>=80) return 5;
if(at(x+1,y-1)>=80) return 6;
if(at(x-1,y+1)>=80) return 7;
if(at(x+1,y+1)>=80) return 8;
*/
if (backfree(x - 1, y) == 0 && backfree(x, y - 1) == 0 && backfree(x + 1, y) == 0 && backfree(x, y + 1) == 0) return 0;
if (backfree(x - 1, y) == 0 && backfree(x, y - 1) == 0) return 10;
if (backfree(x + 1, y) == 0 && backfree(x, y - 1) == 0) return 11;
if (backfree(x - 1, y) == 0 && backfree(x, y + 1) == 0) return 12;
if (backfree(x + 1, y) == 0 && backfree(x, y + 1) == 0) return 13;
if (backfree(x, y - 1) == 0) return 1;
if (backfree(x - 1, y) == 0) return 2;
if (backfree(x, y + 1) == 0) return 3;
if (backfree(x + 1, y) == 0) return 4;
if (backfree(x - 1, y - 1) == 0) return 5;
if (backfree(x + 1, y - 1) == 0) return 6;
if (backfree(x - 1, y + 1) == 0) return 7;
if (backfree(x + 1, y + 1) == 0) return 8
return 0;
}
public static function edgetile(x:int, y:int):int {
switch(match(x, y)) {
case 14: return 0; break;
case 10: return 80; break;
case 11: return 82; break;
case 12: return 160; break;
case 13: return 162; break;
case 1: return 81; break;
case 2: return 120; break;
case 3: return 161; break;
case 4: return 122; break;
case 5: return 42; break;
case 6: return 41; break;
case 7: return 2; break;
case 8: return 1; break;
case 0: default: return 0; break;
}
return 0;
}
public static function warpzoneedgetile(x:int, y:int):int{
switch(backmatch(x, y)) {
case 14: return 0; break;
case 10: return 80; break;
case 11: return 82; break;
case 12: return 160; break;
case 13: return 162; break;
case 1: return 81; break;
case 2: return 120; break;
case 3: return 161; break;
case 4: return 122; break;
case 5: return 42; break;
case 6: return 41; break;
case 7: return 2; break;
case 8: return 1; break;
case 0: default: return 0; break;
}
return 0;
}
public static function outsideedgetile(x:int, y:int):int{
switch(outsidematch(x,y)){
case 2: return 0; break;
case 1: return 1; break;
case 0: default: return 2; break;
}
return 2;
}
public static function backedgetile(x:int, y:int):int {
switch(backmatch(x, y)) {
case 14: return 0; break;
case 10: return 80; break;
case 11: return 82; break;
case 12: return 160; break;
case 13: return 162; break;
case 1: return 81; break;
case 2: return 120; break;
case 3: return 161; break;
case 4: return 122; break;
case 5: return 42; break;
case 6: return 41; break;
case 7: return 2; break;
case 8: return 1; break;
case 0: default: return 0; break;
}
return 0;
}
public static function labspikedir(x:int, y:int, t:int):int{
// a slightly more tricky case
if (free(x, y + 1) == 1) return 63 + (t * 2);
if (free(x, y - 1) == 1) return 64 + (t * 2);
if (free(x - 1, y) == 1) return 51 + (t * 2);
if (free(x + 1, y) == 1) return 52 + (t * 2);
return 63 + (t * 2);
}
public static function spikedir(x:int, y:int):int{
if (free(x, y + 1) == 1) return 8;
if (free(x, y - 1) == 1) return 9;
if (free(x - 1, y) == 1) return 49;
if (free(x + 1, y) == 1) return 50;
return 8;
}
public static function findstartpoint(game:gameclass):void {
//Ok! Scan the room for the closest checkpoint
var testeditor:int = -1;
//First up; is there a start point on this screen?
for (var i:int = 0; i < editordata.numedentities; i++) {
//if() on screen
if (edentity[i].t == 16 && testeditor == -1){
testeditor=i;
}
}
if (testeditor == -1) {
game.edsavex = 160;
game.edsavey = 120;
game.edsaverx = 100;
game.edsavery = 100;
game.edsavegc = 0;
game.edsavey--;
game.edsavedir = 1 - edentity[testeditor].p1;
}else{
//Start point spawn
var tx:int = (edentity[testeditor].x - (edentity[testeditor].x % 40)) / 40;
var ty:int = (edentity[testeditor].y - (edentity[testeditor].y % 30)) / 30;
game.edsavex = ((edentity[testeditor].x % 40) * 8) - 4;
game.edsavey = (edentity[testeditor].y % 30) * 8;
game.edsaverx = 100 + tx;
game.edsavery = 100 + ty;
game.edsavegc = 0;
game.edsavey--;
game.edsavedir = 1 - edentity[testeditor].p1;
}
}
public static function saveconvertor():void{
//In the case of resizing breaking a level, this function can fix it
maxwidth = 20;
maxheight = 20;
var oldwidth:int = 10, oldheight:int = 10;
var tempcontents:Vector.<int> = new Vector.<int>;
for (var j:int = 0; j < 30 * oldwidth; j++) {
for (var i:int = 0; i < 40 * oldheight; i++) {
tempcontents.push(contents[i + (j * 40 * oldwidth)]);
}
}
contents.length = 0;
for (j = 0; j < 30 * maxheight; j++) {
for (i = 0; i < 40 * maxwidth; i++){
contents.push(0);
}
}
for (j = 0; j < 30 * oldheight; j++){
for (i = 0; i < 40 * oldwidth; i++){
contents[i + (j * 40 * oldwidth)] = tempcontents[i + (j * 40 * oldwidth)];
}
}
tempcontents.length = 0;
vmult.length = 0;
for (i = 0; i < 30 * maxheight; i++){
vmult.push(int(i * 40 * maxwidth));
}
for (j = 0; j < maxheight; j++) {
for (i = 0; i < maxwidth; i++) {
level[i + (j * maxwidth)].tilecol = (i + j) % 6;
}
}
//contents.length = 0;
}
public static function findtrinket(t:int):int {
var ttrinket:int = 0;
for (var i:int = 0; i < editordata.numedentities; i++) {
if (i == t) return ttrinket;
if (edentity[i].t == 9) ttrinket++;
}
return 0;
}
public static function findcrewmate(t:int):int {
var ttrinket:int = 0;
for (var i:int = 0; i < editordata.numedentities; i++) {
if (i == t) return ttrinket;
if (edentity[i].t == 15) ttrinket++;
}
return 0;
}
public static function findwarptoken(t:int):int {
var ttrinket:int = 0;
for (var i:int = 0; i < editordata.numedentities; i++) {
if (i == t) return ttrinket;
if (edentity[i].t == 13) ttrinket++;
}
return 0;
}
public static function countstuff():void{
numtrinkets = 0;
numcrewmates = 0;
for (var i:int = 0; i < editordata.numedentities; i++) {
if (edentity[i].t == 9) numtrinkets++;
if (edentity[i].t == 15) numcrewmates++;
}
}
public static function weirdloadthing(t:int):void {
load(t);
}
public static function load(t:int):void {
//Need to dramatically rethink this function
reset();
version = 2;
editordata.creator = playerlevel[t].Data.MetaData.Creator.text();
editordata.title = playerlevel[t].Data.MetaData.Title.text();
Desc1 = playerlevel[t].Data.MetaData.Desc1.text();
Desc2 = playerlevel[t].Data.MetaData.Desc2.text();
Desc3 = playerlevel[t].Data.MetaData.Desc3.text();
website = playerlevel[t].Data.MetaData.website.text();
mapwidth = int(playerlevel[t].Data.mapwidth.text());
mapheight = int(playerlevel[t].Data.mapheight.text());
levmusic = int(playerlevel[t].Data.levmusic.text());
var lvlstring:String = playerlevel[t].Data.contents.text();
var values:Array;
values = new Array;
for (var i:int = 0; i < contents.length; i++) contents[i] = 0;
values = lvlstring.split(",");
var xp:int = 0, yp:int = 0;
for (i = 0; i < values.length; i++) {
contents[xp + (maxwidth * 40 * yp)] = int(values[i]);
xp++;
if(xp == mapwidth*40){
xp = 0;
yp++;
}
}
editordata.numedentities = playerlevel[t].Data.edEntities.edentity.length();
for (i = 0; i < editordata.numedentities; i++) {
edentity[i].x = playerlevel[t].Data.edEntities.edentity[i].@x;
edentity[i].y = playerlevel[t].Data.edEntities.edentity[i].@y;
edentity[i].t = playerlevel[t].Data.edEntities.edentity[i].@t;
edentity[i].p1 = playerlevel[t].Data.edEntities.edentity[i].@p1;
edentity[i].p2 = playerlevel[t].Data.edEntities.edentity[i].@p2;
edentity[i].p3 = playerlevel[t].Data.edEntities.edentity[i].@p3;
edentity[i].p4 = playerlevel[t].Data.edEntities.edentity[i].@p4;
edentity[i].p5 = playerlevel[t].Data.edEntities.edentity[i].@p5;
edentity[i].p6 = playerlevel[t].Data.edEntities.edentity[i].@p6;
edentity[i].scriptname = playerlevel[t].Data.edEntities.edentity[i].text();
}
for (i = 0; i < playerlevel[t].Data.levelMetaData.edLevelClass.length(); i++) {
level[i].roomname = playerlevel[t].Data.levelMetaData.edLevelClass[i].text();
level[i].tileset = playerlevel[t].Data.levelMetaData.edLevelClass[i].@tileset;
level[i].tilecol = playerlevel[t].Data.levelMetaData.edLevelClass[i].@tilecol;
level[i].platx1 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@platx1;
level[i].platy1 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@platy1;
level[i].platx2 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@platx2;
level[i].platy2 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@platy2;
level[i].platv = playerlevel[t].Data.levelMetaData.edLevelClass[i].@platv;
level[i].enemyx1 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@enemyx1;
level[i].enemyy1 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@enemyy1;
level[i].enemyx2 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@enemyx2;
level[i].enemyy2 = playerlevel[t].Data.levelMetaData.edLevelClass[i].@enemyy2;
level[i].enemytype = playerlevel[t].Data.levelMetaData.edLevelClass[i].@enemytype;
level[i].warpdir = playerlevel[t].Data.levelMetaData.edLevelClass[i].@warpdir;
level[i].directmode = playerlevel[t].Data.levelMetaData.edLevelClass[i].@directmode;
}
lvlstring = playerlevel[t].Data.script.text();
values = new Array;
values = lvlstring.split("|");
customscript.length = 0;
for (i = 0; i < values.length; i++) {
customscript.push(values[i]);
}
gethooks();
countstuff();
version=2;
//saveconvertor();
}
public static function save(_path:String):void {
//Not used
}
public static function addedentity(xp:int, yp:int, tp:int, p1:int, p2:int, p3:int, p4:int, p5:int, p6:int):void{
edentity[editordata.numedentities].x=xp;
edentity[editordata.numedentities].y=yp;
edentity[editordata.numedentities].t=tp;
edentity[editordata.numedentities].p1=p1;
edentity[editordata.numedentities].p2=p2;
edentity[editordata.numedentities].p3=p3;
edentity[editordata.numedentities].p4=p4;
edentity[editordata.numedentities].p5=p5;
edentity[editordata.numedentities].p6=p6;
edentity[editordata.numedentities].scriptname = "";
editordata.numedentities++;
}
public static function naddedentity(xp:int, yp:int, tp:int, p1:int, p2:int, p3:int, p4:int, p5:int, p6:int):void{
edentity[editordata.numedentities].x=xp;
edentity[editordata.numedentities].y=yp;
edentity[editordata.numedentities].t=tp;
edentity[editordata.numedentities].p1=p1;
edentity[editordata.numedentities].p2=p2;
edentity[editordata.numedentities].p3=p3;
edentity[editordata.numedentities].p4=p4;
edentity[editordata.numedentities].p5=p5;
edentity[editordata.numedentities].p6=p6;
edentity[editordata.numedentities].scriptname="";
}
public static function copyedentity(a:int, b:int):void {
edentity[a].x = edentity[b].x;
edentity[a].y = edentity[b].y;
edentity[a].t = edentity[b].t;
edentity[a].p1 = edentity[b].p1;
edentity[a].p2 = edentity[b].p2;
edentity[a].p3 = edentity[b].p3;
edentity[a].p4 = edentity[b].p4;
edentity[a].p5 = edentity[b].p5;
edentity[a].p6 = edentity[b].p6;
edentity[a].scriptname = edentity[b].scriptname;
}
public static function removeedentity(t:int):void {
if (t == editordata.numedentities - 1) {
editordata.numedentities--;
}else{
for (var m:int = t; m < editordata.numedentities; m++) copyedentity(m, m + 1);
editordata.numedentities--;
}
}
public static function edentat(xp:int, yp:int):int{
for(var i:int=0; i<editordata.numedentities; i++){
if (edentity[i].x == xp && edentity[i].y == yp) return i;
}
return -1;
}
public static function edentclear(xp:int, yp:int):Boolean {
for (var i:int = 0; i < editordata.numedentities; i++) {
if(edentity[i].x==xp && edentity[i].y==yp) return false;
}
return true;
}
public static function fillbox(dwgfx:dwgraphicsclass, x:int, y:int, x2:int, y2:int, c:int):void {
dwgfx.drawfillrect(x, y, x2 - x, 1, c);
dwgfx.drawfillrect(x, y2 - 1, x2 - x, 1, c);
dwgfx.drawfillrect(x, y, 1, y2 - y, c);
dwgfx.drawfillrect(x2 - 1, y, 1, y2 - y, c);
}
public static function fillboxabs(dwgfx:dwgraphicsclass, x:int, y:int, x2:int, y2:int, c:int):void {
dwgfx.drawfillrect(x, y, x2, 1, c);
dwgfx.drawfillrect(x, y + y2 - 1, x2, 1, c);
dwgfx.drawfillrect(x, y, 1, y2, c);
dwgfx.drawfillrect(x + x2 - 1, y, 1, y2, c);
}
public static function generatecustomminimap(dwgfx:dwgraphicsclass, map:mapclass):void {
map.customwidth = mapwidth;
map.customheight = mapheight;
map.customzoom=1;
if(map.customwidth<=10 && map.customheight<=10) map.customzoom=2;
if (map.customwidth <= 5 && map.customheight <= 5) map.customzoom = 4;
//Set minimap offsets
if(map.customzoom==4){
map.custommmxoff = 24 * (5 - map.customwidth);
map.custommmxsize = 240 - (map.custommmxoff * 2);
map.custommmyoff = 18 * (5 - map.customheight);
map.custommmysize = 180 - (map.custommmyoff * 2);
}else if(map.customzoom==2){
map.custommmxoff = 12 * (10 - map.customwidth);
map.custommmxsize = 240 - (map.custommmxoff * 2);
map.custommmyoff=9*(10-map.customheight);
map.custommmysize=180-(map.custommmyoff*2);
}else{
map.custommmxoff = 6 * (20 - map.customwidth);
map.custommmxsize = 240 - (map.custommmxoff * 2);
map.custommmyoff = int(4.5 * (20 - map.customheight));
map.custommmysize = 180 - (map.custommmyoff * 2);
}
if (dwgfx.customminimap == null) {
dwgfx.customminimap = new RenderTexture(240, 180);
dwgfx.images[12] = new Image(dwgfx.customminimap);
}
dwgfx.customminimap.clear(dwgfx.RGB(0, 0, 0), 1.0);
dwgfx.customminimap.drawBundled(function():void {
var tm:int = 0;
var temp:int = 0;
//Scan over the map size
if(mapheight<=5 && mapwidth<=5){
//4x map
for (var j2:int = 0; j2 < mapheight; j2++){
for (var i2:int = 0; i2 < mapwidth; i2++) {
//Ok, now scan over each square
tm = 196;
if (level[i2 + (j2 * maxwidth)].tileset == 1) tm = 96;
for (var j:int = 0; j < 36; j++) {
for (var i:int = 0; i < 48; i++) {
temp = absfree(int(i * 0.83) + (i2 * 40), int(j * 0.83) + (j2 * 30));
if(temp>=1){
//Fill in this pixel
dwgfx.drawfillrect_onimage(dwgfx.customminimap, (i2 * 48) + i, (j2 * 36) + j, 1, 1, tm, tm, tm);
}
}
}
}
}
}else if (mapheight <= 10 && mapwidth <= 10) {
//2x map
for (j2 = 0; j2 < mapheight; j2++) {
for (i2 = 0; i2 < mapwidth; i2++) {
//Ok, now scan over each square
tm = 196;
if (level[i2 + (j2 * maxwidth)].tileset == 1) tm = 96;
for (j = 0; j < 18; j++) {
for (i = 0; i < 24; i++) {
temp = absfree(int(i * 1.6) + (i2 * 40), int(j * 1.6) + (j2 * 30));
if (temp >= 1) {
//Fill in this pixel
dwgfx.drawfillrect_onimage(dwgfx.customminimap, (i2 * 24) + i, (j2 * 18) + j, 1, 1, tm, tm, tm);
}
}
}
}
}
}else {
for (j2 = 0; j2 < mapheight; j2++) {
for (i2 = 0; i2 < mapwidth; i2++) {
//Ok, now scan over each square
tm=196;
if (level[i2 + (j2 * maxwidth)].tileset == 1) tm = 96;
for (j = 0; j < 9; j++) {
for (i = 0; i < 12; i++) {
temp = absfree(3 + (i * 3) + (i2 * 40), (j * 3) + (j2 * 30));
if(temp>=1){
//Fill in this pixel
dwgfx.drawfillrect_onimage(dwgfx.customminimap, (i2 * 12) + i, (j2 * 9) + j, 1, 1, tm, tm, tm);
}
}
}
}
}
}
});
}
public static function editorrender(dwgfx:dwgraphicsclass, game:gameclass, map:mapclass, obj:entityclass, help:helpclass):void {
//Not used
trace("ERROR: Editorrender called");
}
public static function editorlogic(dwgfx:dwgraphicsclass, game:gameclass, obj:entityclass, music:musicclass, map:mapclass, help:helpclass):void {
//Not used
trace("ERROR: Editorlogic called");
}
public static function editorinput(dwgfx:dwgraphicsclass, game:gameclass, map:mapclass, obj:entityclass, help:helpclass, music:musicclass):void {
//Not used
trace("ERROR: Editorinput called");
}
public static var customscript:Vector.<String> = new Vector.<String>;
public static var editordata:EditorDataclass = new EditorDataclass;
public static var edentity:Vector.<edentitiesclass> = new Vector.<edentitiesclass>;
public static var Desc1:String;
public static var Desc2:String;
public static var Desc3:String;
public static var website:String;
public static var directoryList:Vector.<String> = new Vector.<String>;
public static var ListOfMetaData:Vector.<LevelMetaData> = new Vector.<LevelMetaData>;
public static var entcol:int;
public static var swapmap:Vector.<int> = new Vector.<int>;
public static var contents:Vector.<int> = new Vector.<int>;
public static var vmult:Vector.<int> = new Vector.<int>;
public static var numtrinkets:int;
public static var numcrewmates:int;
public static var level:Vector.<edlevelclass> = new Vector.<edlevelclass>;
public static var temp:int;
public static var notedelay:int;
public static var note:String;
public static var keybuffer:String;
public static var filename:String;
public static var drawmode:int;
public static var tilex:int, tiley:int;
public static var keydelay:int, lclickdelay:int;
public static var savekey:Boolean, loadkey:Boolean;
public static var levx:int, levy:int;
public static var entframe:int, entframedelay:int;
public static var roomtextmod:Boolean;
public static var roomtextent:int;
public static var scripttextmod:Boolean;
public static var scripttextent:int;
public static var scripttexttype:int;
public static var xmod:Boolean, zmod:Boolean, spacemod:Boolean, warpmod:Boolean;
public static var roomnamemod:Boolean, textentry:Boolean, savemod:Boolean, loadmod:Boolean;
public static var titlemod:Boolean, creatormod:Boolean, desc1mod:Boolean;
public static var desc2mod:Boolean, desc3mod:Boolean, websitemod:Boolean;
public static var roomnamehide:int;
public static var saveandquit:Boolean;
public static var shiftmenu:Boolean, shiftkey:Boolean;
public static var spacemenu:int;
public static var settingsmod:Boolean, settingskey:Boolean;
public static var warpent:int;
public static var updatetiles:Boolean, changeroom:Boolean;
public static var deletekeyheld:int;
public static var boundarymod:int, boundarytype:int;
public static var boundx1:int, boundx2:int, boundy1:int, boundy2:int;
public static var levmusic:int;
public static var mapwidth:int, mapheight:int; //Actual width and height of stage
public static var maxwidth:int, maxheight:int; //Special; the physical max the engine allows
public static var version:int;
public static var m_editorSavePath:String;
public static var scripteditmod:Boolean;
public static var scripthelppage:int, scripthelppagedelay:int;
public static var sb:Vector.<String> = new Vector.<String>;
public static var sbscript:String;
public static var sblength:int;
public static var sbx:int, sby:int;
public static var pagey:int;
public static var author:String;
public static var description:String;
public static var title:String;
public static var hooklist:Vector.<String> = new Vector.<String>;
public static var numhooks:int;
public static var hookmenupage:int, hookmenu:int;
//Direct Mode variables
public static var dmtile:int;
public static var dmtileeditor:int;
public static var playerlevel:Vector.<XML> = new Vector.<XML>;
public static var playerlevel_spikyness:Vector.<int> = new Vector.<int>;
[Embed(source='../data/playerlevels/4kvvvv.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_4kvvvv:Class;
[Embed(source='../data/playerlevels/333333_easy.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_333333_easy:Class;
[Embed(source='../data/playerlevels/a_new_dimension.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_a_new_dimension:Class;
[Embed(source='../data/playerlevels/linewrap.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_linewrap:Class;
[Embed(source='../data/playerlevels/pyramid.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_pyramid:Class;
[Embed(source='../data/playerlevels/quantumtunnel12.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_quantumtunnel12:Class;
[Embed(source='../data/playerlevels/roadtrip.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_roadtrip:Class;
[Embed(source='../data/playerlevels/seasons.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_seasons:Class;
[Embed(source='../data/playerlevels/soulsearching.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_soulsearching:Class;
[Embed(source='../data/playerlevels/the_dual_challenge.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_the_dual_challenge:Class;
[Embed(source='../data/playerlevels/towerofpower.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_towerofpower:Class;
[Embed(source='../data/playerlevels/variationventure.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_variationventure:Class;
[Embed(source='../data/playerlevels/varietyshow.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_varietyshow:Class;
[Embed(source='../data/playerlevels/vertexvortex.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_vertexvortex:Class;
[Embed(source='../data/playerlevels/vertiginousviridian.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_vertiginousviridian:Class;
[Embed(source='../data/playerlevels/victuals.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_victuals:Class;
[Embed(source='../data/playerlevels/vvvvvvgoldenspiral.vvvvvv', mimeType="application/octet-stream")]
public static const lvl_vvvvvvgoldenspiral:Class;
}
};