VVVVVV/mobile_version/src/editor.as

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;
}
};